From a141818c4f1a65e552b5b2de42a5f50adf111a21 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Tue, 10 Sep 2024 18:22:18 -0400 Subject: [PATCH 01/52] [Response Ops][Task Manager] Add bulk update function that directly updates using the `esClient` (#191760) Resolves https://github.com/elastic/kibana/issues/187704 ## Summary Creates a new `bulkPartialUpdate` function in the `task_store` class that uses the ES client to perform bulk partial updates instead of the Saved Objects client. Updates the update in the `mget` task claimer to use this new function. ## To verify Run this branch with the `xpack.task_manager.claim_strategy: 'mget'` and ensure that all tasks are running as expected. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/task_manager/server/task.ts | 8 + .../task_claimers/strategy_mget.test.ts | 986 +++++++++--------- .../server/task_claimers/strategy_mget.ts | 79 +- .../task_manager/server/task_store.mock.ts | 1 + .../task_manager/server/task_store.test.ts | 406 +++++++- .../plugins/task_manager/server/task_store.ts | 100 +- x-pack/plugins/task_manager/tsconfig.json | 3 +- 7 files changed, 1025 insertions(+), 558 deletions(-) diff --git a/x-pack/plugins/task_manager/server/task.ts b/x-pack/plugins/task_manager/server/task.ts index 772d2615ce84a..bbe2935bdfc6d 100644 --- a/x-pack/plugins/task_manager/server/task.ts +++ b/x-pack/plugins/task_manager/server/task.ts @@ -456,6 +456,10 @@ export interface ConcreteTaskInstance extends TaskInstance { partition?: number; } +export type PartialConcreteTaskInstance = Partial & { + id: ConcreteTaskInstance['id']; +}; + export interface ConcreteTaskInstanceVersion { /** The _id of the the document (not the SO id) */ esId: string; @@ -490,3 +494,7 @@ export type SerializedConcreteTaskInstance = Omit< runAt: string; partition?: number; }; + +export type PartialSerializedConcreteTaskInstance = Partial & { + id: SerializedConcreteTaskInstance['id']; +}; diff --git a/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.test.ts b/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.test.ts index a9fd6a3c62d68..cd1433d2e4009 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.test.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.test.ts @@ -9,7 +9,6 @@ import _ from 'lodash'; import sinon from 'sinon'; import { v4 as uuidv4 } from 'uuid'; import { filter, take, toArray } from 'rxjs'; -import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { CLAIM_STRATEGY_MGET, DEFAULT_KIBANAS_PER_PARTITION } from '../config'; @@ -19,6 +18,7 @@ import { ConcreteTaskInstanceVersion, TaskPriority, TaskCost, + PartialConcreteTaskInstance, } from '../task'; import { SearchOpts, StoreOpts } from '../task_store'; import { asTaskClaimEvent, TaskEvent } from '../task_events'; @@ -178,8 +178,8 @@ describe('TaskClaiming', () => { for (let i = 0; i < hits.length; i++) { store.msearch.mockResolvedValueOnce({ docs: hits[i], versionMap: versionMaps[i] }); store.getDocVersions.mockResolvedValueOnce(versionMaps[i]); - const oneBulkResult = hits[i].map((hit) => asOk(hit)); - store.bulkUpdate.mockResolvedValueOnce(oneBulkResult); + const oneBulkResult = hits[i].map((hit) => getPartialUpdateResult(hit)); + store.bulkPartialUpdate.mockResolvedValueOnce(oneBulkResult); const oneBulkGetResult = hits[i].map((hit) => asOk(hit)); store.bulkGet.mockResolvedValueOnce(oneBulkGetResult); } @@ -353,8 +353,8 @@ describe('TaskClaiming', () => { store.bulkGet.mockResolvedValueOnce( [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2]].map(asOk) ); - store.bulkUpdate.mockResolvedValueOnce( - [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2]].map(asOk) + store.bulkPartialUpdate.mockResolvedValueOnce( + [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2]].map(getPartialUpdateResult) ); const taskClaiming = new TaskClaiming({ @@ -402,36 +402,39 @@ describe('TaskClaiming', () => { 'task:id-5', 'task:id-6', ]); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[0], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + scheduledAt: fetchedTasks[0].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-1', 'id-2', 'id-3']); expect(result.stats).toEqual({ @@ -459,8 +462,10 @@ describe('TaskClaiming', () => { store.getDocVersions.mockResolvedValueOnce(docLatestVersions); store.bulkGet.mockResolvedValueOnce([fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockResolvedValueOnce([fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockResolvedValueOnce([fetchedTasks[0], fetchedTasks[1]].map(asOk)); + store.bulkPartialUpdate.mockResolvedValueOnce([fetchedTasks[2]].map(getPartialUpdateResult)); + store.bulkPartialUpdate.mockResolvedValueOnce( + [fetchedTasks[0], fetchedTasks[1]].map(getPartialUpdateResult) + ); const taskClaiming = new TaskClaiming({ logger: taskManagerLogger, @@ -500,35 +505,31 @@ describe('TaskClaiming', () => { seq_no_primary_term: true, }); expect(store.getDocVersions).toHaveBeenCalledWith(['task:id-1', 'task:id-2', 'task:id-3']); - expect(store.bulkUpdate).toHaveBeenCalledTimes(2); - expect(store.bulkUpdate).toHaveBeenNthCalledWith( - 1, - [ - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); - expect(store.bulkUpdate).toHaveBeenNthCalledWith( - 2, - [ - { - ...fetchedTasks[0], - status: 'unrecognized', - }, - { - ...fetchedTasks[1], - status: 'unrecognized', - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(2); + expect(store.bulkPartialUpdate).toHaveBeenNthCalledWith(1, [ + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); + expect(store.bulkPartialUpdate).toHaveBeenNthCalledWith(2, [ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + status: 'unrecognized', + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + status: 'unrecognized', + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-3']); expect(result.stats).toEqual({ @@ -556,14 +557,20 @@ describe('TaskClaiming', () => { store.getDocVersions.mockResolvedValueOnce(docLatestVersions); store.bulkGet.mockResolvedValueOnce([fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockResolvedValueOnce([fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockResolvedValueOnce([ + store.bulkPartialUpdate.mockResolvedValueOnce([fetchedTasks[2]].map(getPartialUpdateResult)); + store.bulkPartialUpdate.mockResolvedValueOnce([ asOk(fetchedTasks[0]), - // @ts-expect-error asErr({ type: 'task', id: fetchedTasks[1].id, - error: SavedObjectsErrorHelpers.createBadRequestError(), + status: 404, + error: { + type: 'document_missing_exception', + reason: '[5]: document missing', + index_uuid: 'aAsFqTI0Tc2W0LCWgPNrOA', + shard: '0', + index: '.kibana_task_manager_8.16.0_001', + }, }), ]); @@ -596,7 +603,7 @@ describe('TaskClaiming', () => { expect(mockApmTrans.end).toHaveBeenCalledWith('success'); expect(taskManagerLogger.warn).toHaveBeenCalledWith( - 'Error updating task id-2:task to mark as unrecognized during claim: Bad Request', + 'Error updating task id-2:task to mark as unrecognized during claim: {"type":"document_missing_exception","reason":"[5]: document missing","index_uuid":"aAsFqTI0Tc2W0LCWgPNrOA","shard":"0","index":".kibana_task_manager_8.16.0_001"}', { tags: ['claimAvailableTasksMget'] } ); expect(taskManagerLogger.debug).toHaveBeenCalledWith( @@ -609,35 +616,31 @@ describe('TaskClaiming', () => { seq_no_primary_term: true, }); expect(store.getDocVersions).toHaveBeenCalledWith(['task:id-1', 'task:id-2', 'task:id-3']); - expect(store.bulkUpdate).toHaveBeenCalledTimes(2); - expect(store.bulkUpdate).toHaveBeenNthCalledWith( - 1, - [ - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); - expect(store.bulkUpdate).toHaveBeenNthCalledWith( - 2, - [ - { - ...fetchedTasks[0], - status: 'unrecognized', - }, - { - ...fetchedTasks[1], - status: 'unrecognized', - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(2); + expect(store.bulkPartialUpdate).toHaveBeenNthCalledWith(1, [ + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); + expect(store.bulkPartialUpdate).toHaveBeenNthCalledWith(2, [ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + status: 'unrecognized', + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + status: 'unrecognized', + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-3']); expect(result.stats).toEqual({ @@ -665,8 +668,8 @@ describe('TaskClaiming', () => { store.getDocVersions.mockResolvedValueOnce(docLatestVersions); store.bulkGet.mockResolvedValueOnce([fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockResolvedValueOnce([fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockRejectedValueOnce(new Error('Oh no')); + store.bulkPartialUpdate.mockResolvedValueOnce([fetchedTasks[2]].map(getPartialUpdateResult)); + store.bulkPartialUpdate.mockRejectedValueOnce(new Error('Oh no')); const taskClaiming = new TaskClaiming({ logger: taskManagerLogger, @@ -711,35 +714,31 @@ describe('TaskClaiming', () => { }); expect(store.getDocVersions).toHaveBeenCalledWith(['task:id-1', 'task:id-2', 'task:id-3']); expect(store.bulkGet).toHaveBeenCalledWith(['id-3']); - expect(store.bulkUpdate).toHaveBeenCalledTimes(2); - expect(store.bulkUpdate).toHaveBeenNthCalledWith( - 1, - [ - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); - expect(store.bulkUpdate).toHaveBeenNthCalledWith( - 2, - [ - { - ...fetchedTasks[0], - status: 'unrecognized', - }, - { - ...fetchedTasks[1], - status: 'unrecognized', - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(2); + expect(store.bulkPartialUpdate).toHaveBeenNthCalledWith(1, [ + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); + expect(store.bulkPartialUpdate).toHaveBeenNthCalledWith(2, [ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + status: 'unrecognized', + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + status: 'unrecognized', + }, + ]); expect(result.stats).toEqual({ tasksClaimed: 1, @@ -796,7 +795,7 @@ describe('TaskClaiming', () => { }); expect(store.getDocVersions).not.toHaveBeenCalled(); expect(store.bulkGet).not.toHaveBeenCalled(); - expect(store.bulkUpdate).not.toHaveBeenCalled(); + expect(store.bulkPartialUpdate).not.toHaveBeenCalled(); expect(result.stats).toEqual({ tasksClaimed: 0, @@ -822,7 +821,9 @@ describe('TaskClaiming', () => { store.getDocVersions.mockResolvedValueOnce(docLatestVersions); store.bulkGet.mockResolvedValueOnce([fetchedTasks[1], fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockResolvedValueOnce([fetchedTasks[1], fetchedTasks[2]].map(asOk)); + store.bulkPartialUpdate.mockResolvedValueOnce( + [fetchedTasks[1], fetchedTasks[2]].map(getPartialUpdateResult) + ); const taskClaiming = new TaskClaiming({ logger: taskManagerLogger, @@ -862,28 +863,29 @@ describe('TaskClaiming', () => { seq_no_primary_term: true, }); expect(store.getDocVersions).toHaveBeenCalledWith(['task:id-1', 'task:id-2', 'task:id-3']); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-2', 'id-3']); expect(result.stats).toEqual({ @@ -912,7 +914,9 @@ describe('TaskClaiming', () => { store.getDocVersions.mockResolvedValueOnce(docLatestVersions); store.bulkGet.mockResolvedValueOnce([fetchedTasks[1], fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockResolvedValueOnce([fetchedTasks[1], fetchedTasks[2]].map(asOk)); + store.bulkPartialUpdate.mockResolvedValueOnce( + [fetchedTasks[1], fetchedTasks[2]].map(getPartialUpdateResult) + ); const taskClaiming = new TaskClaiming({ logger: taskManagerLogger, @@ -952,28 +956,29 @@ describe('TaskClaiming', () => { seq_no_primary_term: true, }); expect(store.getDocVersions).toHaveBeenCalledWith(['task:id-1', 'task:id-2', 'task:id-3']); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-2', 'id-3']); expect(result.stats).toEqual({ @@ -1002,7 +1007,9 @@ describe('TaskClaiming', () => { store.getDocVersions.mockResolvedValueOnce(docLatestVersions); store.bulkGet.mockResolvedValueOnce([fetchedTasks[1], fetchedTasks[2]].map(asOk)); - store.bulkUpdate.mockResolvedValueOnce([fetchedTasks[1], fetchedTasks[2]].map(asOk)); + store.bulkPartialUpdate.mockResolvedValueOnce( + [fetchedTasks[1], fetchedTasks[2]].map(getPartialUpdateResult) + ); const taskClaiming = new TaskClaiming({ logger: taskManagerLogger, @@ -1042,28 +1049,29 @@ describe('TaskClaiming', () => { seq_no_primary_term: true, }); expect(store.getDocVersions).toHaveBeenCalledWith(['task:id-1', 'task:id-2', 'task:id-3']); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-2', 'id-3']); expect(result.stats).toEqual({ @@ -1096,8 +1104,10 @@ describe('TaskClaiming', () => { store.bulkGet.mockResolvedValueOnce( [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2], fetchedTasks[4]].map(asOk) ); - store.bulkUpdate.mockResolvedValueOnce( - [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2], fetchedTasks[4]].map(asOk) + store.bulkPartialUpdate.mockResolvedValueOnce( + [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2], fetchedTasks[4]].map( + getPartialUpdateResult + ) ); const taskClaiming = new TaskClaiming({ @@ -1145,44 +1155,49 @@ describe('TaskClaiming', () => { 'task:id-5', 'task:id-6', ]); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[0], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[4], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + scheduledAt: fetchedTasks[0].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[4].id, + version: fetchedTasks[4].version, + scheduledAt: fetchedTasks[4].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-1', 'id-2', 'id-3', 'id-5']); expect(result.stats).toEqual({ @@ -1209,8 +1224,10 @@ describe('TaskClaiming', () => { const { versionMap, docLatestVersions } = getVersionMapsFromTasks(fetchedTasks); store.msearch.mockResolvedValueOnce({ docs: fetchedTasks, versionMap }); store.getDocVersions.mockResolvedValueOnce(docLatestVersions); - store.bulkUpdate.mockResolvedValueOnce( - [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2], fetchedTasks[3]].map(asOk) + store.bulkPartialUpdate.mockResolvedValueOnce( + [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2], fetchedTasks[3]].map( + getPartialUpdateResult + ) ); store.bulkGet.mockResolvedValueOnce([ asOk(fetchedTasks[0]), @@ -1271,44 +1288,49 @@ describe('TaskClaiming', () => { 'task:id-3', 'task:id-4', ]); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[0], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[3], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + scheduledAt: fetchedTasks[0].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[3].id, + version: fetchedTasks[3].version, + scheduledAt: fetchedTasks[3].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-1', 'id-2', 'id-3', 'id-4']); expect(result.stats).toEqual({ @@ -1335,8 +1357,10 @@ describe('TaskClaiming', () => { const { versionMap, docLatestVersions } = getVersionMapsFromTasks(fetchedTasks); store.msearch.mockResolvedValueOnce({ docs: fetchedTasks, versionMap }); store.getDocVersions.mockResolvedValueOnce(docLatestVersions); - store.bulkUpdate.mockResolvedValueOnce( - [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2], fetchedTasks[3]].map(asOk) + store.bulkPartialUpdate.mockResolvedValueOnce( + [fetchedTasks[0], fetchedTasks[1], fetchedTasks[2], fetchedTasks[3]].map( + getPartialUpdateResult + ) ); store.bulkGet.mockRejectedValueOnce(new Error('oh no')); @@ -1374,48 +1398,53 @@ describe('TaskClaiming', () => { 'task:id-3', 'task:id-4', ]); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[0], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[3], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + scheduledAt: fetchedTasks[0].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[3].id, + version: fetchedTasks[3].version, + scheduledAt: fetchedTasks[3].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-1', 'id-2', 'id-3', 'id-4']); }); - test('should handle conflict errors when bulk updating the task doc', async () => { + test('should handle individual errors when bulk updating the task doc', async () => { const store = taskStoreMock.create({ taskManagerId: 'test-test' }); store.convertToSavedObjectIds.mockImplementation((ids) => ids.map((id) => `task:${id}`)); @@ -1429,19 +1458,22 @@ describe('TaskClaiming', () => { const { versionMap, docLatestVersions } = getVersionMapsFromTasks(fetchedTasks); store.msearch.mockResolvedValueOnce({ docs: fetchedTasks, versionMap }); store.getDocVersions.mockResolvedValueOnce(docLatestVersions); - store.bulkUpdate.mockResolvedValueOnce([ - asOk(fetchedTasks[0]), - // @ts-expect-error + store.bulkPartialUpdate.mockResolvedValueOnce([ + getPartialUpdateResult(fetchedTasks[0]), asErr({ type: 'task', id: fetchedTasks[1].id, + status: 404, error: { - statusCode: 409, - message: 'Conflict', + type: 'document_missing_exception', + reason: '[5]: document missing', + index_uuid: 'aAsFqTI0Tc2W0LCWgPNrOA', + shard: '0', + index: '.kibana_task_manager_8.16.0_001', }, }), - asOk(fetchedTasks[2]), - asOk(fetchedTasks[3]), + getPartialUpdateResult(fetchedTasks[2]), + getPartialUpdateResult(fetchedTasks[3]), ]); store.bulkGet.mockResolvedValueOnce([ asOk(fetchedTasks[0]), @@ -1478,10 +1510,13 @@ describe('TaskClaiming', () => { expect(mockApmTrans.end).toHaveBeenCalledWith('success'); expect(taskManagerLogger.debug).toHaveBeenCalledWith( - 'task claimer claimed: 3; stale: 0; conflicts: 1; missing: 0; capacity reached: 0; updateErrors: 0; getErrors: 0; removed: 0;', + 'task claimer claimed: 3; stale: 0; conflicts: 0; missing: 0; capacity reached: 0; updateErrors: 1; getErrors: 0; removed: 0;', + { tags: ['claimAvailableTasksMget'] } + ); + expect(taskManagerLogger.error).toHaveBeenCalledWith( + 'Error updating task id-2:task during claim: {"type":"document_missing_exception","reason":"[5]: document missing","index_uuid":"aAsFqTI0Tc2W0LCWgPNrOA","shard":"0","index":".kibana_task_manager_8.16.0_001"}', { tags: ['claimAvailableTasksMget'] } ); - expect(taskManagerLogger.error).not.toHaveBeenCalled(); expect(store.msearch.mock.calls[0][0]?.[0]).toMatchObject({ size: 40, @@ -1493,57 +1528,62 @@ describe('TaskClaiming', () => { 'task:id-3', 'task:id-4', ]); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[0], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[3], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + scheduledAt: fetchedTasks[0].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[3].id, + version: fetchedTasks[3].version, + scheduledAt: fetchedTasks[3].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-1', 'id-3', 'id-4']); expect(result.stats).toEqual({ tasksClaimed: 3, - tasksConflicted: 1, - tasksErrors: 0, + tasksConflicted: 0, + tasksErrors: 1, tasksUpdated: 3, tasksLeftUnclaimed: 0, }); expect(result.docs.length).toEqual(3); }); - test('should handle individual errors when bulk updating the task doc', async () => { + test('should handle conflict errors when bulk updating the task doc', async () => { const store = taskStoreMock.create({ taskManagerId: 'test-test' }); store.convertToSavedObjectIds.mockImplementation((ids) => ids.map((id) => `task:${id}`)); @@ -1557,16 +1597,16 @@ describe('TaskClaiming', () => { const { versionMap, docLatestVersions } = getVersionMapsFromTasks(fetchedTasks); store.msearch.mockResolvedValueOnce({ docs: fetchedTasks, versionMap }); store.getDocVersions.mockResolvedValueOnce(docLatestVersions); - store.bulkUpdate.mockResolvedValueOnce([ - asOk(fetchedTasks[0]), - // @ts-expect-error + store.bulkPartialUpdate.mockResolvedValueOnce([ + getPartialUpdateResult(fetchedTasks[0]), asErr({ type: 'task', id: fetchedTasks[1].id, - error: new Error('Oh no'), + status: 409, + error: { type: 'anything', reason: 'some-reason', index: 'some-index' }, }), - asOk(fetchedTasks[2]), - asOk(fetchedTasks[3]), + getPartialUpdateResult(fetchedTasks[2]), + getPartialUpdateResult(fetchedTasks[3]), ]); store.bulkGet.mockResolvedValueOnce([ asOk(fetchedTasks[0]), @@ -1603,13 +1643,10 @@ describe('TaskClaiming', () => { expect(mockApmTrans.end).toHaveBeenCalledWith('success'); expect(taskManagerLogger.debug).toHaveBeenCalledWith( - 'task claimer claimed: 3; stale: 0; conflicts: 0; missing: 0; capacity reached: 0; updateErrors: 1; getErrors: 0; removed: 0;', - { tags: ['claimAvailableTasksMget'] } - ); - expect(taskManagerLogger.error).toHaveBeenCalledWith( - 'Error updating task id-2:task during claim: Oh no', + 'task claimer claimed: 3; stale: 0; conflicts: 1; missing: 0; capacity reached: 0; updateErrors: 0; getErrors: 0; removed: 0;', { tags: ['claimAvailableTasksMget'] } ); + expect(taskManagerLogger.error).not.toHaveBeenCalled(); expect(store.msearch.mock.calls[0][0]?.[0]).toMatchObject({ size: 40, @@ -1621,50 +1658,55 @@ describe('TaskClaiming', () => { 'task:id-3', 'task:id-4', ]); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[0], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[3], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + scheduledAt: fetchedTasks[0].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[3].id, + version: fetchedTasks[3].version, + scheduledAt: fetchedTasks[3].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).toHaveBeenCalledWith(['id-1', 'id-3', 'id-4']); expect(result.stats).toEqual({ tasksClaimed: 3, - tasksConflicted: 0, - tasksErrors: 1, + tasksConflicted: 1, + tasksErrors: 0, tasksUpdated: 3, tasksLeftUnclaimed: 0, }); @@ -1685,7 +1727,7 @@ describe('TaskClaiming', () => { const { versionMap, docLatestVersions } = getVersionMapsFromTasks(fetchedTasks); store.msearch.mockResolvedValueOnce({ docs: fetchedTasks, versionMap }); store.getDocVersions.mockResolvedValueOnce(docLatestVersions); - store.bulkUpdate.mockRejectedValueOnce(new Error('oh no')); + store.bulkPartialUpdate.mockRejectedValueOnce(new Error('oh no')); store.bulkGet.mockResolvedValueOnce([]); const taskClaiming = new TaskClaiming({ @@ -1722,44 +1764,49 @@ describe('TaskClaiming', () => { 'task:id-3', 'task:id-4', ]); - expect(store.bulkUpdate).toHaveBeenCalledTimes(1); - expect(store.bulkUpdate).toHaveBeenCalledWith( - [ - { - ...fetchedTasks[0], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[1], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[2], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - { - ...fetchedTasks[3], - attempts: 1, - ownerId: 'test-test', - retryAt: new Date('1970-01-01T00:05:30.000Z'), - status: 'running', - startedAt: new Date('1970-01-01T00:00:00.000Z'), - }, - ], - { validate: false, excludeLargeFields: true } - ); + expect(store.bulkPartialUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkPartialUpdate).toHaveBeenCalledWith([ + { + id: fetchedTasks[0].id, + version: fetchedTasks[0].version, + scheduledAt: fetchedTasks[0].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[1].id, + version: fetchedTasks[1].version, + scheduledAt: fetchedTasks[1].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[2].id, + version: fetchedTasks[2].version, + scheduledAt: fetchedTasks[2].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + id: fetchedTasks[3].id, + version: fetchedTasks[3].version, + scheduledAt: fetchedTasks[3].runAt, + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ]); expect(store.bulkGet).not.toHaveBeenCalled(); }); @@ -2175,13 +2222,13 @@ describe('TaskClaiming', () => { doc = { ...doc, retryAt: null }; return asOk(doc); }); - taskStore.bulkUpdate.mockResolvedValueOnce(updatedDocs); + taskStore.bulkPartialUpdate.mockResolvedValueOnce(updatedDocs); taskStore.bulkGet.mockResolvedValueOnce(updatedDocs); } taskStore.msearch.mockResolvedValue({ docs: [], versionMap: new Map() }); taskStore.getDocVersions.mockResolvedValue(new Map()); - taskStore.bulkUpdate.mockResolvedValue([]); + taskStore.bulkPartialUpdate.mockResolvedValue([]); taskStore.bulkGet.mockResolvedValue([]); const taskClaiming = new TaskClaiming({ @@ -2263,6 +2310,17 @@ function generateFakeTasks(count: number = 1) { return _.times(count, (index) => mockInstance({ id: `task:id-${index}` })); } +function getPartialUpdateResult(task: ConcreteTaskInstance) { + return asOk({ + id: task.id, + version: task.version, + scheduledAt: task.runAt, + ownerId: 'test-test', + retryAt: task.runAt, + status: 'claiming', + } as PartialConcreteTaskInstance); +} + function mockInstance(instance: Partial = {}) { return Object.assign( { diff --git a/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts b/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts index 4eae5d9d70790..1fd35d408a3ec 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts @@ -16,7 +16,6 @@ import apm, { Logger } from 'elastic-apm-node'; import { Subject, Observable } from 'rxjs'; -import { omit } from 'lodash'; import { TaskTypeDictionary } from '../task_type_dictionary'; import { TaskClaimerOpts, @@ -24,7 +23,13 @@ import { getEmptyClaimOwnershipResult, getExcludedTaskTypes, } from '.'; -import { ConcreteTaskInstance, TaskStatus, ConcreteTaskInstanceVersion, TaskCost } from '../task'; +import { + ConcreteTaskInstance, + TaskStatus, + ConcreteTaskInstanceVersion, + TaskCost, + PartialConcreteTaskInstance, +} from '../task'; import { TASK_MANAGER_TRANSACTION_TYPE } from '../task_running'; import { TASK_MANAGER_MARK_AS_CLAIMED } from '../queries/task_claiming'; import { TaskClaim, asTaskClaimEvent, startTaskTimer } from '../task_events'; @@ -188,12 +193,11 @@ async function claimAvailableTasks(opts: TaskClaimerOpts): Promise task.id))).reduce< - ConcreteTaskInstance[] - >((acc, task) => { - if (isOk(task)) { - acc.push(task.value); - } else { - const { id, type, error } = task.error; - logger.error(`Error getting full task ${id}:${type} during claim: ${error.message}`, logMeta); - bulkGetErrors++; - } - return acc; - }, []); + const fullTasksToRun = (await taskStore.bulkGet(updatedTaskIds)).reduce( + (acc, task) => { + if (isOk(task)) { + acc.push(task.value); + } else { + const { id, type, error } = task.error; + logger.error( + `Error getting full task ${id}:${type} during claim: ${error.message}`, + logMeta + ); + bulkGetErrors++; + } + return acc; + }, + [] + ); // separate update for removed tasks; shouldn't happen often, so unlikely // a performance concern, and keeps the rest of the logic simpler let removedCount = 0; if (removedTasks.length > 0) { const tasksToRemove = Array.from(removedTasks); + const tasksToRemoveUpdates: PartialConcreteTaskInstance[] = []; for (const task of tasksToRemove) { - task.status = TaskStatus.Unrecognized; + tasksToRemoveUpdates.push({ + id: task.id, + status: TaskStatus.Unrecognized, + }); } // don't worry too much about errors, we'll get them next time try { - const removeResults = await taskStore.bulkUpdate(tasksToRemove, { - validate: false, - excludeLargeFields: true, - }); + const removeResults = await taskStore.bulkPartialUpdate(tasksToRemoveUpdates); for (const removeResult of removeResults) { if (isOk(removeResult)) { removedCount++; } else { const { id, type, error } = removeResult.error; logger.warn( - `Error updating task ${id}:${type} to mark as unrecognized during claim: ${error.message}`, + `Error updating task ${id}:${type} to mark as unrecognized during claim: ${JSON.stringify( + error + )}`, logMeta ); } diff --git a/x-pack/plugins/task_manager/server/task_store.mock.ts b/x-pack/plugins/task_manager/server/task_store.mock.ts index 7cf051f406532..2872286ba861e 100644 --- a/x-pack/plugins/task_manager/server/task_store.mock.ts +++ b/x-pack/plugins/task_manager/server/task_store.mock.ts @@ -24,6 +24,7 @@ export const taskStoreMock = { schedule: jest.fn(), bulkSchedule: jest.fn(), bulkUpdate: jest.fn(), + bulkPartialUpdate: jest.fn(), bulkRemove: jest.fn(), get: jest.fn(), getLifecycle: jest.fn(), diff --git a/x-pack/plugins/task_manager/server/task_store.test.ts b/x-pack/plugins/task_manager/server/task_store.test.ts index 19f2861b0ed16..18dc3fa3c44ce 100644 --- a/x-pack/plugins/task_manager/server/task_store.test.ts +++ b/x-pack/plugins/task_manager/server/task_store.test.ts @@ -8,7 +8,7 @@ import { schema } from '@kbn/config-schema'; import { Client } from '@elastic/elasticsearch'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import _, { omit } from 'lodash'; +import _ from 'lodash'; import { first } from 'rxjs'; import { @@ -17,14 +17,18 @@ import { TaskLifecycleResult, SerializedConcreteTaskInstance, } from './task'; -import { elasticsearchServiceMock, savedObjectsServiceMock } from '@kbn/core/server/mocks'; +import { + ElasticsearchClientMock, + elasticsearchServiceMock, + savedObjectsServiceMock, +} from '@kbn/core/server/mocks'; import { TaskStore, SearchOpts, AggregationOpts, taskInstanceToAttributes } from './task_store'; import { savedObjectsRepositoryMock } from '@kbn/core/server/mocks'; import { SavedObjectAttributes, SavedObjectsErrorHelpers } from '@kbn/core/server'; import { TaskTypeDictionary } from './task_type_dictionary'; import { mockLogger } from './test_utils'; import { AdHocTaskCounter } from './lib/adhoc_task_counter'; -import { asErr } from './lib/result_type'; +import { asErr, asOk } from './lib/result_type'; import { UpdateByQueryResponse } from '@elastic/elasticsearch/lib/api/types'; const mockGetValidatedTaskInstanceFromReading = jest.fn(); @@ -347,7 +351,7 @@ describe('TaskStore', () => { expect(await firstErrorPromise).toMatchInlineSnapshot(`[Error: Failure]`); }); - test('excludes state and params from source when excludeState is true', async () => { + test('excludes state and params from source when limitResponse is true', async () => { const { args } = await testFetch({}, [], true); expect(args).toMatchObject({ index: 'tasky', @@ -889,7 +893,7 @@ describe('TaskStore', () => { ); }); - test(`logs warning and doesn't validate whenever excludeLargeFields option is passed-in`, async () => { + test('pushes error from saved objects client to errors$', async () => { const task = { runAt: mockedDate, scheduledAt: mockedDate, @@ -906,66 +910,378 @@ describe('TaskStore', () => { traceparent: '', }; - savedObjectsClient.bulkUpdate.mockResolvedValue({ - saved_objects: [ - { - id: '324242', - type: 'task', - attributes: { - ...task, - state: '{"foo":"bar"}', - params: '{"hello":"world"}', - }, - references: [], - version: '123', - }, - ], - }); + const firstErrorPromise = store.errors$.pipe(first()).toPromise(); + savedObjectsClient.bulkUpdate.mockRejectedValue(new Error('Failure')); + await expect( + store.bulkUpdate([task], { validate: true }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"Failure"`); + expect(await firstErrorPromise).toMatchInlineSnapshot(`[Error: Failure]`); + }); + }); - await store.bulkUpdate([task], { validate: true, excludeLargeFields: true }); + describe('bulkPartialUpdate', () => { + let store: TaskStore; + let esClient: ElasticsearchClientMock; + const logger = mockLogger(); - expect(logger.warn).toHaveBeenCalledWith( - `Skipping validation for bulk update because excludeLargeFields=true.` - ); - expect(mockGetValidatedTaskInstanceForUpdating).toHaveBeenCalledWith(task, { - validate: false, + beforeAll(() => { + esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + store = new TaskStore({ + logger, + index: 'tasky', + taskManagerId: '', + serializer, + esClient, + definitions: taskDefinitions, + savedObjectsRepository: savedObjectsClient, + adHocTaskCounter, + allowReadingInvalidState: false, + requestTimeouts: { + update_by_query: 1000, + }, }); + }); - expect(savedObjectsClient.bulkUpdate).toHaveBeenCalledWith( - [ - { - id: task.id, - type: 'task', - version: task.version, - attributes: omit(taskInstanceToAttributes(task, task.id), ['state', 'params']), - }, - ], - { refresh: false } - ); + test(`should return immediately if no docs to update`, async () => { + await store.bulkPartialUpdate([]); + + expect(mockGetValidatedTaskInstanceForUpdating).not.toHaveBeenCalled(); + expect(esClient.bulk).not.toHaveBeenCalled(); }); - test('pushes error from saved objects client to errors$', async () => { + test(`should perform partial update using esClient`, async () => { const task = { + id: '324242', + version: 'WzQsMV0=', runAt: mockedDate, scheduledAt: mockedDate, startedAt: null, retryAt: null, - id: 'task:324242', params: { hello: 'world' }, state: { foo: 'bar' }, taskType: 'report', attempts: 3, status: 'idle' as TaskStatus, - version: '123', - ownerId: null, + ownerId: 'testtest', traceparent: '', }; + esClient.bulk.mockResolvedValue({ + errors: false, + took: 0, + items: [ + { + update: { + _index: '.kibana_task_manager_8.16.0_001', + _id: 'task:324242', + _version: 2, + result: 'updated', + _shards: { total: 1, successful: 1, failed: 0 }, + _seq_no: 84, + _primary_term: 1, + status: 200, + }, + }, + ], + }); + + const result = await store.bulkPartialUpdate([task]); + + expect(mockGetValidatedTaskInstanceForUpdating).not.toHaveBeenCalled(); + + expect(esClient.bulk).toHaveBeenCalledWith({ + body: [ + { update: { _id: 'task:324242', if_primary_term: 1, if_seq_no: 4 } }, + { + doc: { + task: { + attempts: 3, + ownerId: 'testtest', + params: '{"hello":"world"}', + retryAt: null, + runAt: '2019-02-12T21:01:22.479Z', + scheduledAt: '2019-02-12T21:01:22.479Z', + startedAt: null, + state: '{"foo":"bar"}', + status: 'idle', + taskType: 'report', + traceparent: '', + }, + }, + }, + ], + index: 'tasky', + refresh: false, + }); + + expect(result).toEqual([asOk(task)]); + }); + + test(`should perform partial update with minimal fields`, async () => { + const task = { + id: '324242', + version: 'WzQsMV0=', + attempts: 3, + }; + + esClient.bulk.mockResolvedValue({ + errors: false, + took: 0, + items: [ + { + update: { + _index: '.kibana_task_manager_8.16.0_001', + _id: 'task:324242', + _version: 2, + result: 'updated', + _shards: { total: 1, successful: 1, failed: 0 }, + _seq_no: 84, + _primary_term: 1, + status: 200, + }, + }, + ], + }); + + const result = await store.bulkPartialUpdate([task]); + + expect(mockGetValidatedTaskInstanceForUpdating).not.toHaveBeenCalled(); + + expect(esClient.bulk).toHaveBeenCalledWith({ + body: [ + { update: { _id: 'task:324242', if_primary_term: 1, if_seq_no: 4 } }, + { doc: { task: { attempts: 3 } } }, + ], + index: 'tasky', + refresh: false, + }); + + expect(result).toEqual([asOk(task)]); + }); + + test(`should perform partial update with no version`, async () => { + const task = { + id: '324242', + attempts: 3, + }; + + esClient.bulk.mockResolvedValue({ + errors: false, + took: 0, + items: [ + { + update: { + _index: '.kibana_task_manager_8.16.0_001', + _id: 'task:324242', + _version: 2, + result: 'updated', + _shards: { total: 1, successful: 1, failed: 0 }, + _seq_no: 84, + _primary_term: 1, + status: 200, + }, + }, + ], + }); + + const result = await store.bulkPartialUpdate([task]); + + expect(mockGetValidatedTaskInstanceForUpdating).not.toHaveBeenCalled(); + + expect(esClient.bulk).toHaveBeenCalledWith({ + body: [{ update: { _id: 'task:324242' } }, { doc: { task: { attempts: 3 } } }], + index: 'tasky', + refresh: false, + }); + + expect(result).toEqual([asOk(task)]); + }); + + test(`should gracefully handle errors within the response`, async () => { + const task1 = { + id: '324242', + version: 'WzQsMV0=', + attempts: 3, + }; + + const task2 = { + id: '45343254', + version: 'WzQsMV0=', + status: 'running' as TaskStatus, + }; + + const task3 = { + id: '7845', + version: 'WzQsMV0=', + runAt: mockedDate, + }; + + esClient.bulk.mockResolvedValue({ + errors: false, + took: 0, + items: [ + { + update: { + _index: '.kibana_task_manager_8.16.0_001', + _id: 'task:324242', + _version: 2, + result: 'updated', + _shards: { total: 1, successful: 1, failed: 0 }, + _seq_no: 84, + _primary_term: 1, + status: 200, + }, + }, + { + update: { + _index: '.kibana_task_manager_8.16.0_001', + _id: 'task:45343254', + _version: 2, + error: { + type: 'document_missing_exception', + reason: '[5]: document missing', + index_uuid: 'aAsFqTI0Tc2W0LCWgPNrOA', + shard: '0', + index: '.kibana_task_manager_8.16.0_001', + }, + status: 404, + }, + }, + { + update: { + _index: '.kibana_task_manager_8.16.0_001', + _id: 'task:7845', + _version: 2, + status: 409, + error: { type: 'anything', reason: 'some-reason', index: 'some-index' }, + }, + }, + ], + }); + + const result = await store.bulkPartialUpdate([task1, task2, task3]); + + expect(mockGetValidatedTaskInstanceForUpdating).not.toHaveBeenCalled(); + + expect(esClient.bulk).toHaveBeenCalledWith({ + body: [ + { update: { _id: 'task:324242', if_primary_term: 1, if_seq_no: 4 } }, + { doc: { task: { attempts: 3 } } }, + { update: { _id: 'task:45343254', if_primary_term: 1, if_seq_no: 4 } }, + { doc: { task: { status: 'running' } } }, + { update: { _id: 'task:7845', if_primary_term: 1, if_seq_no: 4 } }, + { doc: { task: { runAt: mockedDate.toISOString() } } }, + ], + index: 'tasky', + refresh: false, + }); + + expect(result).toEqual([ + asOk(task1), + asErr({ + type: 'task', + id: '45343254', + status: 404, + error: { + type: 'document_missing_exception', + reason: '[5]: document missing', + index_uuid: 'aAsFqTI0Tc2W0LCWgPNrOA', + shard: '0', + index: '.kibana_task_manager_8.16.0_001', + }, + }), + asErr({ + type: 'task', + id: '7845', + status: 409, + error: { type: 'anything', reason: 'some-reason', index: 'some-index' }, + }), + ]); + }); + + test(`should gracefully handle malformed errors within the response`, async () => { + const task1 = { + id: '324242', + version: 'WzQsMV0=', + attempts: 3, + }; + + const task2 = { + id: '45343254', + version: 'WzQsMV0=', + status: 'running' as TaskStatus, + }; + + esClient.bulk.mockResolvedValue({ + errors: false, + took: 0, + items: [ + { + update: { + _index: '.kibana_task_manager_8.16.0_001', + _id: 'task:324242', + _version: 2, + result: 'updated', + _shards: { total: 1, successful: 1, failed: 0 }, + _seq_no: 84, + _primary_term: 1, + status: 200, + }, + }, + { + update: { + _index: '.kibana_task_manager_8.16.0_001', + _version: 2, + error: { + type: 'document_missing_exception', + reason: '[5]: document missing', + index_uuid: 'aAsFqTI0Tc2W0LCWgPNrOA', + shard: '0', + index: '.kibana_task_manager_8.16.0_001', + }, + status: 404, + }, + }, + ], + }); + + const result = await store.bulkPartialUpdate([task1, task2]); + + expect(mockGetValidatedTaskInstanceForUpdating).not.toHaveBeenCalled(); + + expect(esClient.bulk).toHaveBeenCalledWith({ + body: [ + { update: { _id: 'task:324242', if_primary_term: 1, if_seq_no: 4 } }, + { doc: { task: { attempts: 3 } } }, + { update: { _id: 'task:45343254', if_primary_term: 1, if_seq_no: 4 } }, + { doc: { task: { status: 'running' } } }, + ], + index: 'tasky', + refresh: false, + }); + + expect(result).toEqual([ + asOk(task1), + asErr({ + type: 'task', + id: 'unknown', + error: { type: 'malformed response' }, + }), + ]); + }); + + test('pushes error from saved objects client to errors$', async () => { + const task = { + id: '324242', + version: 'WzQsMV0=', + attempts: 3, + }; + const firstErrorPromise = store.errors$.pipe(first()).toPromise(); - savedObjectsClient.bulkUpdate.mockRejectedValue(new Error('Failure')); - await expect( - store.bulkUpdate([task], { validate: true }) - ).rejects.toThrowErrorMatchingInlineSnapshot(`"Failure"`); + esClient.bulk.mockRejectedValue(new Error('Failure')); + await expect(store.bulkPartialUpdate([task])).rejects.toThrowErrorMatchingInlineSnapshot( + `"Failure"` + ); expect(await firstErrorPromise).toMatchInlineSnapshot(`[Error: Failure]`); }); }); diff --git a/x-pack/plugins/task_manager/server/task_store.ts b/x-pack/plugins/task_manager/server/task_store.ts index 12a1f256c585b..2550d37a7de31 100644 --- a/x-pack/plugins/task_manager/server/task_store.ts +++ b/x-pack/plugins/task_manager/server/task_store.ts @@ -26,6 +26,7 @@ import { ElasticsearchClient, } from '@kbn/core/server'; +import { decodeRequestVersion } from '@kbn/core-saved-objects-base-server-internal'; import { RequestTimeoutsConfig } from './config'; import { asOk, asErr, Result } from './lib/result_type'; @@ -36,6 +37,8 @@ import { TaskLifecycle, TaskLifecycleResult, SerializedConcreteTaskInstance, + PartialConcreteTaskInstance, + PartialSerializedConcreteTaskInstance, } from './task'; import { TaskTypeDictionary } from './task_type_dictionary'; @@ -87,7 +90,6 @@ export interface FetchResult { export interface BulkUpdateOpts { validate: boolean; - excludeLargeFields?: boolean; } export type BulkUpdateResult = Result< @@ -95,6 +97,11 @@ export type BulkUpdateResult = Result< { type: string; id: string; error: SavedObjectError } >; +export type PartialBulkUpdateResult = Result< + PartialConcreteTaskInstance, + { type: string; id: string; status?: number; error: estypes.ErrorCause } +>; + export type BulkGetResult = Array< Result >; @@ -114,7 +121,6 @@ export class TaskStore { public readonly taskManagerId: string; public readonly errors$ = new Subject(); public readonly taskValidator: TaskValidator; - private readonly logger: Logger; private esClient: ElasticsearchClient; private esClientWithoutRetries: ElasticsearchClient; @@ -141,7 +147,6 @@ export class TaskStore { this.serializer = opts.serializer; this.savedObjectsRepository = opts.savedObjectsRepository; this.adHocTaskCounter = opts.adHocTaskCounter; - this.logger = opts.logger; this.taskValidator = new TaskValidator({ logger: opts.logger, definitions: opts.definitions, @@ -302,23 +307,13 @@ export class TaskStore { */ public async bulkUpdate( docs: ConcreteTaskInstance[], - { validate, excludeLargeFields = false }: BulkUpdateOpts + { validate }: BulkUpdateOpts ): Promise { - // if we're excluding large fields (state and params), we cannot apply validation so log a warning - if (validate && excludeLargeFields) { - validate = false; - this.logger.warn(`Skipping validation for bulk update because excludeLargeFields=true.`); - } - const attributesByDocId = docs.reduce((attrsById, doc) => { const taskInstance = this.taskValidator.getValidatedTaskInstanceForUpdating(doc, { validate, }); - const taskAttributes = taskInstanceToAttributes(taskInstance, doc.id); - attrsById.set( - doc.id, - excludeLargeFields ? omit(taskAttributes, 'state', 'params') : taskAttributes - ); + attrsById.set(doc.id, taskInstanceToAttributes(taskInstance, doc.id)); return attrsById; }, new Map()); @@ -364,6 +359,67 @@ export class TaskStore { }); } + public async bulkPartialUpdate( + docs: PartialConcreteTaskInstance[] + ): Promise { + if (docs.length === 0) { + return []; + } + + const bulkBody = []; + for (const doc of docs) { + bulkBody.push({ + update: { + _id: `task:${doc.id}`, + ...(doc.version ? decodeRequestVersion(doc.version) : {}), + }, + }); + bulkBody.push({ + doc: { + task: partialTaskInstanceToAttributes(doc), + }, + }); + } + + let result: estypes.BulkResponse; + try { + result = await this.esClient.bulk({ index: this.index, refresh: false, body: bulkBody }); + } catch (e) { + this.errors$.next(e); + throw e; + } + + return result.items.map((item) => { + if (!item.update || !item.update._id) { + return asErr({ + type: 'task', + id: 'unknown', + error: { type: 'malformed response' }, + }); + } + + const docId = item.update._id.startsWith('task:') + ? item.update._id.slice(5) + : item.update._id; + + if (item.update?.error) { + return asErr({ + type: 'task', + id: docId, + status: item.update.status, + error: item.update.error, + }); + } + + const doc = docs.find((d) => d.id === docId); + + return asOk({ + ...doc, + id: docId, + }); + }); + } + /** * Removes the specified task from the index. * @@ -719,6 +775,20 @@ export function taskInstanceToAttributes( } as SerializedConcreteTaskInstance; } +export function partialTaskInstanceToAttributes( + doc: PartialConcreteTaskInstance +): PartialSerializedConcreteTaskInstance { + return { + ...omit(doc, 'id', 'version'), + ...(doc.params ? { params: JSON.stringify(doc.params) } : {}), + ...(doc.state ? { state: JSON.stringify(doc.state) } : {}), + ...(doc.scheduledAt ? { scheduledAt: doc.scheduledAt.toISOString() } : {}), + ...(doc.startedAt ? { startedAt: doc.startedAt.toISOString() } : {}), + ...(doc.retryAt ? { retryAt: doc.retryAt.toISOString() } : {}), + ...(doc.runAt ? { runAt: doc.runAt.toISOString() } : {}), + } as PartialSerializedConcreteTaskInstance; +} + export function savedObjectToConcreteTaskInstance( savedObject: Omit, 'references'> ): ConcreteTaskInstance { diff --git a/x-pack/plugins/task_manager/tsconfig.json b/x-pack/plugins/task_manager/tsconfig.json index 232ab3a36f2c8..55ad764c5bdcd 100644 --- a/x-pack/plugins/task_manager/tsconfig.json +++ b/x-pack/plugins/task_manager/tsconfig.json @@ -26,7 +26,8 @@ "@kbn/core-saved-objects-api-server", "@kbn/logging", "@kbn/core-lifecycle-server", - "@kbn/cloud-plugin" + "@kbn/cloud-plugin", + "@kbn/core-saved-objects-base-server-internal" ], "exclude": ["target/**/*"] } From bc8fc413c43b1a07122deb731a4104496bc572d7 Mon Sep 17 00:00:00 2001 From: Ersin Erdal <92688503+ersin-erdal@users.noreply.github.com> Date: Wed, 11 Sep 2024 00:54:07 +0200 Subject: [PATCH 02/52] Skip malformed actions during bulk action scheduling (#192021) Resolves: #189690 This PR skips only the malformed actions rather than throwing error which blocks execution of the valid actions as well. ### To verify: - Create a pre-configured connectors with below config in the kibana.dev.yml. Notice that slackWebhook doesn't have any `secrets` config. ``` xpack.actions.preconfigured: preconfigured-server-log: name: preconfigured-server-log actionTypeId: .server-log slackWebhook: name: preconfigured-slack-webhook actionTypeId: .slack ``` - Create a rule (e.g. always firing) with 2 actions, one with`preconfigured-server-log` and one with `slackWebhook` - Let the rule run and observe the actions on your terminal. - There should be an error from the slackWebhook whereas the `.server-log` action still works as expected. --- .../server/create_execute_function.test.ts | 133 ++++++++++++++---- .../actions/server/create_execute_function.ts | 68 ++++++--- x-pack/plugins/actions/server/plugin.ts | 6 +- 3 files changed, 156 insertions(+), 51 deletions(-) diff --git a/x-pack/plugins/actions/server/create_execute_function.test.ts b/x-pack/plugins/actions/server/create_execute_function.test.ts index 162297a9a55cf..a1ab85933d9bc 100644 --- a/x-pack/plugins/actions/server/create_execute_function.test.ts +++ b/x-pack/plugins/actions/server/create_execute_function.test.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { KibanaRequest } from '@kbn/core/server'; +import { KibanaRequest, Logger } from '@kbn/core/server'; import { v4 as uuidv4 } from 'uuid'; import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; import { createBulkExecutionEnqueuerFunction } from './create_execute_function'; -import { savedObjectsClientMock } from '@kbn/core/server/mocks'; +import { loggingSystemMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; import { actionTypeRegistryMock } from './action_type_registry.mock'; import { asHttpRequestExecutionSource, @@ -21,6 +21,7 @@ const mockTaskManager = taskManagerMock.createStart(); const savedObjectsClient = savedObjectsClientMock.create(); const request = {} as KibanaRequest; const mockActionsConfig = actionsConfigMock.create(); +const mockLogger = loggingSystemMock.create().get() as jest.Mocked; beforeEach(() => { jest.resetAllMocks(); @@ -43,6 +44,7 @@ describe('bulkExecute()', () => { isESOCanEncrypt: true, inMemoryConnectors: [], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); savedObjectsClient.bulkGet.mockResolvedValueOnce({ saved_objects: [ @@ -133,6 +135,7 @@ describe('bulkExecute()', () => { isESOCanEncrypt: true, inMemoryConnectors: [], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); savedObjectsClient.bulkGet.mockResolvedValueOnce({ saved_objects: [ @@ -226,6 +229,7 @@ describe('bulkExecute()', () => { isESOCanEncrypt: true, inMemoryConnectors: [], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); savedObjectsClient.bulkGet.mockResolvedValueOnce({ saved_objects: [ @@ -323,6 +327,7 @@ describe('bulkExecute()', () => { }, ], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); const source = { type: 'alert', id: uuidv4() }; @@ -422,6 +427,7 @@ describe('bulkExecute()', () => { }, ], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); const source = { type: 'alert', id: uuidv4() }; @@ -521,6 +527,7 @@ describe('bulkExecute()', () => { }, ], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); const source = { type: 'alert', id: uuidv4() }; @@ -641,6 +648,7 @@ describe('bulkExecute()', () => { }, ], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); const source = { type: 'alert', id: uuidv4() }; @@ -750,6 +758,7 @@ describe('bulkExecute()', () => { actionTypeRegistry: actionTypeRegistryMock.create(), inMemoryConnectors: [], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); await expect( executeFn(savedObjectsClient, [ @@ -768,13 +777,14 @@ describe('bulkExecute()', () => { ); }); - test('throws when isMissingSecrets is true for connector', async () => { + test('filter outs the connectors when isMissingSecrets is true', async () => { const executeFn = createBulkExecutionEnqueuerFunction({ taskManager: mockTaskManager, isESOCanEncrypt: true, actionTypeRegistry: actionTypeRegistryMock.create(), inMemoryConnectors: [], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); savedObjectsClient.bulkGet.mockResolvedValueOnce({ saved_objects: [ @@ -788,26 +798,69 @@ describe('bulkExecute()', () => { }, references: [], }, + { + id: '234', + type: 'action', + attributes: { + name: 'mock-action-2', + isMissingSecrets: false, + actionTypeId: 'mock-action-2', + }, + references: [], + }, ], }); - await expect( - executeFn(savedObjectsClient, [ + savedObjectsClient.bulkCreate.mockResolvedValueOnce({ + saved_objects: [ { - id: '123', - params: { baz: false }, - spaceId: 'default', - executionId: '123abc', - apiKey: null, - source: asHttpRequestExecutionSource(request), - actionTypeId: 'mock-action', + id: '234', + type: 'action_task_params', + attributes: { + actionId: '123', + }, + references: [], }, - ]) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Unable to execute action because no secrets are defined for the \\"mock-action\\" connector."` + ], + }); + + const result = await executeFn(savedObjectsClient, [ + { + id: '123', + params: { baz: false }, + spaceId: 'default', + executionId: '123abc', + apiKey: null, + source: asHttpRequestExecutionSource(request), + actionTypeId: 'mock-action', + }, + { + id: '234', + params: { baz: false }, + spaceId: 'default', + executionId: '123abc', + apiKey: null, + source: asHttpRequestExecutionSource(request), + actionTypeId: 'mock-action-2', + }, + ]); + + expect(result).toEqual({ + errors: false, + items: [ + { + actionTypeId: 'mock-action-2', + id: '234', + response: 'success', + }, + ], + }); + + expect(mockLogger.warn).toHaveBeenCalledWith( + 'Skipped the actions for the connector: mock-action (123). Error: Unable to execute action because no secrets are defined for the "mock-action" connector.' ); }); - test('should ensure action type is enabled', async () => { + test('skips the disabled action types', async () => { const mockedActionTypeRegistry = actionTypeRegistryMock.create(); const executeFn = createBulkExecutionEnqueuerFunction({ taskManager: mockTaskManager, @@ -815,6 +868,7 @@ describe('bulkExecute()', () => { actionTypeRegistry: mockedActionTypeRegistry, inMemoryConnectors: [], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); mockedActionTypeRegistry.ensureActionTypeEnabled.mockImplementation(() => { throw new Error('Fail'); @@ -826,25 +880,45 @@ describe('bulkExecute()', () => { type: 'action', attributes: { actionTypeId: 'mock-action', + name: 'test-connector', }, references: [], }, ], }); - - await expect( - executeFn(savedObjectsClient, [ + savedObjectsClient.bulkCreate.mockResolvedValueOnce({ + saved_objects: [ { - id: '123', - params: { baz: false }, - spaceId: 'default', - executionId: '123abc', - apiKey: null, - source: asHttpRequestExecutionSource(request), - actionTypeId: 'mock-action', + id: '234', + type: 'action_task_params', + attributes: { + actionId: '123', + }, + references: [], }, - ]) - ).rejects.toThrowErrorMatchingInlineSnapshot(`"Fail"`); + ], + }); + + const result = await executeFn(savedObjectsClient, [ + { + id: '123', + params: { baz: false }, + spaceId: 'default', + executionId: '123abc', + apiKey: null, + source: asHttpRequestExecutionSource(request), + actionTypeId: 'mock-action', + }, + ]); + + expect(result).toEqual({ + errors: false, + items: [], + }); + + expect(mockLogger.warn).toHaveBeenCalledWith( + 'Skipped the actions for the connector: test-connector (123). Error: Fail' + ); }); test('should skip ensure action type if action type is preconfigured and license is valid', async () => { @@ -866,6 +940,7 @@ describe('bulkExecute()', () => { }, ], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); mockedActionTypeRegistry.isActionExecutable.mockImplementation(() => true); savedObjectsClient.bulkGet.mockResolvedValueOnce({ @@ -927,6 +1002,7 @@ describe('bulkExecute()', () => { }, ], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); mockedActionTypeRegistry.isActionExecutable.mockImplementation(() => true); savedObjectsClient.bulkGet.mockResolvedValueOnce({ @@ -984,6 +1060,7 @@ describe('bulkExecute()', () => { isESOCanEncrypt: true, inMemoryConnectors: [], configurationUtilities: mockActionsConfig, + logger: mockLogger, }); savedObjectsClient.bulkGet.mockResolvedValueOnce({ saved_objects: [], diff --git a/x-pack/plugins/actions/server/create_execute_function.ts b/x-pack/plugins/actions/server/create_execute_function.ts index 04d029f83c577..e8f9c859747ff 100644 --- a/x-pack/plugins/actions/server/create_execute_function.ts +++ b/x-pack/plugins/actions/server/create_execute_function.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { SavedObjectsBulkResponse, SavedObjectsClientContract } from '@kbn/core/server'; +import { SavedObjectsBulkResponse, SavedObjectsClientContract, Logger } from '@kbn/core/server'; import { RunNowResult, TaskManagerStartContract } from '@kbn/task-manager-plugin/server'; import { RawAction, @@ -25,6 +25,7 @@ interface CreateExecuteFunctionOptions { actionTypeRegistry: ActionTypeRegistryContract; inMemoryConnectors: InMemoryConnector[]; configurationUtilities: ActionsConfigurationUtilities; + logger: Logger; } export interface ExecuteOptions @@ -80,6 +81,7 @@ export function createBulkExecutionEnqueuerFunction({ isESOCanEncrypt, inMemoryConnectors, configurationUtilities, + logger, }: CreateExecuteFunctionOptions): BulkExecutionEnqueuer { return async function execute( unsecuredSavedObjectsClient: SavedObjectsClientContract, @@ -113,21 +115,30 @@ export function createBulkExecutionEnqueuerFunction({ inMemoryConnectors, connectorIds ); + const runnableActions: ExecuteOptions[] = []; - connectors.forEach((c) => { + for (const c of connectors) { const { id, connector, isInMemory } = c; - validateCanActionBeUsed(connector); + const { actionTypeId, name } = connector; - const { actionTypeId } = connector; - if (!actionTypeRegistry.isActionExecutable(id, actionTypeId, { notifyUsage: true })) { - actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); + try { + validateConnector({ id, connector, actionTypeRegistry }); + } catch (e) { + logger.warn(`Skipped the actions for the connector: ${name} (${id}). Error: ${e.message}`); + continue; + } + + const actionsWithCurrentConnector = actionsToExecute.filter((action) => action.id === id); + + if (actionsWithCurrentConnector.length > 0) { + runnableActions.push(...actionsWithCurrentConnector); } actionTypeIds[id] = actionTypeId; connectorIsInMemory[id] = isInMemory; - }); + } - const actions = actionsToExecute.map((actionToExecute) => { + const actions = runnableActions.map((actionToExecute) => { // Get saved object references from action ID and relatedSavedObjects const { references, relatedSavedObjectWithRefs } = extractSavedObjectReferences( actionToExecute.id, @@ -165,6 +176,7 @@ export function createBulkExecutionEnqueuerFunction({ }); const actionTaskParamsRecords: SavedObjectsBulkResponse = await unsecuredSavedObjectsClient.bulkCreate(actions, { refresh: false }); + const taskInstances = actionTaskParamsRecords.saved_objects.map((so) => { const actionId = so.attributes.actionId; return { @@ -177,10 +189,12 @@ export function createBulkExecutionEnqueuerFunction({ scope: ['actions'], }; }); + await taskManager.bulkSchedule(taskInstances); + return { errors: actionsOverLimit.length > 0, - items: actionsToExecute + items: runnableActions .map((a) => ({ id: a.id, actionTypeId: a.actionTypeId, @@ -201,18 +215,15 @@ export function createEphemeralExecutionEnqueuerFunction({ taskManager, actionTypeRegistry, inMemoryConnectors, + logger, }: CreateExecuteFunctionOptions): ExecutionEnqueuer { return async function execute( unsecuredSavedObjectsClient: SavedObjectsClientContract, { id, params, spaceId, source, consumer, apiKey, executionId }: ExecuteOptions ): Promise { - const { action } = await getAction(unsecuredSavedObjectsClient, inMemoryConnectors, id); - validateCanActionBeUsed(action); + const { connector } = await getConnector(unsecuredSavedObjectsClient, inMemoryConnectors, id); - const { actionTypeId } = action; - if (!actionTypeRegistry.isActionExecutable(id, actionTypeId, { notifyUsage: true })) { - actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); - } + validateConnector({ id, connector, actionTypeRegistry }); const taskParams: ActionTaskExecutorParams = { spaceId, @@ -229,7 +240,7 @@ export function createEphemeralExecutionEnqueuerFunction({ }; return taskManager.ephemeralRunNow({ - taskType: `actions:${action.actionTypeId}`, + taskType: `actions:${connector.actionTypeId}`, params: taskParams, state: {}, scope: ['actions'], @@ -237,13 +248,26 @@ export function createEphemeralExecutionEnqueuerFunction({ }; } -function validateCanActionBeUsed(action: InMemoryConnector | RawAction) { - const { name, isMissingSecrets } = action; +function validateConnector({ + id, + connector, + actionTypeRegistry, +}: { + id: string; + connector: InMemoryConnector | RawAction; + actionTypeRegistry: ActionTypeRegistryContract; +}) { + const { name, isMissingSecrets, actionTypeId } = connector; + if (isMissingSecrets) { throw new Error( `Unable to execute action because no secrets are defined for the "${name}" connector.` ); } + + if (!actionTypeRegistry.isActionExecutable(id, actionTypeId, { notifyUsage: true })) { + actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); + } } function executionSourceAsSavedObjectReferences(executionSource: ActionExecutorOptions['source']) { @@ -259,19 +283,19 @@ function executionSourceAsSavedObjectReferences(executionSource: ActionExecutorO : {}; } -async function getAction( +async function getConnector( unsecuredSavedObjectsClient: SavedObjectsClientContract, inMemoryConnectors: InMemoryConnector[], actionId: string -): Promise<{ action: InMemoryConnector | RawAction; isInMemory: boolean }> { +): Promise<{ connector: InMemoryConnector | RawAction; isInMemory: boolean }> { const inMemoryAction = inMemoryConnectors.find((action) => action.id === actionId); if (inMemoryAction) { - return { action: inMemoryAction, isInMemory: true }; + return { connector: inMemoryAction, isInMemory: true }; } const { attributes } = await unsecuredSavedObjectsClient.get('action', actionId); - return { action: attributes, isInMemory: false }; + return { connector: attributes, isInMemory: false }; } async function getConnectors( diff --git a/x-pack/plugins/actions/server/plugin.ts b/x-pack/plugins/actions/server/plugin.ts index 2f83f945ba3ef..00dc17c2f92d7 100644 --- a/x-pack/plugins/actions/server/plugin.ts +++ b/x-pack/plugins/actions/server/plugin.ts @@ -478,6 +478,7 @@ export class ActionsPlugin implements Plugin Date: Wed, 11 Sep 2024 02:35:51 +0300 Subject: [PATCH 03/52] [Security Solution] Extend upgrade prebuilt rules context with conflict resolution functionality (#191721) **Addresses:** https://github.com/elastic/kibana/issues/171520 ## Summary This PR implements necessary `UpgradePrebuiltRulesTableContext` changes to provide uses a way to resolve conflicts manually by providing field's resolved value. ## Details During prebuilt rules upgrading users may encounter solvable and non-solvable conflicts between customized and target rule versions. Three-Way-Diff field component allow to specify a desired resolve value user expects to be in the rule after upgrading. It's also possible to customize rules during the upgrading process. Current functionality is informational only without an ability to customize prebuilt rules. As the core part of that process it's required to manage the upgrading state and provide necessary data for downstream components rendering field diffs and accepting user input. **This PR extends** `UpgradePrebuiltRulesTableContext` with rule upgrade state and provides it to `ThreeWayDiffTab` stub component. It's planned to add implementation to `ThreeWayDiffTab` in follow up PRs. **On top of that** `UpgradePrebuiltRulesTableContext` and `AddPrebuiltRulesTableContext` were symmetrically refactored from architecture point of view to improve encapsulation by separation of concerns which leads to slight complexity reduction. ### Feature flag `prebuiltRulesCustomizationEnabled` `ThreeWayDiffTab` is hidden under a feature flag `prebuiltRulesCustomizationEnabled`. It accepts a `finalDiffableRule` which represents rule fields the user expects to see in the upgraded rule. `finalDiffableRule` is a combination of field resolved values and target rule fields where resolved values have precedence. --- .../diff}/convert_rule_to_diffable.ts | 15 +- .../diff/extract_building_block_object.ts | 18 ++ .../diff}/extract_rule_data_query.ts | 6 +- .../diff}/extract_rule_data_source.ts | 6 +- .../extract_rule_name_override_object.ts | 7 +- .../diff}/extract_rule_schedule.ts | 10 +- .../extract_timeline_template_reference.ts | 7 +- .../extract_timestamp_override_object.ts | 7 +- .../detection_engine/rule_management/utils.ts | 25 ++ .../rule_details/three_way_diff_tab.tsx | 22 ++ .../components/rule_details/translations.ts | 7 + .../rule_details/use_rule_details_flyout.tsx | 47 --- .../add_prebuilt_rules_header_buttons.tsx | 11 +- .../add_prebuilt_rules_table.tsx | 9 +- .../add_prebuilt_rules_table_context.tsx | 90 +++--- .../upgrade_prebuilt_rules_table.tsx | 28 +- .../upgrade_prebuilt_rules_table_buttons.tsx | 22 +- .../upgrade_prebuilt_rules_table_context.tsx | 295 +++++++++--------- .../use_prebuilt_rules_upgrade_state.ts | 130 ++++++++ ...e_upgrade_prebuilt_rules_table_columns.tsx | 44 ++- .../rules_table/use_rule_preview_flyout.tsx | 77 +++++ .../logic/diff/calculate_rule_diff.ts | 15 +- .../extract_building_block_object.ts | 21 -- ...rt_prebuilt_rule_asset_to_rule_response.ts | 2 +- .../convert_rule_response_to_alerting_rule.ts | 3 +- .../mergers/apply_rule_defaults.ts | 2 +- .../mergers/apply_rule_patch.ts | 2 +- .../rule_source/calculate_is_customized.ts | 2 +- .../rule_management/utils/utils.ts | 20 -- .../cypress/tasks/api_calls/prebuilt_rules.ts | 19 +- 30 files changed, 601 insertions(+), 368 deletions(-) rename x-pack/plugins/security_solution/{server/lib/detection_engine/prebuilt_rules/logic/diff/normalization => common/detection_engine/prebuilt_rules/diff}/convert_rule_to_diffable.ts (92%) create mode 100644 x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_building_block_object.ts rename x-pack/plugins/security_solution/{server/lib/detection_engine/prebuilt_rules/logic/diff/normalization => common/detection_engine/prebuilt_rules/diff}/extract_rule_data_query.ts (86%) rename x-pack/plugins/security_solution/{server/lib/detection_engine/prebuilt_rules/logic/diff/normalization => common/detection_engine/prebuilt_rules/diff}/extract_rule_data_source.ts (72%) rename x-pack/plugins/security_solution/{server/lib/detection_engine/prebuilt_rules/logic/diff/normalization => common/detection_engine/prebuilt_rules/diff}/extract_rule_name_override_object.ts (57%) rename x-pack/plugins/security_solution/{server/lib/detection_engine/prebuilt_rules/logic/diff/normalization => common/detection_engine/prebuilt_rules/diff}/extract_rule_schedule.ts (85%) rename x-pack/plugins/security_solution/{server/lib/detection_engine/prebuilt_rules/logic/diff/normalization => common/detection_engine/prebuilt_rules/diff}/extract_timeline_template_reference.ts (59%) rename x-pack/plugins/security_solution/{server/lib/detection_engine/prebuilt_rules/logic/diff/normalization => common/detection_engine/prebuilt_rules/diff}/extract_timestamp_override_object.ts (61%) create mode 100644 x-pack/plugins/security_solution/common/detection_engine/rule_management/utils.ts create mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff_tab.tsx delete mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/use_rule_details_flyout.tsx create mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state.ts create mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/use_rule_preview_flyout.tsx delete mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_building_block_object.ts diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/convert_rule_to_diffable.ts b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/convert_rule_to_diffable.ts similarity index 92% rename from x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/convert_rule_to_diffable.ts rename to x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/convert_rule_to_diffable.ts index b0c1cc40462fb..f19d8b41be40b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/convert_rule_to_diffable.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/convert_rule_to_diffable.ts @@ -7,8 +7,8 @@ import type { RequiredOptional } from '@kbn/zod-helpers'; import { requiredOptional } from '@kbn/zod-helpers'; -import { DEFAULT_MAX_SIGNALS } from '../../../../../../../common/constants'; -import { assertUnreachable } from '../../../../../../../common/utility_types'; +import { DEFAULT_MAX_SIGNALS } from '../../../constants'; +import { assertUnreachable } from '../../../utility_types'; import type { EqlRule, EqlRuleCreateProps, @@ -27,8 +27,7 @@ import type { ThreatMatchRuleCreateProps, ThresholdRule, ThresholdRuleCreateProps, -} from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import type { PrebuiltRuleAsset } from '../../../model/rule_assets/prebuilt_rule_asset'; +} from '../../../api/detection_engine/model/rule_schema'; import type { DiffableCommonFields, DiffableCustomQueryFields, @@ -40,7 +39,8 @@ import type { DiffableSavedQueryFields, DiffableThreatMatchFields, DiffableThresholdFields, -} from '../../../../../../../common/api/detection_engine/prebuilt_rules'; +} from '../../../api/detection_engine/prebuilt_rules'; +import { addEcsToRequiredFields } from '../../rule_management/utils'; import { extractBuildingBlockObject } from './extract_building_block_object'; import { extractInlineKqlQuery, @@ -53,13 +53,12 @@ import { extractRuleNameOverrideObject } from './extract_rule_name_override_obje import { extractRuleSchedule } from './extract_rule_schedule'; import { extractTimelineTemplateReference } from './extract_timeline_template_reference'; import { extractTimestampOverrideObject } from './extract_timestamp_override_object'; -import { addEcsToRequiredFields } from '../../../../rule_management/utils/utils'; /** * Normalizes a given rule to the form which is suitable for passing to the diff algorithm. * Read more in the JSDoc description of DiffableRule. */ -export const convertRuleToDiffable = (rule: RuleResponse | PrebuiltRuleAsset): DiffableRule => { +export const convertRuleToDiffable = (rule: RuleResponse): DiffableRule => { const commonFields = extractDiffableCommonFields(rule); switch (rule.type) { @@ -109,7 +108,7 @@ export const convertRuleToDiffable = (rule: RuleResponse | PrebuiltRuleAsset): D }; const extractDiffableCommonFields = ( - rule: RuleResponse | PrebuiltRuleAsset + rule: RuleResponse ): RequiredOptional => { return { // --------------------- REQUIRED FIELDS diff --git a/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_building_block_object.ts b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_building_block_object.ts new file mode 100644 index 0000000000000..18d6ebfb54ce4 --- /dev/null +++ b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_building_block_object.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RuleResponse } from '../../../api/detection_engine/model/rule_schema'; +import type { BuildingBlockObject } from '../../../api/detection_engine/prebuilt_rules'; + +export const extractBuildingBlockObject = (rule: RuleResponse): BuildingBlockObject | undefined => { + if (rule.building_block_type == null) { + return undefined; + } + return { + type: rule.building_block_type, + }; +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_data_query.ts b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_data_query.ts similarity index 86% rename from x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_data_query.ts rename to x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_data_query.ts index 21d3d379f0c77..4f4164c6a0086 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_data_query.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_data_query.ts @@ -11,14 +11,14 @@ import type { KqlQueryLanguage, RuleFilterArray, RuleQuery, -} from '../../../../../../../common/api/detection_engine/model/rule_schema'; +} from '../../../api/detection_engine/model/rule_schema'; import type { InlineKqlQuery, RuleEqlQuery, RuleEsqlQuery, RuleKqlQuery, -} from '../../../../../../../common/api/detection_engine/prebuilt_rules'; -import { KqlQueryType } from '../../../../../../../common/api/detection_engine/prebuilt_rules'; +} from '../../../api/detection_engine/prebuilt_rules'; +import { KqlQueryType } from '../../../api/detection_engine/prebuilt_rules'; export const extractRuleKqlQuery = ( query: RuleQuery | undefined, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_data_source.ts b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_data_source.ts similarity index 72% rename from x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_data_source.ts rename to x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_data_source.ts index 5ab1562869d26..08407770339e3 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_data_source.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_data_source.ts @@ -8,9 +8,9 @@ import type { DataViewId, IndexPatternArray, -} from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import type { RuleDataSource } from '../../../../../../../common/api/detection_engine/prebuilt_rules'; -import { DataSourceType } from '../../../../../../../common/api/detection_engine/prebuilt_rules'; +} from '../../../api/detection_engine/model/rule_schema'; +import type { RuleDataSource } from '../../../api/detection_engine/prebuilt_rules'; +import { DataSourceType } from '../../../api/detection_engine/prebuilt_rules'; export const extractRuleDataSource = ( indexPatterns: IndexPatternArray | undefined, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_name_override_object.ts b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_name_override_object.ts similarity index 57% rename from x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_name_override_object.ts rename to x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_name_override_object.ts index ab7e7fd3c4716..55119608264f9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_name_override_object.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_name_override_object.ts @@ -5,12 +5,11 @@ * 2.0. */ -import type { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import type { RuleNameOverrideObject } from '../../../../../../../common/api/detection_engine/prebuilt_rules'; -import type { PrebuiltRuleAsset } from '../../../model/rule_assets/prebuilt_rule_asset'; +import type { RuleResponse } from '../../../api/detection_engine/model/rule_schema'; +import type { RuleNameOverrideObject } from '../../../api/detection_engine/prebuilt_rules'; export const extractRuleNameOverrideObject = ( - rule: RuleResponse | PrebuiltRuleAsset + rule: RuleResponse ): RuleNameOverrideObject | undefined => { if (rule.rule_name_override == null) { return undefined; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_schedule.ts b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_schedule.ts similarity index 85% rename from x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_schedule.ts rename to x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_schedule.ts index a15a4fcb930cd..6812a0a2f6fc6 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_rule_schedule.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_rule_schedule.ts @@ -9,14 +9,10 @@ import moment from 'moment'; import dateMath from '@elastic/datemath'; import { parseDuration } from '@kbn/alerting-plugin/common'; -import type { - RuleMetadata, - RuleResponse, -} from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import type { RuleSchedule } from '../../../../../../../common/api/detection_engine/prebuilt_rules'; -import type { PrebuiltRuleAsset } from '../../../model/rule_assets/prebuilt_rule_asset'; +import type { RuleMetadata, RuleResponse } from '../../../api/detection_engine/model/rule_schema'; +import type { RuleSchedule } from '../../../api/detection_engine/prebuilt_rules'; -export const extractRuleSchedule = (rule: RuleResponse | PrebuiltRuleAsset): RuleSchedule => { +export const extractRuleSchedule = (rule: RuleResponse): RuleSchedule => { const interval = rule.interval ?? '5m'; const from = rule.from ?? 'now-6m'; const to = rule.to ?? 'now'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_timeline_template_reference.ts b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_timeline_template_reference.ts similarity index 59% rename from x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_timeline_template_reference.ts rename to x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_timeline_template_reference.ts index 03244e5bb0adf..7dcce30061659 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_timeline_template_reference.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_timeline_template_reference.ts @@ -5,12 +5,11 @@ * 2.0. */ -import type { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import type { TimelineTemplateReference } from '../../../../../../../common/api/detection_engine/prebuilt_rules'; -import type { PrebuiltRuleAsset } from '../../../model/rule_assets/prebuilt_rule_asset'; +import type { RuleResponse } from '../../../api/detection_engine/model/rule_schema'; +import type { TimelineTemplateReference } from '../../../api/detection_engine/prebuilt_rules'; export const extractTimelineTemplateReference = ( - rule: RuleResponse | PrebuiltRuleAsset + rule: RuleResponse ): TimelineTemplateReference | undefined => { if (rule.timeline_id == null) { return undefined; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_timestamp_override_object.ts b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_timestamp_override_object.ts similarity index 61% rename from x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_timestamp_override_object.ts rename to x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_timestamp_override_object.ts index 5b67e4c46bfaf..40f218fe430b7 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_timestamp_override_object.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules/diff/extract_timestamp_override_object.ts @@ -5,12 +5,11 @@ * 2.0. */ -import type { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import type { TimestampOverrideObject } from '../../../../../../../common/api/detection_engine/prebuilt_rules'; -import type { PrebuiltRuleAsset } from '../../../model/rule_assets/prebuilt_rule_asset'; +import type { RuleResponse } from '../../../api/detection_engine/model/rule_schema'; +import type { TimestampOverrideObject } from '../../../api/detection_engine/prebuilt_rules'; export const extractTimestampOverrideObject = ( - rule: RuleResponse | PrebuiltRuleAsset + rule: RuleResponse ): TimestampOverrideObject | undefined => { if (rule.timestamp_override == null) { return undefined; diff --git a/x-pack/plugins/security_solution/common/detection_engine/rule_management/utils.ts b/x-pack/plugins/security_solution/common/detection_engine/rule_management/utils.ts new file mode 100644 index 0000000000000..c8e32c471c2c5 --- /dev/null +++ b/x-pack/plugins/security_solution/common/detection_engine/rule_management/utils.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ecsFieldMap } from '@kbn/alerts-as-data-utils'; +import type { RequiredField, RequiredFieldInput } from '../../api/detection_engine'; + +/* + Computes the boolean "ecs" property value for each required field based on the ECS field map. + "ecs" property indicates whether the required field is an ECS field or not. +*/ +export const addEcsToRequiredFields = (requiredFields?: RequiredFieldInput[]): RequiredField[] => + (requiredFields ?? []).map((requiredFieldWithoutEcs) => { + const isEcsField = Boolean( + ecsFieldMap[requiredFieldWithoutEcs.name]?.type === requiredFieldWithoutEcs.type + ); + + return { + ...requiredFieldWithoutEcs, + ecs: isEcsField, + }; + }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff_tab.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff_tab.tsx new file mode 100644 index 0000000000000..5117fa2d7b93b --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff_tab.tsx @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { DiffableRule } from '../../../../../common/api/detection_engine'; +import type { SetFieldResolvedValueFn } from '../../../rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state'; + +interface ThreeWayDiffTabProps { + finalDiffableRule: DiffableRule; + setFieldResolvedValue: SetFieldResolvedValueFn; +} + +export function ThreeWayDiffTab({ + finalDiffableRule, + setFieldResolvedValue, +}: ThreeWayDiffTabProps): JSX.Element { + return <>{JSON.stringify(finalDiffableRule)}; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/translations.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/translations.ts index 89c22a285e327..f0b96bad1aff5 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/translations.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/translations.ts @@ -28,6 +28,13 @@ export const UPDATES_TAB_LABEL = i18n.translate( } ); +export const DIFF_TAB_LABEL = i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleDetails.diffTabLabel', + { + defaultMessage: 'Diff', + } +); + export const JSON_VIEW_UPDATES_TAB_LABEL = i18n.translate( 'xpack.securitySolution.detectionEngine.ruleDetails.jsonViewUpdatesTabLabel', { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/use_rule_details_flyout.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/use_rule_details_flyout.tsx deleted file mode 100644 index ccce517db5b55..0000000000000 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/use_rule_details_flyout.tsx +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback } from 'react'; -import { invariant } from '../../../../../common/utils/invariant'; -import type { RuleObjectId } from '../../../../../common/api/detection_engine'; -import type { RuleResponse } from '../../../../../common/api/detection_engine/model/rule_schema'; - -export interface RuleDetailsFlyoutState { - previewedRule: RuleResponse | null; -} - -export interface RuleDetailsFlyoutActions { - openRulePreview: (ruleId: RuleObjectId) => void; - closeRulePreview: () => void; -} - -export const useRuleDetailsFlyout = ( - rules: RuleResponse[] -): RuleDetailsFlyoutState & RuleDetailsFlyoutActions => { - const [previewedRule, setRuleForPreview] = React.useState(null); - - const openRulePreview = useCallback( - (ruleId: RuleObjectId) => { - const ruleToShowInFlyout = rules.find((rule) => { - return rule.id === ruleId; - }); - invariant(ruleToShowInFlyout, `Rule with id ${ruleId} not found`); - setRuleForPreview(ruleToShowInFlyout); - }, - [rules, setRuleForPreview] - ); - - const closeRulePreview = useCallback(() => { - setRuleForPreview(null); - }, []); - - return { - openRulePreview, - closeRulePreview, - previewedRule, - }; -}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_header_buttons.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_header_buttons.tsx index dbf9cf298e7ff..b943022f5d53d 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_header_buttons.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_header_buttons.tsx @@ -13,13 +13,18 @@ import * as i18n from './translations'; export const AddPrebuiltRulesHeaderButtons = () => { const { - state: { rules, selectedRules, loadingRules, isRefetching, isUpgradingSecurityPackages }, + state: { + selectedRules, + loadingRules, + isRefetching, + isUpgradingSecurityPackages, + hasRulesToInstall, + }, actions: { installAllRules, installSelectedRules }, } = useAddPrebuiltRulesTableContext(); const [{ loading: isUserDataLoading, canUserCRUD }] = useUserData(); const canUserEditRules = canUserCRUD && !isUserDataLoading; - const isRulesAvailableForInstall = rules.length > 0; const numberOfSelectedRules = selectedRules.length ?? 0; const shouldDisplayInstallSelectedRulesButton = numberOfSelectedRules > 0; @@ -46,7 +51,7 @@ export const AddPrebuiltRulesHeaderButtons = () => { iconType="plusInCircle" data-test-subj="installAllRulesButton" onClick={installAllRules} - disabled={!canUserEditRules || !isRulesAvailableForInstall || isRequestInProgress} + disabled={!canUserEditRules || !hasRulesToInstall || isRequestInProgress} aria-label={i18n.INSTALL_ALL_ARIA_LABEL} > {i18n.INSTALL_ALL} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table.tsx index 22794ab525dca..86fe6e4f3ede8 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table.tsx @@ -32,8 +32,7 @@ export const AddPrebuiltRulesTable = React.memo(() => { const { state: { rules, - filteredRules, - isFetched, + hasRulesToInstall, isLoading, isRefetching, selectedRules, @@ -43,8 +42,6 @@ export const AddPrebuiltRulesTable = React.memo(() => { } = addRulesTableContext; const rulesColumns = useAddPrebuiltRulesTableColumns(); - const isTableEmpty = isFetched && rules.length === 0; - const shouldShowProgress = isUpgradingSecurityPackages || isRefetching; return ( @@ -66,7 +63,7 @@ export const AddPrebuiltRulesTable = React.memo(() => { } loadedContent={ - isTableEmpty ? ( + !hasRulesToInstall ? ( ) : ( <> @@ -80,7 +77,7 @@ export const AddPrebuiltRulesTable = React.memo(() => { { @@ -138,15 +139,6 @@ export const AddPrebuiltRulesTableContextProvider = ({ const filteredRules = useFilterPrebuiltRulesToInstall({ filterOptions, rules }); - const { openRulePreview, closeRulePreview, previewedRule } = useRuleDetailsFlyout(filteredRules); - - const isPreviewRuleLoading = - previewedRule?.rule_id && loadingRules.includes(previewedRule.rule_id); - const canPreviewedRuleBeInstalled = - !userInfoLoading && - canUserCRUD && - !(isPreviewRuleLoading || isRefetching || isUpgradingSecurityPackages); - const installOneRule = useCallback( async (ruleId: RuleSignatureId) => { const rule = rules.find((r) => r.rule_id === ruleId); @@ -187,6 +179,47 @@ export const AddPrebuiltRulesTableContextProvider = ({ } }, [installAllRulesRequest, rules]); + const ruleActionsFactory = useCallback( + (rule: RuleResponse, closeRulePreview: () => void) => { + const isPreviewRuleLoading = loadingRules.includes(rule.rule_id); + const canPreviewedRuleBeInstalled = + !userInfoLoading && + canUserCRUD && + !(isPreviewRuleLoading || isRefetching || isUpgradingSecurityPackages); + + return ( + { + installOneRule(rule.rule_id); + closeRulePreview(); + }} + fill + data-test-subj="installPrebuiltRuleFromFlyoutButton" + > + {i18n.INSTALL_BUTTON_LABEL} + + ); + }, + [ + loadingRules, + userInfoLoading, + canUserCRUD, + isRefetching, + isUpgradingSecurityPackages, + installOneRule, + ] + ); + + const { rulePreviewFlyout, openRulePreview } = useRulePreviewFlyout({ + rules: filteredRules, + ruleActionsFactory, + flyoutProps: { + id: PREBUILT_RULE_INSTALL_FLYOUT_ANCHOR, + dataTestSubj: PREBUILT_RULE_INSTALL_FLYOUT_ANCHOR, + }, + }); + const actions = useMemo( () => ({ setFilterOptions, @@ -203,10 +236,10 @@ export const AddPrebuiltRulesTableContextProvider = ({ const providerValue = useMemo(() => { return { state: { - rules, - filteredRules, + rules: filteredRules, filterOptions, tags, + hasRulesToInstall: isFetched && rules.length > 0, isFetched, isLoading, loadingRules, @@ -236,26 +269,7 @@ export const AddPrebuiltRulesTableContextProvider = ({ <> {children} - {previewedRule && ( - { - installOneRule(previewedRule.rule_id ?? ''); - closeRulePreview(); - }} - fill - data-test-subj="installPrebuiltRuleFromFlyoutButton" - > - {i18n.INSTALL_BUTTON_LABEL} - - } - /> - )} + {rulePreviewFlyout} ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table.tsx index 09b231403b10a..16ba012313f34 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table.tsx @@ -15,7 +15,7 @@ import { EuiSkeletonText, EuiSkeletonTitle, } from '@elastic/eui'; -import React from 'react'; +import React, { useMemo, useState } from 'react'; import * as i18n from '../../../../../detections/pages/detection_engine/rules/translations'; import { RULES_TABLE_INITIAL_PAGE_SIZE, RULES_TABLE_PAGE_SIZE_OPTIONS } from '../constants'; import { RulesChangelogLink } from '../rules_changelog_link'; @@ -23,6 +23,7 @@ import { UpgradePrebuiltRulesTableButtons } from './upgrade_prebuilt_rules_table import { useUpgradePrebuiltRulesTableContext } from './upgrade_prebuilt_rules_table_context'; import { UpgradePrebuiltRulesTableFilters } from './upgrade_prebuilt_rules_table_filters'; import { useUpgradePrebuiltRulesTableColumns } from './use_upgrade_prebuilt_rules_table_columns'; +import type { RuleUpgradeState } from './use_prebuilt_rules_upgrade_state'; const NO_ITEMS_MESSAGE = ( { const upgradeRulesTableContext = useUpgradePrebuiltRulesTableContext(); + const [selected, setSelected] = useState([]); const { state: { - rules, - filteredRules, - isFetched, + rulesUpgradeState, + hasRulesToUpgrade, isLoading, - selectedRules, isRefetching, isUpgradingSecurityPackages, }, - actions: { selectRules }, } = upgradeRulesTableContext; + const ruleUpgradeStatesArray = useMemo( + () => Object.values(rulesUpgradeState), + [rulesUpgradeState] + ); const rulesColumns = useUpgradePrebuiltRulesTableColumns(); - - const isTableEmpty = isFetched && rules.length === 0; - const shouldShowProgress = isUpgradingSecurityPackages || isRefetching; return ( @@ -76,7 +76,7 @@ export const UpgradePrebuiltRulesTable = React.memo(() => { } loadedContent={ - isTableEmpty ? ( + !hasRulesToUpgrade ? ( NO_ITEMS_MESSAGE ) : ( <> @@ -95,14 +95,14 @@ export const UpgradePrebuiltRulesTable = React.memo(() => { - + { }} selection={{ selectable: () => true, - onSelectionChange: selectRules, - initialSelected: selectedRules, + onSelectionChange: setSelected, + initialSelected: selected, }} itemId="rule_id" data-test-subj="rules-upgrades-table" diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_buttons.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_buttons.tsx index 6d4e0641b8bbc..9957520811f79 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_buttons.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_buttons.tsx @@ -6,25 +6,35 @@ */ import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; -import React from 'react'; +import React, { useCallback } from 'react'; import { useUserData } from '../../../../../detections/components/user_info'; import * as i18n from './translations'; import { useUpgradePrebuiltRulesTableContext } from './upgrade_prebuilt_rules_table_context'; +import type { RuleUpgradeState } from './use_prebuilt_rules_upgrade_state'; -export const UpgradePrebuiltRulesTableButtons = () => { +interface UpgradePrebuiltRulesTableButtonsProps { + selectedRules: RuleUpgradeState[]; +} + +export const UpgradePrebuiltRulesTableButtons = ({ + selectedRules, +}: UpgradePrebuiltRulesTableButtonsProps) => { const { - state: { rules, selectedRules, loadingRules, isRefetching, isUpgradingSecurityPackages }, - actions: { upgradeAllRules, upgradeSelectedRules }, + state: { hasRulesToUpgrade, loadingRules, isRefetching, isUpgradingSecurityPackages }, + actions: { upgradeAllRules, upgradeRules }, } = useUpgradePrebuiltRulesTableContext(); const [{ loading: isUserDataLoading, canUserCRUD }] = useUserData(); const canUserEditRules = canUserCRUD && !isUserDataLoading; - const isRulesAvailableForUpgrade = rules.length > 0; const numberOfSelectedRules = selectedRules.length ?? 0; const shouldDisplayUpgradeSelectedRulesButton = numberOfSelectedRules > 0; const isRuleUpgrading = loadingRules.length > 0; const isRequestInProgress = isRuleUpgrading || isRefetching || isUpgradingSecurityPackages; + const upgradeSelectedRules = useCallback( + () => upgradeRules(selectedRules.map((rule) => rule.rule_id)), + [selectedRules, upgradeRules] + ); return ( @@ -47,7 +57,7 @@ export const UpgradePrebuiltRulesTableButtons = () => { fill iconType="plusInCircle" onClick={upgradeAllRules} - disabled={!canUserEditRules || !isRulesAvailableForUpgrade || isRequestInProgress} + disabled={!canUserEditRules || !hasRulesToUpgrade || isRequestInProgress} data-test-subj="upgradeAllRulesButton" > {i18n.UPDATE_ALL} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_context.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_context.tsx index 9d1a3071b44e1..4fee1cf8f3560 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_context.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_context.tsx @@ -8,14 +8,17 @@ import type { Dispatch, SetStateAction } from 'react'; import React, { createContext, useCallback, useContext, useMemo, useState } from 'react'; import { EuiButton, EuiToolTip } from '@elastic/eui'; -import type { EuiTabbedContentTab } from '@elastic/eui'; +import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; +import { ThreeWayDiffTab } from '../../../../rule_management/components/rule_details/three_way_diff_tab'; import { PerFieldRuleDiffTab } from '../../../../rule_management/components/rule_details/per_field_rule_diff_tab'; import { useIsUpgradingSecurityPackages } from '../../../../rule_management/logic/use_upgrade_security_packages'; import { useInstalledSecurityJobs } from '../../../../../common/components/ml/hooks/use_installed_security_jobs'; import { useBoolState } from '../../../../../common/hooks/use_bool_state'; import { affectedJobIds } from '../../../../../detections/components/callouts/ml_job_compatibility_callout/affected_job_ids'; -import type { RuleUpgradeInfoForReview } from '../../../../../../common/api/detection_engine/prebuilt_rules'; -import type { RuleSignatureId } from '../../../../../../common/api/detection_engine/model/rule_schema'; +import type { + RuleResponse, + RuleSignatureId, +} from '../../../../../../common/api/detection_engine/model/rule_schema'; import { invariant } from '../../../../../../common/utils/invariant'; import { usePerformUpgradeAllRules, @@ -25,25 +28,20 @@ import { usePrebuiltRulesUpgradeReview } from '../../../../rule_management/logic import type { UpgradePrebuiltRulesTableFilterOptions } from './use_filter_prebuilt_rules_to_upgrade'; import { useFilterPrebuiltRulesToUpgrade } from './use_filter_prebuilt_rules_to_upgrade'; import { useAsyncConfirmation } from '../rules_table/use_async_confirmation'; -import { useRuleDetailsFlyout } from '../../../../rule_management/components/rule_details/use_rule_details_flyout'; -import { - RuleDetailsFlyout, - TabContentPadding, -} from '../../../../rule_management/components/rule_details/rule_details_flyout'; +import { TabContentPadding } from '../../../../rule_management/components/rule_details/rule_details_flyout'; import { RuleDiffTab } from '../../../../rule_management/components/rule_details/rule_diff_tab'; import { MlJobUpgradeModal } from '../../../../../detections/components/modals/ml_job_upgrade_modal'; import * as ruleDetailsI18n from '../../../../rule_management/components/rule_details/translations'; import * as i18n from './translations'; +import type { RulesUpgradeState } from './use_prebuilt_rules_upgrade_state'; +import { usePrebuiltRulesUpgradeState } from './use_prebuilt_rules_upgrade_state'; +import { useRulePreviewFlyout } from '../use_rule_preview_flyout'; export interface UpgradePrebuiltRulesTableState { /** - * Rules available to be updated - */ - rules: RuleUpgradeInfoForReview[]; - /** - * Rules to display in table after applying filters + * Rule upgrade state after applying `filterOptions` */ - filteredRules: RuleUpgradeInfoForReview[]; + rulesUpgradeState: RulesUpgradeState; /** * Currently selected table filter */ @@ -52,6 +50,10 @@ export interface UpgradePrebuiltRulesTableState { * All unique tags for all rules */ tags: string[]; + /** + * Indicates whether there are rules (without filters applied) to upgrade. + */ + hasRulesToUpgrade: boolean; /** * Is true then there is no cached data and the query is currently fetching. */ @@ -78,21 +80,15 @@ export interface UpgradePrebuiltRulesTableState { * The timestamp for when the rules were successfully fetched */ lastUpdated: number; - /** - * Rule rows selected in EUI InMemory Table - */ - selectedRules: RuleUpgradeInfoForReview[]; } export const PREBUILT_RULE_UPDATE_FLYOUT_ANCHOR = 'updatePrebuiltRulePreview'; export interface UpgradePrebuiltRulesTableActions { reFetchRules: () => void; - upgradeOneRule: (ruleId: string) => void; - upgradeSelectedRules: () => void; + upgradeRules: (ruleIds: RuleSignatureId[]) => void; upgradeAllRules: () => void; setFilterOptions: Dispatch>; - selectRules: (rules: RuleUpgradeInfoForReview[]) => void; openRulePreview: (ruleId: string) => void; } @@ -112,8 +108,10 @@ interface UpgradePrebuiltRulesTableContextProviderProps { export const UpgradePrebuiltRulesTableContextProvider = ({ children, }: UpgradePrebuiltRulesTableContextProviderProps) => { + const isPrebuiltRulesCustomizationEnabled = useIsExperimentalFeatureEnabled( + 'prebuiltRulesCustomizationEnabled' + ); const [loadingRules, setLoadingRules] = useState([]); - const [selectedRules, setSelectedRules] = useState([]); const [filterOptions, setFilterOptions] = useState({ filter: '', tags: [], @@ -122,7 +120,7 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ const isUpgradingSecurityPackages = useIsUpgradingSecurityPackages(); const { - data: { rules, stats: { tags } } = { + data: { rules: ruleUpgradeInfos, stats: { tags } } = { rules: [], stats: { tags: [] }, }, @@ -135,20 +133,12 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ refetchInterval: false, // Disable automatic refetching since request is expensive keepPreviousData: true, // Use this option so that the state doesn't jump between "success" and "loading" on page change }); - - const { mutateAsync: upgradeAllRulesRequest } = usePerformUpgradeAllRules(); - const { mutateAsync: upgradeSpecificRulesRequest } = usePerformUpgradeSpecificRules(); - - const filteredRules = useFilterPrebuiltRulesToUpgrade({ filterOptions, rules }); - - const { openRulePreview, closeRulePreview, previewedRule } = useRuleDetailsFlyout( - filteredRules.map((upgradeInfo) => upgradeInfo.target_rule) - ); - const canPreviewedRuleBeUpgraded = Boolean( - (previewedRule?.rule_id && loadingRules.includes(previewedRule.rule_id)) || - isRefetching || - isUpgradingSecurityPackages - ); + const filteredRuleUpgradeInfos = useFilterPrebuiltRulesToUpgrade({ + filterOptions, + rules: ruleUpgradeInfos, + }); + const { rulesUpgradeState, setFieldResolvedValue } = + usePrebuiltRulesUpgradeState(filteredRuleUpgradeInfos); // Wrapper to add confirmation modal for users who may be running older ML Jobs that would // be overridden by updating their rules. For details, see: https://github.com/elastic/kibana/issues/128121 @@ -163,51 +153,36 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ const shouldConfirmUpgrade = legacyJobsInstalled.length > 0; - const upgradeOneRule = useCallback( - async (ruleId: RuleSignatureId) => { - const rule = rules.find((r) => r.rule_id === ruleId); - invariant(rule, `Rule with id ${ruleId} not found`); + const { mutateAsync: upgradeAllRulesRequest } = usePerformUpgradeAllRules(); + const { mutateAsync: upgradeSpecificRulesRequest } = usePerformUpgradeSpecificRules(); - setLoadingRules((prev) => [...prev, ruleId]); + const upgradeRules = useCallback( + async (ruleIds: RuleSignatureId[]) => { + const rulesToUpgrade = ruleIds.map((ruleId) => ({ + rule_id: ruleId, + version: + rulesUpgradeState[ruleId].diff.fields.version?.target_version ?? + rulesUpgradeState[ruleId].current_rule.version, + revision: rulesUpgradeState[ruleId].revision, + })); + setLoadingRules((prev) => [...prev, ...rulesToUpgrade.map((r) => r.rule_id)]); try { if (shouldConfirmUpgrade && !(await confirmUpgrade())) { return; } - await upgradeSpecificRulesRequest([ - { - rule_id: ruleId, - version: rule.diff.fields.version?.target_version ?? rule.current_rule.version, - revision: rule.revision, - }, - ]); + await upgradeSpecificRulesRequest(rulesToUpgrade); } finally { - setLoadingRules((prev) => prev.filter((id) => id !== ruleId)); + setLoadingRules((prev) => + prev.filter((id) => !rulesToUpgrade.some((r) => r.rule_id === id)) + ); } }, - [confirmUpgrade, rules, shouldConfirmUpgrade, upgradeSpecificRulesRequest] + [confirmUpgrade, shouldConfirmUpgrade, rulesUpgradeState, upgradeSpecificRulesRequest] ); - const upgradeSelectedRules = useCallback(async () => { - const rulesToUpgrade = selectedRules.map((rule) => ({ - rule_id: rule.rule_id, - version: rule.diff.fields.version?.target_version ?? rule.current_rule.version, - revision: rule.revision, - })); - setLoadingRules((prev) => [...prev, ...rulesToUpgrade.map((r) => r.rule_id)]); - try { - if (shouldConfirmUpgrade && !(await confirmUpgrade())) { - return; - } - await upgradeSpecificRulesRequest(rulesToUpgrade); - } finally { - setLoadingRules((prev) => prev.filter((id) => !rulesToUpgrade.some((r) => r.rule_id === id))); - setSelectedRules([]); - } - }, [confirmUpgrade, selectedRules, shouldConfirmUpgrade, upgradeSpecificRulesRequest]); - const upgradeAllRules = useCallback(async () => { // Unselect all rules so that the table doesn't show the "bulk actions" bar - setLoadingRules((prev) => [...prev, ...rules.map((r) => r.rule_id)]); + setLoadingRules((prev) => [...prev, ...ruleUpgradeInfos.map((r) => r.rule_id)]); try { if (shouldConfirmUpgrade && !(await confirmUpgrade())) { return; @@ -215,43 +190,137 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ await upgradeAllRulesRequest(); } finally { setLoadingRules([]); - setSelectedRules([]); } - }, [confirmUpgrade, rules, shouldConfirmUpgrade, upgradeAllRulesRequest]); + }, [confirmUpgrade, ruleUpgradeInfos, shouldConfirmUpgrade, upgradeAllRulesRequest]); + + const ruleActionsFactory = useCallback( + (rule: RuleResponse, closeRulePreview: () => void) => ( + { + upgradeRules([rule.rule_id]); + closeRulePreview(); + }} + fill + data-test-subj="updatePrebuiltRuleFromFlyoutButton" + > + {i18n.UPDATE_BUTTON_LABEL} + + ), + [rulesUpgradeState, loadingRules, isRefetching, isUpgradingSecurityPackages, upgradeRules] + ); + const extraTabsFactory = useCallback( + (rule: RuleResponse) => { + const ruleUpgradeState = rulesUpgradeState[rule.rule_id]; + + if (!ruleUpgradeState) { + return []; + } + + const extraTabs = [ + { + id: 'updates', + name: ( + + <>{ruleDetailsI18n.UPDATES_TAB_LABEL} + + ), + content: ( + + + + ), + }, + { + id: 'jsonViewUpdates', + name: ( + + <>{ruleDetailsI18n.JSON_VIEW_UPDATES_TAB_LABEL} + + ), + content: ( + + + + ), + }, + ]; + + if (isPrebuiltRulesCustomizationEnabled) { + extraTabs.unshift({ + id: 'diff', + name: ( + + <>{ruleDetailsI18n.DIFF_TAB_LABEL} + + ), + content: ( + + + + ), + }); + } + + return extraTabs; + }, + [rulesUpgradeState, setFieldResolvedValue, isPrebuiltRulesCustomizationEnabled] + ); + const filteredRules = useMemo( + () => filteredRuleUpgradeInfos.map((rule) => rule.target_rule), + [filteredRuleUpgradeInfos] + ); + const { rulePreviewFlyout, openRulePreview } = useRulePreviewFlyout({ + rules: filteredRules, + ruleActionsFactory, + extraTabsFactory, + flyoutProps: { + id: PREBUILT_RULE_UPDATE_FLYOUT_ANCHOR, + dataTestSubj: PREBUILT_RULE_UPDATE_FLYOUT_ANCHOR, + }, + }); const actions = useMemo( () => ({ reFetchRules: refetch, - upgradeOneRule, - upgradeSelectedRules, + upgradeRules, upgradeAllRules, setFilterOptions, - selectRules: setSelectedRules, openRulePreview, }), - [refetch, upgradeOneRule, upgradeSelectedRules, upgradeAllRules, openRulePreview] + [refetch, upgradeRules, upgradeAllRules, openRulePreview] ); const providerValue = useMemo(() => { return { state: { - rules, - filteredRules, + rulesUpgradeState, + hasRulesToUpgrade: isFetched && ruleUpgradeInfos.length > 0, filterOptions, tags, isFetched, - isLoading: isLoading && loadingJobs, + isLoading: isLoading || loadingJobs, isRefetching, isUpgradingSecurityPackages, - selectedRules, loadingRules, lastUpdated: dataUpdatedAt, }, actions, }; }, [ - rules, - filteredRules, + ruleUpgradeInfos, + rulesUpgradeState, filterOptions, tags, isFetched, @@ -259,49 +328,11 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ loadingJobs, isRefetching, isUpgradingSecurityPackages, - selectedRules, loadingRules, dataUpdatedAt, actions, ]); - const extraTabs = useMemo(() => { - const activeRule = previewedRule && filteredRules.find(({ id }) => id === previewedRule.id); - - if (!activeRule) { - return []; - } - - return [ - { - id: 'updates', - name: ( - - <>{ruleDetailsI18n.UPDATES_TAB_LABEL} - - ), - content: ( - - - - ), - }, - { - id: 'jsonViewUpdates', - name: ( - - <>{ruleDetailsI18n.JSON_VIEW_UPDATES_TAB_LABEL} - - ), - content: ( - - - - ), - }, - ]; - }, [previewedRule, filteredRules]); - return ( <> @@ -313,29 +344,7 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ /> )} {children} - {previewedRule && ( - { - upgradeOneRule(previewedRule.rule_id ?? ''); - closeRulePreview(); - }} - fill - data-test-subj="updatePrebuiltRuleFromFlyoutButton" - > - {i18n.UPDATE_BUTTON_LABEL} - - } - extraTabs={extraTabs} - /> - )} + {rulePreviewFlyout} ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state.ts new file mode 100644 index 0000000000000..86f2293d312fa --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state.ts @@ -0,0 +1,130 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback, useMemo, useState } from 'react'; +import type { FieldsDiff } from '../../../../../../common/api/detection_engine'; +import { + ThreeWayDiffConflict, + type DiffableAllFields, + type DiffableRule, + type RuleObjectId, + type RuleSignatureId, + type RuleUpgradeInfoForReview, +} from '../../../../../../common/api/detection_engine'; +import { convertRuleToDiffable } from '../../../../../../common/detection_engine/prebuilt_rules/diff/convert_rule_to_diffable'; + +export interface RuleUpgradeState extends RuleUpgradeInfoForReview { + /** + * Rule containing desired values users expect to see in the upgraded rule. + */ + finalRule: DiffableRule; + /** + * Indicates whether there are conflicts blocking rule upgrading. + */ + hasUnresolvedConflicts: boolean; +} +export type RulesUpgradeState = Record; +export type SetFieldResolvedValueFn< + FieldName extends keyof DiffableAllFields = keyof DiffableAllFields +> = (params: { + ruleId: RuleObjectId; + fieldName: FieldName; + resolvedValue: DiffableAllFields[FieldName]; +}) => void; + +type RuleResolvedConflicts = Partial; +type RulesResolvedConflicts = Record; + +interface UseRulesUpgradeStateResult { + rulesUpgradeState: RulesUpgradeState; + setFieldResolvedValue: SetFieldResolvedValueFn; +} + +export function usePrebuiltRulesUpgradeState( + ruleUpgradeInfos: RuleUpgradeInfoForReview[] +): UseRulesUpgradeStateResult { + const [rulesResolvedConflicts, setRulesResolvedConflicts] = useState({}); + const setFieldResolvedValue = useCallback((...[params]: Parameters) => { + setRulesResolvedConflicts((prevRulesResolvedConflicts) => ({ + ...prevRulesResolvedConflicts, + [params.ruleId]: { + ...(prevRulesResolvedConflicts[params.ruleId] ?? {}), + [params.fieldName]: params.resolvedValue, + }, + })); + }, []); + const rulesUpgradeState = useMemo(() => { + const state: RulesUpgradeState = {}; + + for (const ruleUpgradeInfo of ruleUpgradeInfos) { + state[ruleUpgradeInfo.rule_id] = { + ...ruleUpgradeInfo, + finalRule: calcFinalDiffableRule( + ruleUpgradeInfo, + rulesResolvedConflicts[ruleUpgradeInfo.rule_id] ?? {} + ), + hasUnresolvedConflicts: + getUnacceptedConflictsCount( + ruleUpgradeInfo.diff.fields, + rulesResolvedConflicts[ruleUpgradeInfo.rule_id] ?? {} + ) > 0, + }; + } + + return state; + }, [ruleUpgradeInfos, rulesResolvedConflicts]); + + return { + rulesUpgradeState, + setFieldResolvedValue, + }; +} + +function calcFinalDiffableRule( + ruleUpgradeInfo: RuleUpgradeInfoForReview, + ruleResolvedConflicts: RuleResolvedConflicts +): DiffableRule { + return { + ...convertRuleToDiffable(ruleUpgradeInfo.target_rule), + ...convertRuleFieldsDiffToDiffable(ruleUpgradeInfo.diff.fields), + ...ruleResolvedConflicts, + } as DiffableRule; +} + +/** + * Assembles a `DiffableRule` from rule fields diff `merge_value`s. + */ +function convertRuleFieldsDiffToDiffable( + ruleFieldsDiff: FieldsDiff> +): Partial { + const mergeVersionRule: Record = {}; + + for (const fieldName of Object.keys(ruleFieldsDiff)) { + mergeVersionRule[fieldName] = ruleFieldsDiff[fieldName].merged_version; + } + + return mergeVersionRule; +} + +function getUnacceptedConflictsCount( + ruleFieldsDiff: FieldsDiff>, + ruleResolvedConflicts: RuleResolvedConflicts +): number { + const fieldNames = Object.keys(ruleFieldsDiff); + const fieldNamesWithConflict = fieldNames.filter( + (fieldName) => ruleFieldsDiff[fieldName].conflict !== ThreeWayDiffConflict.NONE + ); + const fieldNamesWithConflictSet = new Set(fieldNamesWithConflict); + + for (const resolvedConflictField of Object.keys(ruleResolvedConflicts)) { + if (fieldNamesWithConflictSet.has(resolvedConflictField)) { + fieldNamesWithConflictSet.delete(resolvedConflictField); + } + } + + return fieldNamesWithConflictSet.size; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_upgrade_prebuilt_rules_table_columns.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_upgrade_prebuilt_rules_table_columns.tsx index b188b1afea7f2..5552145de7b68 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_upgrade_prebuilt_rules_table_columns.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_upgrade_prebuilt_rules_table_columns.tsx @@ -10,7 +10,6 @@ import { EuiBadge, EuiButtonEmpty, EuiLink, EuiLoadingSpinner, EuiText } from '@ import React, { useMemo } from 'react'; import { RulesTableEmptyColumnName } from '../rules_table_empty_column_name'; import { SHOW_RELATED_INTEGRATIONS_SETTING } from '../../../../../../common/constants'; -import type { RuleUpgradeInfoForReview } from '../../../../../../common/api/detection_engine/prebuilt_rules'; import type { RuleSignatureId } from '../../../../../../common/api/detection_engine/model/rule_schema'; import { PopoverItems } from '../../../../../common/components/popover_items'; import { useUiSetting$ } from '../../../../../common/lib/kibana'; @@ -23,8 +22,9 @@ import type { Rule } from '../../../../rule_management/logic'; import { getNormalizedSeverity } from '../helpers'; import type { UpgradePrebuiltRulesTableActions } from './upgrade_prebuilt_rules_table_context'; import { useUpgradePrebuiltRulesTableContext } from './upgrade_prebuilt_rules_table_context'; +import type { RuleUpgradeState } from './use_prebuilt_rules_upgrade_state'; -export type TableColumn = EuiBasicTableColumn; +export type TableColumn = EuiBasicTableColumn; interface RuleNameProps { name: string; @@ -51,10 +51,9 @@ const RuleName = ({ name, ruleId }: RuleNameProps) => { const RULE_NAME_COLUMN: TableColumn = { field: 'current_rule.name', name: i18n.COLUMN_RULE, - render: ( - value: RuleUpgradeInfoForReview['current_rule']['name'], - rule: RuleUpgradeInfoForReview - ) => , + render: (value: RuleUpgradeState['current_rule']['name'], ruleUpgradeState: RuleUpgradeState) => ( + + ), sortable: true, truncateText: true, width: '60%', @@ -106,30 +105,30 @@ const INTEGRATIONS_COLUMN: TableColumn = { }; const createUpgradeButtonColumn = ( - upgradeOneRule: UpgradePrebuiltRulesTableActions['upgradeOneRule'], + upgradeRules: UpgradePrebuiltRulesTableActions['upgradeRules'], loadingRules: RuleSignatureId[], isDisabled: boolean ): TableColumn => ({ field: 'rule_id', name: , - render: (ruleId: RuleUpgradeInfoForReview['rule_id']) => { + render: (ruleId: RuleSignatureId, record) => { const isRuleUpgrading = loadingRules.includes(ruleId); - const isUpgradeButtonDisabled = isRuleUpgrading || isDisabled; + const isUpgradeButtonDisabled = isRuleUpgrading || isDisabled || record.hasUnresolvedConflicts; + const spinner = ( + + ); + return ( upgradeOneRule(ruleId)} + onClick={() => upgradeRules([ruleId])} data-test-subj={`upgradeSinglePrebuiltRuleButton-${ruleId}`} > - {isRuleUpgrading ? ( - - ) : ( - i18n.UPDATE_RULE_BUTTON - )} + {isRuleUpgrading ? spinner : i18n.UPDATE_RULE_BUTTON} ); }, @@ -143,9 +142,8 @@ export const useUpgradePrebuiltRulesTableColumns = (): TableColumn[] => { const [showRelatedIntegrations] = useUiSetting$(SHOW_RELATED_INTEGRATIONS_SETTING); const { state: { loadingRules, isRefetching, isUpgradingSecurityPackages }, - actions: { upgradeOneRule }, + actions: { upgradeRules }, } = useUpgradePrebuiltRulesTableContext(); - const isDisabled = isRefetching || isUpgradingSecurityPackages; return useMemo( @@ -169,15 +167,15 @@ export const useUpgradePrebuiltRulesTableColumns = (): TableColumn[] => { field: 'current_rule.severity', name: i18n.COLUMN_SEVERITY, render: (value: Rule['severity']) => , - sortable: ({ current_rule: { severity } }: RuleUpgradeInfoForReview) => + sortable: ({ current_rule: { severity } }: RuleUpgradeState) => getNormalizedSeverity(severity), truncateText: true, width: '12%', }, ...(hasCRUDPermissions - ? [createUpgradeButtonColumn(upgradeOneRule, loadingRules, isDisabled)] + ? [createUpgradeButtonColumn(upgradeRules, loadingRules, isDisabled)] : []), ], - [hasCRUDPermissions, loadingRules, isDisabled, showRelatedIntegrations, upgradeOneRule] + [hasCRUDPermissions, loadingRules, isDisabled, showRelatedIntegrations, upgradeRules] ); }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/use_rule_preview_flyout.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/use_rule_preview_flyout.tsx new file mode 100644 index 0000000000000..ccdfd5c39177e --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/use_rule_preview_flyout.tsx @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ReactNode } from 'react'; +import React, { useCallback, useState, useMemo } from 'react'; +import type { EuiTabbedContentTab } from '@elastic/eui'; +import { invariant } from '../../../../../common/utils/invariant'; +import type { RuleObjectId } from '../../../../../common/api/detection_engine'; +import type { RuleResponse } from '../../../../../common/api/detection_engine/model/rule_schema'; +import { RuleDetailsFlyout } from '../../../rule_management/components/rule_details/rule_details_flyout'; + +interface UseRulePreviewFlyoutParams { + rules: RuleResponse[]; + ruleActionsFactory: (rule: RuleResponse, closeRulePreview: () => void) => ReactNode; + extraTabsFactory?: (rule: RuleResponse) => EuiTabbedContentTab[]; + flyoutProps: RulePreviewFlyoutProps; +} + +interface RulePreviewFlyoutProps { + /** + * Rule preview flyout unique id used in HTML + */ + id: string; + dataTestSubj: string; +} + +interface UseRulePreviewFlyoutResult { + rulePreviewFlyout: ReactNode; + openRulePreview: (ruleId: RuleObjectId) => void; + closeRulePreview: () => void; +} + +export function useRulePreviewFlyout({ + rules, + extraTabsFactory, + ruleActionsFactory, + flyoutProps, +}: UseRulePreviewFlyoutParams): UseRulePreviewFlyoutResult { + const [rule, setRuleForPreview] = useState(); + const closeRulePreview = useCallback(() => setRuleForPreview(undefined), []); + const ruleActions = useMemo( + () => rule && ruleActionsFactory(rule, closeRulePreview), + [rule, ruleActionsFactory, closeRulePreview] + ); + const extraTabs = useMemo( + () => (rule && extraTabsFactory ? extraTabsFactory(rule) : []), + [rule, extraTabsFactory] + ); + + return { + rulePreviewFlyout: rule && ( + + ), + openRulePreview: useCallback( + (ruleId: RuleObjectId) => { + const ruleToShowInFlyout = rules.find((x) => x.id === ruleId); + + invariant(ruleToShowInFlyout, `Rule with id ${ruleId} not found`); + setRuleForPreview(ruleToShowInFlyout); + }, + [rules, setRuleForPreview] + ), + closeRulePreview, + }; +} diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculate_rule_diff.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculate_rule_diff.ts index 568c6591a724d..ed4f142d20596 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculate_rule_diff.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculate_rule_diff.ts @@ -18,9 +18,10 @@ import { import type { RuleResponse } from '../../../../../../common/api/detection_engine/model/rule_schema'; import { invariant } from '../../../../../../common/utils/invariant'; import type { PrebuiltRuleAsset } from '../../model/rule_assets/prebuilt_rule_asset'; +import { convertRuleToDiffable } from '../../../../../../common/detection_engine/prebuilt_rules/diff/convert_rule_to_diffable'; +import { convertPrebuiltRuleAssetToRuleResponse } from '../../../rule_management/logic/detection_rules_client/converters/convert_prebuilt_rule_asset_to_rule_response'; import { calculateRuleFieldsDiff } from './calculation/calculate_rule_fields_diff'; -import { convertRuleToDiffable } from './normalization/convert_rule_to_diffable'; export interface RuleVersions { current?: RuleResponse; @@ -65,13 +66,19 @@ export const calculateRuleDiff = (args: RuleVersions): CalculateRuleDiffResult = const { base, current, target } = args; invariant(current != null, 'current version is required'); - const diffableCurrentVersion = convertRuleToDiffable(current); + const diffableCurrentVersion = convertRuleToDiffable( + convertPrebuiltRuleAssetToRuleResponse(current) + ); invariant(target != null, 'target version is required'); - const diffableTargetVersion = convertRuleToDiffable(target); + const diffableTargetVersion = convertRuleToDiffable( + convertPrebuiltRuleAssetToRuleResponse(target) + ); // Base version is optional - const diffableBaseVersion = base ? convertRuleToDiffable(base) : undefined; + const diffableBaseVersion = base + ? convertRuleToDiffable(convertPrebuiltRuleAssetToRuleResponse(base)) + : undefined; const fieldsDiff = calculateRuleFieldsDiff({ base_version: diffableBaseVersion || MissingVersion, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_building_block_object.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_building_block_object.ts deleted file mode 100644 index 4f986464b12f7..0000000000000 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/normalization/extract_building_block_object.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import type { BuildingBlockObject } from '../../../../../../../common/api/detection_engine/prebuilt_rules'; -import type { PrebuiltRuleAsset } from '../../../model/rule_assets/prebuilt_rule_asset'; - -export const extractBuildingBlockObject = ( - rule: RuleResponse | PrebuiltRuleAsset -): BuildingBlockObject | undefined => { - if (rule.building_block_type == null) { - return undefined; - } - return { - type: rule.building_block_type, - }; -}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/converters/convert_prebuilt_rule_asset_to_rule_response.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/converters/convert_prebuilt_rule_asset_to_rule_response.ts index 0cb42100d4512..f7a5d78798880 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/converters/convert_prebuilt_rule_asset_to_rule_response.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/converters/convert_prebuilt_rule_asset_to_rule_response.ts @@ -6,8 +6,8 @@ */ import { v4 as uuidv4 } from 'uuid'; +import { addEcsToRequiredFields } from '../../../../../../../common/detection_engine/rule_management/utils'; import { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import { addEcsToRequiredFields } from '../../../utils/utils'; import type { PrebuiltRuleAsset } from '../../../../prebuilt_rules'; import { RULE_DEFAULTS } from '../mergers/apply_rule_defaults'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/converters/convert_rule_response_to_alerting_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/converters/convert_rule_response_to_alerting_rule.ts index 52a00f1d6f42d..8a2609b712c53 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/converters/convert_rule_response_to_alerting_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/converters/convert_rule_response_to_alerting_rule.ts @@ -9,6 +9,7 @@ import type { UpdateRuleData } from '@kbn/alerting-plugin/server/application/rul import type { ActionsClient } from '@kbn/actions-plugin/server'; import type { RuleActionCamel } from '@kbn/securitysolution-io-ts-alerting-types'; +import { addEcsToRequiredFields } from '../../../../../../../common/detection_engine/rule_management/utils'; import type { RuleResponse, TypeSpecificCreateProps, @@ -25,7 +26,7 @@ import { assertUnreachable } from '../../../../../../../common/utility_types'; import { convertObjectKeysToCamelCase } from '../../../../../../utils/object_case_converters'; import type { RuleParams, TypeSpecificRuleParams } from '../../../../rule_schema'; import { transformToActionFrequency } from '../../../normalization/rule_actions'; -import { addEcsToRequiredFields, separateActionsAndSystemAction } from '../../../utils/utils'; +import { separateActionsAndSystemAction } from '../../../utils/utils'; /** * These are the fields that are added to the rule response that are not part of the rule params diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_defaults.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_defaults.ts index 837df0b3b2f1f..0263a60ab44ad 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_defaults.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_defaults.ts @@ -6,6 +6,7 @@ */ import { v4 as uuidv4 } from 'uuid'; +import { addEcsToRequiredFields } from '../../../../../../../common/detection_engine/rule_management/utils'; import type { RuleCreateProps, RuleSource, @@ -20,7 +21,6 @@ import { normalizeThresholdObject, } from '../../../../../../../common/detection_engine/utils'; import { assertUnreachable } from '../../../../../../../common/utility_types'; -import { addEcsToRequiredFields } from '../../../utils/utils'; export const RULE_DEFAULTS = { enabled: false, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.ts index 9d02cd8dbb9df..a8beef1bf2a0e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.ts @@ -7,6 +7,7 @@ import { BadRequestError } from '@kbn/securitysolution-es-utils'; import { stringifyZodError } from '@kbn/zod-helpers'; +import { addEcsToRequiredFields } from '../../../../../../../common/detection_engine/rule_management/utils'; import type { EqlRule, EqlRuleResponseFields, @@ -44,7 +45,6 @@ import { } from '../../../../../../../common/detection_engine/utils'; import { assertUnreachable } from '../../../../../../../common/utility_types'; import type { IPrebuiltRuleAssetsClient } from '../../../../prebuilt_rules/logic/rule_assets/prebuilt_rule_assets_client'; -import { addEcsToRequiredFields } from '../../../utils/utils'; import { calculateRuleSource } from './rule_source/calculate_rule_source'; interface ApplyRulePatchProps { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_is_customized.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_is_customized.ts index 4f9bb4a060f6f..92c7d941dd7f1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_is_customized.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_is_customized.ts @@ -9,7 +9,7 @@ import type { RuleResponse } from '../../../../../../../../common/api/detection_ import { MissingVersion } from '../../../../../../../../common/api/detection_engine'; import type { PrebuiltRuleAsset } from '../../../../../prebuilt_rules'; import { calculateRuleFieldsDiff } from '../../../../../prebuilt_rules/logic/diff/calculation/calculate_rule_fields_diff'; -import { convertRuleToDiffable } from '../../../../../prebuilt_rules/logic/diff/normalization/convert_rule_to_diffable'; +import { convertRuleToDiffable } from '../../../../../../../../common/detection_engine/prebuilt_rules/diff/convert_rule_to_diffable'; import { convertPrebuiltRuleAssetToRuleResponse } from '../../converters/convert_prebuilt_rule_asset_to_rule_response'; export function calculateIsCustomized( diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/utils.ts index e7fe0f48e17b6..447d55382ab61 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/utils.ts @@ -9,8 +9,6 @@ import { partition, isEmpty } from 'lodash/fp'; import pMap from 'p-map'; import { v4 as uuidv4 } from 'uuid'; -import { ecsFieldMap } from '@kbn/alerts-as-data-utils'; - import type { ActionsClient, FindActionResult } from '@kbn/actions-plugin/server'; import type { FindResult, PartialRule } from '@kbn/alerting-plugin/server'; import type { SavedObjectsClientContract } from '@kbn/core/server'; @@ -18,8 +16,6 @@ import type { RuleAction } from '@kbn/securitysolution-io-ts-alerting-types'; import type { InvestigationFields, - RequiredField, - RequiredFieldInput, RuleResponse, RuleAction as RuleActionSchema, } from '../../../../../common/api/detection_engine/model/rule_schema'; @@ -375,22 +371,6 @@ export const migrateLegacyInvestigationFields = ( return investigationFields; }; -/* - Computes the boolean "ecs" property value for each required field based on the ECS field map. - "ecs" property indicates whether the required field is an ECS field or not. -*/ -export const addEcsToRequiredFields = (requiredFields?: RequiredFieldInput[]): RequiredField[] => - (requiredFields ?? []).map((requiredFieldWithoutEcs) => { - const isEcsField = Boolean( - ecsFieldMap[requiredFieldWithoutEcs.name]?.type === requiredFieldWithoutEcs.type - ); - - return { - ...requiredFieldWithoutEcs, - ecs: isEcsField, - }; - }); - export const separateActionsAndSystemAction = ( actionsClient: ActionsClient, actions: RuleActionSchema[] | undefined diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/prebuilt_rules.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/prebuilt_rules.ts index f4273cad22299..420794de7e338 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/prebuilt_rules.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/prebuilt_rules.ts @@ -145,15 +145,24 @@ export const bulkCreateRuleAssets = ({ const url = `${Cypress.env('ELASTICSEARCH_URL')}/${index}/_bulk?refresh`; const bulkIndexRequestBody = rules.reduce((body, rule) => { - const indexOperation = { + const document = JSON.stringify(rule); + const documentId = `security-rule:${rule['security-rule'].rule_id}`; + const historicalDocumentId = `${documentId}_${rule['security-rule'].version}`; + + const indexRuleAsset = `${JSON.stringify({ + index: { + _index: index, + _id: documentId, + }, + })}\n${document}\n`; + const indexHistoricalRuleAsset = `${JSON.stringify({ index: { _index: index, - _id: `security-rule:${rule['security-rule'].rule_id}`, + _id: historicalDocumentId, }, - }; + })}\n${document}\n`; - const documentData = JSON.stringify(rule); - return body.concat(JSON.stringify(indexOperation), '\n', documentData, '\n'); + return body.concat(indexRuleAsset, indexHistoricalRuleAsset); }, ''); rootRequest({ From 034625a70b689f636a4fe976865a162578426695 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Tue, 10 Sep 2024 21:24:32 -0300 Subject: [PATCH 04/52] [Discover] Cell actions extension (#190754) ## Summary This PR adds a new cell actions extension to Discover using the [`kbn-cell-actions`](packages/kbn-cell-actions) framework which Unified Data Table already supports, allowing profiles to register additional cell actions within the data grid: cell_actions The extension point supports the following: - Cell actions can be registered at the root or data source level. - Supports an `isCompatible` method, allowing cell actions to be shown for all cells in a column or conditionally based on the column field, etc. - Cell actions have access to a `context` object including the current `field`, `value`, `dataSource`, `dataView`, `query`, `filters`, and `timeRange`. **Note that currently cell actions do not have access to the entire record, only the current cell value. We can support this as a followup if needed, but it will require an enhancement to `kbn-cell-actions`.** ## Testing - Add `discover.experimental.enabledProfiles: ['example-root-profile', 'example-data-source-profile', 'example-document-profile']` to `kibana.dev.yml` and start Kibana. - Ingest the Discover context awareness example data using the following command: `node scripts/es_archiver --kibana-url=http://elastic:changeme@localhost:5601 --es-url=http://elastic:changeme@localhost:9200 load test/functional/fixtures/es_archiver/discover/context_awareness`. - Navigate to Discover and create a `my-example-logs` data view or target the index in an ES|QL query. - Confirm that the example cell actions appear in expanded cell popover menus and are functional. Resolves #186576. ### Checklist - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../src/components/data_table.tsx | 35 ++- .../components/data_table_columns.test.tsx | 79 ++++++ .../src/components/data_table_columns.tsx | 11 +- .../common/data_sources/utils.test.ts | 35 +++ .../discover/common/data_sources/utils.ts | 23 +- .../__mocks__/data_view_with_timefield.ts | 12 +- .../discover/public/__mocks__/services.ts | 1 + .../application/context/context_app.test.tsx | 12 +- .../context/context_app_content.test.tsx | 7 +- .../context/context_app_content.tsx | 29 +- .../application/context/services/anchor.ts | 4 +- .../components/layout/discover_documents.tsx | 28 +- .../context_awareness/__mocks__/index.tsx | 23 ++ .../public/context_awareness/hooks/index.ts | 1 + .../use_additional_cell_actions.test.tsx | 251 ++++++++++++++++++ .../hooks/use_additional_cell_actions.ts | 107 ++++++++ .../public/context_awareness/index.ts | 2 +- .../example_data_source_profile/profile.tsx | 21 ++ .../public/context_awareness/types.ts | 37 +++ .../search_embeddable_grid_component.tsx | 43 ++- .../get_search_embeddable_factory.tsx | 2 +- .../public/embeddable/initialize_fetch.ts | 8 +- src/plugins/discover/public/plugin.tsx | 12 +- .../_get_additional_cell_actions.ts | 172 ++++++++++++ .../apps/discover/context_awareness/index.ts | 1 + test/functional/services/data_grid.ts | 17 ++ .../_get_additional_cell_actions.ts | 180 +++++++++++++ .../discover/context_awareness/index.ts | 1 + 28 files changed, 1105 insertions(+), 49 deletions(-) create mode 100644 src/plugins/discover/common/data_sources/utils.test.ts create mode 100644 src/plugins/discover/public/context_awareness/hooks/use_additional_cell_actions.test.tsx create mode 100644 src/plugins/discover/public/context_awareness/hooks/use_additional_cell_actions.ts create mode 100644 test/functional/apps/discover/context_awareness/extensions/_get_additional_cell_actions.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_additional_cell_actions.ts diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 7c83f9bd6ccf7..2b582b965892a 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -271,10 +271,6 @@ export interface UnifiedDataTableProps { * Callback to execute on edit runtime field */ onFieldEdited?: () => void; - /** - * Optional triggerId to retrieve the column cell actions that will override the default ones - */ - cellActionsTriggerId?: string; /** * Service dependencies */ @@ -353,6 +349,20 @@ export interface UnifiedDataTableProps { * @param gridProps */ renderCustomToolbar?: UnifiedDataTableRenderCustomToolbar; + /** + * Optional triggerId to retrieve the column cell actions that will override the default ones + */ + cellActionsTriggerId?: string; + /** + * Custom set of properties used by some actions. + * An action might require a specific set of metadata properties to render. + * This data is sent directly to actions. + */ + cellActionsMetadata?: Record; + /** + * Controls whether the cell actions should replace the default cell actions or be appended to them + */ + cellActionsHandling?: 'replace' | 'append'; /** * An optional value for a custom number of the visible cell actions in the table. By default is up to 3. **/ @@ -389,12 +399,6 @@ export interface UnifiedDataTableProps { * Set to true to allow users to compare selected documents */ enableComparisonMode?: boolean; - /** - * Custom set of properties used by some actions. - * An action might require a specific set of metadata properties to render. - * This data is sent directly to actions. - */ - cellActionsMetadata?: Record; /** * Optional extra props passed to the renderCellValue function/component. */ @@ -441,6 +445,9 @@ export const UnifiedDataTable = ({ isSortEnabled = true, isPaginationEnabled = true, cellActionsTriggerId, + cellActionsMetadata, + cellActionsHandling = 'replace', + visibleCellActions, className, rowHeightState, onUpdateRowHeight, @@ -466,14 +473,12 @@ export const UnifiedDataTable = ({ maxDocFieldsDisplayed = 50, externalAdditionalControls, rowsPerPageOptions, - visibleCellActions, externalCustomRenderers, additionalFieldGroups, consumer = 'discover', componentsTourSteps, gridStyleOverride, rowLineHeightOverride, - cellActionsMetadata, customGridColumnsConfiguration, enableComparisonMode, cellContext, @@ -752,7 +757,7 @@ export const UnifiedDataTable = ({ const cellActionsFields = useMemo( () => - cellActionsTriggerId && !isPlainRecord + cellActionsTriggerId ? visibleColumns.map( (columnName) => dataView.getFieldByName(columnName)?.toSpec() ?? { @@ -763,7 +768,7 @@ export const UnifiedDataTable = ({ } ) : undefined, - [cellActionsTriggerId, isPlainRecord, visibleColumns, dataView] + [cellActionsTriggerId, visibleColumns, dataView] ); const allCellActionsMetadata = useMemo( () => ({ dataViewId: dataView.id, ...(cellActionsMetadata ?? {}) }), @@ -806,6 +811,7 @@ export const UnifiedDataTable = ({ getEuiGridColumns({ columns: visibleColumns, columnsCellActions, + cellActionsHandling, rowsCount: displayedRows.length, settings, dataView, @@ -829,6 +835,7 @@ export const UnifiedDataTable = ({ onResize, }), [ + cellActionsHandling, columnsMeta, columnsCellActions, customGridColumnsConfiguration, diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx index a1736d403d8f6..23fcd85de1020 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx @@ -52,6 +52,7 @@ describe('Data table columns', function () { servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, onResize: () => {}, + cellActionsHandling: 'replace', }); expect(actual).toMatchSnapshot(); }); @@ -75,6 +76,7 @@ describe('Data table columns', function () { servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, onResize: () => {}, + cellActionsHandling: 'replace', }); expect(actual).toMatchSnapshot(); }); @@ -103,9 +105,79 @@ describe('Data table columns', function () { timestamp: { type: 'date', esType: 'dateTime' }, }, onResize: () => {}, + cellActionsHandling: 'replace', }); expect(actual).toMatchSnapshot(); }); + + describe('cell actions', () => { + it('should replace cell actions', async () => { + const cellAction = jest.fn(); + const actual = getEuiGridColumns({ + columns: columnsWithTimeCol, + settings: {}, + dataView: dataViewWithTimefieldMock, + defaultColumns: false, + isSortEnabled: true, + isPlainRecord: true, + valueToStringConverter: dataTableContextMock.valueToStringConverter, + rowsCount: 100, + headerRowHeightLines: 5, + services: { + uiSettings: servicesMock.uiSettings, + toastNotifications: servicesMock.toastNotifications, + }, + hasEditDataViewPermission: () => + servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), + onFilter: () => {}, + columnsMeta: { + extension: { type: 'string' }, + message: { type: 'string', esType: 'keyword' }, + timestamp: { type: 'date', esType: 'dateTime' }, + }, + onResize: () => {}, + columnsCellActions: [[cellAction]], + cellActionsHandling: 'replace', + }); + expect(actual[0].cellActions).toEqual([cellAction]); + }); + + it('should append cell actions', async () => { + const cellAction = jest.fn(); + const actual = getEuiGridColumns({ + columns: columnsWithTimeCol, + settings: {}, + dataView: dataViewWithTimefieldMock, + defaultColumns: false, + isSortEnabled: true, + isPlainRecord: true, + valueToStringConverter: dataTableContextMock.valueToStringConverter, + rowsCount: 100, + headerRowHeightLines: 5, + services: { + uiSettings: servicesMock.uiSettings, + toastNotifications: servicesMock.toastNotifications, + }, + hasEditDataViewPermission: () => + servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), + onFilter: () => {}, + columnsMeta: { + extension: { type: 'string' }, + message: { type: 'string', esType: 'keyword' }, + timestamp: { type: 'date', esType: 'dateTime' }, + }, + onResize: () => {}, + columnsCellActions: [[cellAction]], + cellActionsHandling: 'append', + }); + expect(actual[0].cellActions).toEqual([ + expect.any(Function), + expect.any(Function), + expect.any(Function), + cellAction, + ]); + }); + }); }); describe('getVisibleColumns', () => { @@ -302,6 +374,7 @@ describe('Data table columns', function () { servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, onResize: () => {}, + cellActionsHandling: 'replace', }); expect(actual).toMatchSnapshot(); }); @@ -330,6 +403,7 @@ describe('Data table columns', function () { servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, onResize: () => {}, + cellActionsHandling: 'replace', }); expect(actual).toMatchSnapshot(); }); @@ -363,6 +437,7 @@ describe('Data table columns', function () { extension: { type: 'string' }, }, onResize: () => {}, + cellActionsHandling: 'replace', }); expect(gridColumns[1].schema).toBe('string'); }); @@ -394,6 +469,7 @@ describe('Data table columns', function () { var_test: { type: 'number' }, }, onResize: () => {}, + cellActionsHandling: 'replace', }); expect(gridColumns[1].schema).toBe('numeric'); }); @@ -421,6 +497,7 @@ describe('Data table columns', function () { message: { type: 'string', esType: 'keyword' }, }, onResize: () => {}, + cellActionsHandling: 'replace', }); const extensionGridColumn = gridColumns[0]; @@ -452,6 +529,7 @@ describe('Data table columns', function () { message: { type: 'string', esType: 'keyword' }, }, onResize: () => {}, + cellActionsHandling: 'replace', }); expect(customizedGridColumns).toMatchSnapshot(); @@ -495,6 +573,7 @@ describe('Data table columns', function () { hasEditDataViewPermission: () => servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onResize: () => {}, + cellActionsHandling: 'replace', }); const columnDisplayNames = customizedGridColumns.map((column) => column.displayAsText); expect(columnDisplayNames.includes('test_column_one')).toBeTruthy(); diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx index ff7daf13de3ec..10f55431faa71 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx @@ -102,6 +102,7 @@ function buildEuiGridColumn({ onFilter, editField, columnCellActions, + cellActionsHandling, visibleCellActions, columnsMeta, showColumnTokens, @@ -124,6 +125,7 @@ function buildEuiGridColumn({ onFilter?: DocViewFilterFn; editField?: (fieldName: string) => void; columnCellActions?: EuiDataGridColumnCellAction[]; + cellActionsHandling: 'replace' | 'append'; visibleCellActions?: number; columnsMeta?: DataTableColumnsMeta; showColumnTokens?: boolean; @@ -176,12 +178,16 @@ function buildEuiGridColumn({ let cellActions: EuiDataGridColumnCellAction[]; - if (columnCellActions?.length) { + if (columnCellActions?.length && cellActionsHandling === 'replace') { cellActions = columnCellActions; } else { cellActions = dataViewField ? buildCellActions(dataViewField, toastNotifications, valueToStringConverter, onFilter) : []; + + if (columnCellActions?.length && cellActionsHandling === 'append') { + cellActions.push(...columnCellActions); + } } const columnType = columnsMeta?.[columnName]?.type ?? dataViewField?.type; @@ -278,6 +284,7 @@ export const deserializeHeaderRowHeight = (headerRowHeightLines: number) => { export function getEuiGridColumns({ columns, columnsCellActions, + cellActionsHandling, rowsCount, settings, dataView, @@ -298,6 +305,7 @@ export function getEuiGridColumns({ }: { columns: string[]; columnsCellActions?: EuiDataGridColumnCellAction[][]; + cellActionsHandling: 'replace' | 'append'; rowsCount: number; settings: UnifiedDataTableSettings | undefined; dataView: DataView; @@ -328,6 +336,7 @@ export function getEuiGridColumns({ numberOfColumns, columnName: column, columnCellActions: columnsCellActions?.[columnIndex], + cellActionsHandling, columnWidth: getColWidth(column), dataView, defaultColumns, diff --git a/src/plugins/discover/common/data_sources/utils.test.ts b/src/plugins/discover/common/data_sources/utils.test.ts new file mode 100644 index 0000000000000..8cc858612d579 --- /dev/null +++ b/src/plugins/discover/common/data_sources/utils.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { DataView } from '@kbn/data-views-plugin/common'; +import { dataViewWithTimefieldMock } from '../../public/__mocks__/data_view_with_timefield'; +import { createDataSource, createDataViewDataSource, createEsqlDataSource } from './utils'; + +describe('createDataSource', () => { + it('should return ES|QL source when ES|QL query', () => { + const dataView = dataViewWithTimefieldMock; + const query = { esql: 'FROM *' }; + const result = createDataSource({ dataView, query }); + expect(result).toEqual(createEsqlDataSource()); + }); + + it('should return data view source when not ES|QL query and dataView id is defined', () => { + const dataView = dataViewWithTimefieldMock; + const query = { language: 'kql', query: 'test' }; + const result = createDataSource({ dataView, query }); + expect(result).toEqual(createDataViewDataSource({ dataViewId: dataView.id! })); + }); + + it('should return undefined when not ES|QL query and dataView id is not defined', () => { + const dataView = { ...dataViewWithTimefieldMock, id: undefined } as DataView; + const query = { language: 'kql', query: 'test' }; + const result = createDataSource({ dataView, query }); + expect(result).toEqual(undefined); + }); +}); diff --git a/src/plugins/discover/common/data_sources/utils.ts b/src/plugins/discover/common/data_sources/utils.ts index 1f6118e2ae1fd..70e9546f86943 100644 --- a/src/plugins/discover/common/data_sources/utils.ts +++ b/src/plugins/discover/common/data_sources/utils.ts @@ -7,7 +7,14 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { DataSourceType, DataViewDataSource, DiscoverDataSource, EsqlDataSource } from './types'; +import { isOfAggregateQueryType, type AggregateQuery, type Query } from '@kbn/es-query'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import { + DataSourceType, + type DataViewDataSource, + type DiscoverDataSource, + type EsqlDataSource, +} from './types'; export const createDataViewDataSource = ({ dataViewId, @@ -22,6 +29,20 @@ export const createEsqlDataSource = (): EsqlDataSource => ({ type: DataSourceType.Esql, }); +export const createDataSource = ({ + dataView, + query, +}: { + dataView: DataView | undefined; + query: Query | AggregateQuery | undefined; +}) => { + return isOfAggregateQueryType(query) + ? createEsqlDataSource() + : dataView?.id + ? createDataViewDataSource({ dataViewId: dataView.id }) + : undefined; +}; + export const isDataSourceType = ( dataSource: DiscoverDataSource | undefined, type: T diff --git a/src/plugins/discover/public/__mocks__/data_view_with_timefield.ts b/src/plugins/discover/public/__mocks__/data_view_with_timefield.ts index 0c9474d67e30c..1895068cfc640 100644 --- a/src/plugins/discover/public/__mocks__/data_view_with_timefield.ts +++ b/src/plugins/discover/public/__mocks__/data_view_with_timefield.ts @@ -7,7 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { DataView } from '@kbn/data-views-plugin/public'; +import { fieldList } from '@kbn/data-views-plugin/common'; +import { FieldSpec } from '@kbn/data-views-plugin/public'; import { buildDataViewMock } from '@kbn/discover-utils/src/__mocks__'; const fields = [ @@ -16,6 +17,7 @@ const fields = [ type: 'string', scripted: false, filterable: true, + searchable: true, }, { name: 'timestamp', @@ -25,6 +27,7 @@ const fields = [ filterable: true, aggregatable: true, sortable: true, + searchable: true, }, { name: 'message', @@ -32,6 +35,7 @@ const fields = [ type: 'string', scripted: false, filterable: false, + searchable: true, }, { name: 'extension', @@ -40,6 +44,7 @@ const fields = [ scripted: false, filterable: true, aggregatable: true, + searchable: true, }, { name: 'bytes', @@ -48,6 +53,7 @@ const fields = [ scripted: false, filterable: true, aggregatable: true, + searchable: true, }, { name: 'scripted', @@ -56,10 +62,10 @@ const fields = [ scripted: true, filterable: false, }, -] as DataView['fields']; +]; export const dataViewWithTimefieldMock = buildDataViewMock({ name: 'index-pattern-with-timefield', - fields, + fields: fieldList(fields as unknown as FieldSpec[]), timeFieldName: 'timestamp', }); diff --git a/src/plugins/discover/public/__mocks__/services.ts b/src/plugins/discover/public/__mocks__/services.ts index ea84b45889231..3d78239558f3e 100644 --- a/src/plugins/discover/public/__mocks__/services.ts +++ b/src/plugins/discover/public/__mocks__/services.ts @@ -148,6 +148,7 @@ export function createDiscoverServicesMock(): DiscoverServices { corePluginMock.chrome.getActiveSolutionNavId$.mockReturnValue(new BehaviorSubject(null)); return { + application: corePluginMock.application, core: corePluginMock, charts: chartPluginMock.createSetupContract(), chrome: chromeServiceMock.createStartContract(), diff --git a/src/plugins/discover/public/application/context/context_app.test.tsx b/src/plugins/discover/public/application/context/context_app.test.tsx index b8b6025d5b0bc..9c77d1e40bbb2 100644 --- a/src/plugins/discover/public/application/context/context_app.test.tsx +++ b/src/plugins/discover/public/application/context/context_app.test.tsx @@ -22,7 +22,6 @@ import { uiSettingsMock } from '../../__mocks__/ui_settings'; import { themeServiceMock } from '@kbn/core/public/mocks'; import { LocalStorageMock } from '../../__mocks__/local_storage_mock'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import type { HistoryLocationState } from '../../build_services'; import { createSearchSessionMock } from '../../__mocks__/search_session'; import { createDiscoverServicesMock } from '../../__mocks__/services'; @@ -36,14 +35,7 @@ const discoverServices = createDiscoverServicesMock(); describe('ContextApp test', () => { const { history } = createSearchSessionMock(); const services = { - data: { - ...dataPluginMock.createStartContract(), - search: { - searchSource: { - createEmpty: jest.fn(), - }, - }, - }, + data: discoverServices.data, capabilities: { discover: { save: true, @@ -80,6 +72,8 @@ describe('ContextApp test', () => { contextLocator: { getRedirectUrl: jest.fn(() => '') }, singleDocLocator: { getRedirectUrl: jest.fn(() => '') }, profilesManager: discoverServices.profilesManager, + timefilter: discoverServices.timefilter, + uiActions: discoverServices.uiActions, } as unknown as DiscoverServices; const defaultProps = { diff --git a/src/plugins/discover/public/application/context/context_app_content.test.tsx b/src/plugins/discover/public/application/context/context_app_content.test.tsx index 5cf7856b3cb99..9c49bb7d122c4 100644 --- a/src/plugins/discover/public/application/context/context_app_content.test.tsx +++ b/src/plugins/discover/public/application/context/context_app_content.test.tsx @@ -16,12 +16,17 @@ import { SortDirection } from '@kbn/data-plugin/public'; import { UnifiedDataTable } from '@kbn/unified-data-table'; import { ContextAppContent, ContextAppContentProps } from './context_app_content'; import { LoadingStatus } from './services/context_query_state'; -import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { discoverServiceMock } from '../../__mocks__/services'; import { DocTableWrapper } from '../../components/doc_table/doc_table_wrapper'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { buildDataTableRecord } from '@kbn/discover-utils'; import { act } from 'react-dom/test-utils'; +import { buildDataViewMock, deepMockedFields } from '@kbn/discover-utils/src/__mocks__'; + +const dataViewMock = buildDataViewMock({ + name: 'the-data-view', + fields: deepMockedFields, +}); describe('ContextAppContent test', () => { const mountComponent = async ({ diff --git a/src/plugins/discover/public/application/context/context_app_content.tsx b/src/plugins/discover/public/application/context/context_app_content.tsx index 403f12aa485d9..b822286ae72a9 100644 --- a/src/plugins/discover/public/application/context/context_app_content.tsx +++ b/src/plugins/discover/public/application/context/context_app_content.tsx @@ -30,6 +30,9 @@ import { } from '@kbn/discover-utils'; import { DataLoadingState, UnifiedDataTableProps } from '@kbn/unified-data-table'; import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; +import { useQuerySubscriber } from '@kbn/unified-field-list'; +import useObservable from 'react-use/lib/useObservable'; +import { map } from 'rxjs'; import { DiscoverGrid } from '../../components/discover_grid'; import { getDefaultRowsPerPage } from '../../../common/constants'; import { LoadingStatus } from './services/context_query_state'; @@ -41,7 +44,12 @@ import { DocTableContext } from '../../components/doc_table/doc_table_context'; import { useDiscoverServices } from '../../hooks/use_discover_services'; import { DiscoverGridFlyout } from '../../components/discover_grid_flyout'; import { onResizeGridColumn } from '../../utils/on_resize_grid_column'; -import { useProfileAccessor } from '../../context_awareness'; +import { + DISCOVER_CELL_ACTIONS_TRIGGER, + useAdditionalCellActions, + useProfileAccessor, +} from '../../context_awareness'; +import { createDataSource } from '../../../common/data_sources'; export interface ContextAppContentProps { columns: string[]; @@ -132,6 +140,7 @@ export function ContextAppContent({ }, [setAppState] ); + const sort = useMemo(() => { return [[dataView.timeFieldName!, SortDirection.desc]]; }, [dataView]); @@ -167,6 +176,21 @@ export function ContextAppContent({ return getCellRenderers(); }, [getCellRenderersAccessor]); + const dataSource = useMemo(() => createDataSource({ dataView, query: undefined }), [dataView]); + const { filters } = useQuerySubscriber({ data: services.data }); + const timeRange = useObservable( + services.timefilter.getTimeUpdate$().pipe(map(() => services.timefilter.getTime())), + services.timefilter.getTime() + ); + + const cellActionsMetadata = useAdditionalCellActions({ + dataSource, + dataView, + query: undefined, + filters, + timeRange, + }); + return ( @@ -206,6 +230,9 @@ export function ContextAppContent({ { return [ + state.dataSource, state.query, state.sort, state.rowHeight, @@ -264,6 +272,21 @@ function DiscoverDocumentsComponent({ [documentState.esqlQueryColumns] ); + const { filters } = useQuerySubscriber({ data: services.data }); + + const timeRange = useObservable( + services.timefilter.getTimeUpdate$().pipe(map(() => services.timefilter.getTime())), + services.timefilter.getTime() + ); + + const cellActionsMetadata = useAdditionalCellActions({ + dataSource, + dataView, + query, + filters, + timeRange, + }); + const renderDocumentView = useCallback( ( hit: DataTableRecord, @@ -470,6 +493,9 @@ function DiscoverDocumentsComponent({ additionalFieldGroups={additionalFieldGroups} dataGridDensityState={density} onUpdateDataGridDensity={onUpdateDensity} + cellActionsTriggerId={DISCOVER_CELL_ACTIONS_TRIGGER.id} + cellActionsMetadata={cellActionsMetadata} + cellActionsHandling="append" /> diff --git a/src/plugins/discover/public/context_awareness/__mocks__/index.tsx b/src/plugins/discover/public/context_awareness/__mocks__/index.tsx index a50e43559c071..9c3c3d668b889 100644 --- a/src/plugins/discover/public/context_awareness/__mocks__/index.tsx +++ b/src/plugins/discover/public/context_awareness/__mocks__/index.tsx @@ -34,6 +34,18 @@ export const createContextAwarenessMocks = ({ ...prev(), rootProfile: () => <>root-profile, })), + getAdditionalCellActions: jest.fn((prev) => () => [ + ...prev(), + { + id: 'root-action', + getDisplayName: () => 'Root action', + getIconType: () => 'minus', + isCompatible: () => false, + execute: () => { + alert('Root action executed'); + }, + }, + ]), }, resolve: jest.fn(() => ({ isMatch: true, @@ -71,6 +83,17 @@ export const createContextAwarenessMocks = ({ ], rowHeight: 3, })), + getAdditionalCellActions: jest.fn((prev) => () => [ + ...prev(), + { + id: 'data-source-action', + getDisplayName: () => 'Data source action', + getIconType: () => 'plus', + execute: () => { + alert('Data source action executed'); + }, + }, + ]), }, resolve: jest.fn(() => ({ isMatch: true, diff --git a/src/plugins/discover/public/context_awareness/hooks/index.ts b/src/plugins/discover/public/context_awareness/hooks/index.ts index 70ed93f0830f2..c509fd0119059 100644 --- a/src/plugins/discover/public/context_awareness/hooks/index.ts +++ b/src/plugins/discover/public/context_awareness/hooks/index.ts @@ -9,3 +9,4 @@ export { useProfileAccessor } from './use_profile_accessor'; export { useRootProfile } from './use_root_profile'; +export { useAdditionalCellActions } from './use_additional_cell_actions'; diff --git a/src/plugins/discover/public/context_awareness/hooks/use_additional_cell_actions.test.tsx b/src/plugins/discover/public/context_awareness/hooks/use_additional_cell_actions.test.tsx new file mode 100644 index 0000000000000..befaaf7718d05 --- /dev/null +++ b/src/plugins/discover/public/context_awareness/hooks/use_additional_cell_actions.test.tsx @@ -0,0 +1,251 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { act, renderHook } from '@testing-library/react-hooks'; +import { + DISCOVER_CELL_ACTION_TYPE, + createCellAction, + toCellActionContext, + useAdditionalCellActions, +} from './use_additional_cell_actions'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { discoverServiceMock } from '../../__mocks__/services'; +import React from 'react'; +import { createEsqlDataSource } from '../../../common/data_sources'; +import { dataViewWithTimefieldMock } from '../../__mocks__/data_view_with_timefield'; +import type { + Action, + ActionDefinition, + ActionExecutionContext, +} from '@kbn/ui-actions-plugin/public/actions'; +import { + DISCOVER_CELL_ACTIONS_TRIGGER, + type AdditionalCellAction, + type DiscoverCellActionExecutionContext, +} from '../types'; +import { createContextAwarenessMocks } from '../__mocks__'; +import { DataViewField } from '@kbn/data-views-plugin/common'; + +let mockUuid = 0; + +jest.mock('uuid', () => ({ ...jest.requireActual('uuid'), v4: () => (++mockUuid).toString() })); + +const mockActions: Array> = []; +const mockTriggerActions: Record = { [DISCOVER_CELL_ACTIONS_TRIGGER.id]: [] }; + +jest.spyOn(discoverServiceMock.uiActions, 'registerAction').mockImplementation((action) => { + mockActions.push(action as ActionDefinition); + return action as Action; +}); + +jest + .spyOn(discoverServiceMock.uiActions, 'attachAction') + .mockImplementation((triggerId, actionId) => { + mockTriggerActions[triggerId].push(actionId); + }); + +jest.spyOn(discoverServiceMock.uiActions, 'unregisterAction').mockImplementation((id) => { + mockActions.splice( + mockActions.findIndex((action) => action.id === id), + 1 + ); +}); + +jest + .spyOn(discoverServiceMock.uiActions, 'detachAction') + .mockImplementation((triggerId, actionId) => { + mockTriggerActions[triggerId].splice( + mockTriggerActions[triggerId].findIndex((action) => action === actionId), + 1 + ); + }); + +describe('useAdditionalCellActions', () => { + const initialProps: Parameters[0] = { + dataSource: createEsqlDataSource(), + dataView: dataViewWithTimefieldMock, + query: { esql: `FROM ${dataViewWithTimefieldMock.getIndexPattern()}` }, + filters: [], + timeRange: { from: 'now-15m', to: 'now' }, + }; + + const render = () => { + return renderHook((props) => useAdditionalCellActions(props), { + initialProps, + wrapper: ({ children }) => ( + {children} + ), + }); + }; + + beforeEach(() => { + discoverServiceMock.profilesManager = createContextAwarenessMocks().profilesManagerMock; + }); + + afterEach(() => { + mockUuid = 0; + }); + + it('should return metadata', async () => { + const { result, unmount } = render(); + expect(result.current).toEqual({ + instanceId: '1', + ...initialProps, + }); + unmount(); + }); + + it('should register and unregister cell actions', async () => { + await discoverServiceMock.profilesManager.resolveRootProfile({}); + const { rerender, result, unmount } = render(); + expect(result.current.instanceId).toEqual('1'); + expect(mockActions).toHaveLength(1); + expect(mockTriggerActions[DISCOVER_CELL_ACTIONS_TRIGGER.id]).toEqual(['root-action-2']); + await act(() => discoverServiceMock.profilesManager.resolveDataSourceProfile({})); + rerender(); + expect(result.current.instanceId).toEqual('3'); + expect(mockActions).toHaveLength(2); + expect(mockTriggerActions[DISCOVER_CELL_ACTIONS_TRIGGER.id]).toEqual([ + 'root-action-4', + 'data-source-action-5', + ]); + unmount(); + expect(mockActions).toHaveLength(0); + expect(mockTriggerActions[DISCOVER_CELL_ACTIONS_TRIGGER.id]).toEqual([]); + }); +}); + +describe('createCellAction', () => { + const context: ActionExecutionContext = { + data: [ + { + field: dataViewWithTimefieldMock.getFieldByName('message')?.toSpec()!, + value: 'test message', + }, + ], + metadata: undefined, + nodeRef: React.createRef(), + trigger: DISCOVER_CELL_ACTIONS_TRIGGER, + }; + + const getCellAction = (isCompatible?: AdditionalCellAction['isCompatible']) => { + const additional: AdditionalCellAction = { + id: 'test', + getIconType: jest.fn(() => 'plus'), + getDisplayName: jest.fn(() => 'displayName'), + execute: jest.fn(), + isCompatible, + }; + return { additional, action: createCellAction('test', additional, 0) }; + }; + + it('should create cell action', () => { + const { action } = getCellAction(); + expect(action).toEqual({ + id: 'test-1', + order: 0, + type: DISCOVER_CELL_ACTION_TYPE, + getIconType: expect.any(Function), + getDisplayName: expect.any(Function), + getDisplayNameTooltip: expect.any(Function), + execute: expect.any(Function), + isCompatible: expect.any(Function), + }); + }); + + it('should get icon type', () => { + const { additional, action } = getCellAction(); + expect(action.getIconType(context)).toEqual('plus'); + expect(additional.getIconType).toHaveBeenCalledWith(toCellActionContext(context)); + }); + + it('should get display name', () => { + const { additional, action } = getCellAction(); + expect(action.getDisplayName(context)).toEqual('displayName'); + expect(action.getDisplayNameTooltip?.(context)).toEqual('displayName'); + expect(additional.getDisplayName).toHaveBeenCalledWith(toCellActionContext(context)); + }); + + it('should execute', async () => { + const { additional, action } = getCellAction(); + await action.execute(context); + expect(additional.execute).toHaveBeenCalledWith(toCellActionContext(context)); + }); + + it('should be compatible if isCompatible is undefined', async () => { + const { action } = getCellAction(); + expect( + await action.isCompatible({ + ...context, + metadata: { instanceId: 'test', dataView: dataViewWithTimefieldMock }, + }) + ).toBe(true); + }); + + it('should be compatible if isCompatible returns true', async () => { + const { action } = getCellAction(() => true); + expect( + await action.isCompatible({ + ...context, + metadata: { instanceId: 'test', dataView: dataViewWithTimefieldMock }, + }) + ).toBe(true); + }); + + it('should not be compatible if isCompatible returns false', async () => { + const { action } = getCellAction(() => false); + expect( + await action.isCompatible({ + ...context, + metadata: { instanceId: 'test', dataView: dataViewWithTimefieldMock }, + }) + ).toBe(false); + }); + + it('should not be compatible if instanceId is not equal', async () => { + const { action } = getCellAction(); + expect( + await action.isCompatible({ + ...context, + metadata: { instanceId: 'test2', dataView: dataViewWithTimefieldMock }, + }) + ).toBe(false); + }); + + it('should not be compatible if no data', async () => { + const { action } = getCellAction(); + expect( + await action.isCompatible({ + ...context, + data: [], + metadata: { instanceId: 'test', dataView: dataViewWithTimefieldMock }, + }) + ).toBe(false); + }); + + it("should not be compatible if field doesn't exist in data view", async () => { + const { action } = getCellAction(); + expect( + await action.isCompatible({ + ...context, + data: [ + { + field: new DataViewField({ + name: 'test', + type: 'string', + aggregatable: true, + searchable: true, + }), + }, + ], + metadata: { instanceId: 'test', dataView: dataViewWithTimefieldMock }, + }) + ).toBe(false); + }); +}); diff --git a/src/plugins/discover/public/context_awareness/hooks/use_additional_cell_actions.ts b/src/plugins/discover/public/context_awareness/hooks/use_additional_cell_actions.ts new file mode 100644 index 0000000000000..fbd87511e186b --- /dev/null +++ b/src/plugins/discover/public/context_awareness/hooks/use_additional_cell_actions.ts @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { createCellActionFactory } from '@kbn/cell-actions/actions'; +import { useEffect, useMemo, useState } from 'react'; +import { v4 as uuidv4 } from 'uuid'; +import { + DISCOVER_CELL_ACTIONS_TRIGGER, + type AdditionalCellAction, + type AdditionalCellActionContext, + type DiscoverCellAction, + type DiscoverCellActionExecutionContext, + type DiscoverCellActionMetadata, +} from '../types'; +import { useDiscoverServices } from '../../hooks/use_discover_services'; +import { useProfileAccessor } from './use_profile_accessor'; + +export const DISCOVER_CELL_ACTION_TYPE = 'discover-cellAction-type'; + +export const useAdditionalCellActions = ({ + dataSource, + dataView, + query, + filters, + timeRange, +}: Omit) => { + const { uiActions } = useDiscoverServices(); + const [instanceId, setInstanceId] = useState(); + const getAdditionalCellActionsAccessor = useProfileAccessor('getAdditionalCellActions'); + const additionalCellActions = useMemo( + () => getAdditionalCellActionsAccessor(() => [])(), + [getAdditionalCellActionsAccessor] + ); + + useEffect(() => { + const currentInstanceId = uuidv4(); + const actions = additionalCellActions.map((action, i) => + createCellAction(currentInstanceId, action, i) + ); + + actions.forEach((action) => { + uiActions.registerAction(action); + uiActions.attachAction(DISCOVER_CELL_ACTIONS_TRIGGER.id, action.id); + }); + + setInstanceId(currentInstanceId); + + return () => { + actions.forEach((action) => { + uiActions.detachAction(DISCOVER_CELL_ACTIONS_TRIGGER.id, action.id); + uiActions.unregisterAction(action.id); + }); + + setInstanceId(undefined); + }; + }, [additionalCellActions, uiActions]); + + return useMemo( + () => ({ instanceId, dataSource, dataView, query, filters, timeRange }), + [dataSource, dataView, filters, instanceId, query, timeRange] + ); +}; + +export const createCellAction = ( + instanceId: string, + action: AdditionalCellAction, + order: number +) => { + const createFactory = createCellActionFactory(() => ({ + type: DISCOVER_CELL_ACTION_TYPE, + getIconType: (context) => action.getIconType(toCellActionContext(context)), + getDisplayName: (context) => action.getDisplayName(toCellActionContext(context)), + getDisplayNameTooltip: (context) => action.getDisplayName(toCellActionContext(context)), + execute: async (context) => action.execute(toCellActionContext(context)), + isCompatible: async ({ data, metadata }) => { + if (metadata?.instanceId !== instanceId || data.length !== 1) { + return false; + } + + const field = data[0]?.field; + + if (!field || !metadata.dataView?.getFieldByName(field.name)) { + return false; + } + + return action.isCompatible?.({ field, ...metadata }) ?? true; + }, + })); + + const factory = createFactory(); + + return factory({ id: `${action.id}-${uuidv4()}`, order }); +}; + +export const toCellActionContext = ({ + data, + metadata, +}: DiscoverCellActionExecutionContext): AdditionalCellActionContext => ({ + ...data[0], + ...metadata, +}); diff --git a/src/plugins/discover/public/context_awareness/index.ts b/src/plugins/discover/public/context_awareness/index.ts index 4c02e08110b16..fcaec25c0f247 100644 --- a/src/plugins/discover/public/context_awareness/index.ts +++ b/src/plugins/discover/public/context_awareness/index.ts @@ -11,4 +11,4 @@ export * from './types'; export * from './profiles'; export { getMergedAccessor } from './composable_profile'; export { ProfilesManager } from './profiles_manager'; -export { useProfileAccessor, useRootProfile } from './hooks'; +export { useProfileAccessor, useRootProfile, useAdditionalCellActions } from './hooks'; diff --git a/src/plugins/discover/public/context_awareness/profile_providers/example_data_source_profile/profile.tsx b/src/plugins/discover/public/context_awareness/profile_providers/example_data_source_profile/profile.tsx index 21e8115f3a431..4b304ed2bb479 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/example_data_source_profile/profile.tsx +++ b/src/plugins/discover/public/context_awareness/profile_providers/example_data_source_profile/profile.tsx @@ -115,6 +115,27 @@ export const exampleDataSourceProfileProvider: DataSourceProfileProvider = { ], rowHeight: 5, }), + getAdditionalCellActions: (prev) => () => + [ + ...prev(), + { + id: 'example-data-source-action', + getDisplayName: () => 'Example data source action', + getIconType: () => 'plus', + execute: () => { + alert('Example data source action executed'); + }, + }, + { + id: 'another-example-data-source-action', + getDisplayName: () => 'Another example data source action', + getIconType: () => 'minus', + execute: () => { + alert('Another example data source action executed'); + }, + isCompatible: ({ field }) => field.name !== 'message', + }, + ], }, resolve: (params) => { let indexPattern: string | undefined; diff --git a/src/plugins/discover/public/context_awareness/types.ts b/src/plugins/discover/public/context_awareness/types.ts index 1942fe3a098d1..82cbbf01e8aa3 100644 --- a/src/plugins/discover/public/context_awareness/types.ts +++ b/src/plugins/discover/public/context_awareness/types.ts @@ -11,6 +11,12 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import type { CustomCellRenderer, UnifiedDataTableProps } from '@kbn/unified-data-table'; import type { DocViewsRegistry } from '@kbn/unified-doc-viewer'; import type { DataTableRecord } from '@kbn/discover-utils'; +import type { CellAction, CellActionExecutionContext, CellActionsData } from '@kbn/cell-actions'; +import type { EuiIconType } from '@elastic/eui/src/components/icon/icon'; +import type { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; +import type { OmitIndexSignature } from 'type-fest'; +import type { Trigger } from '@kbn/ui-actions-plugin/public'; +import type { DiscoverDataSource } from '../../common/data_sources'; export interface DocViewerExtension { title: string | undefined; @@ -43,6 +49,36 @@ export interface RowControlsExtensionParams { dataView: DataView; } +export const DISCOVER_CELL_ACTIONS_TRIGGER: Trigger = { id: 'DISCOVER_CELL_ACTIONS_TRIGGER_ID' }; + +export interface DiscoverCellActionMetadata extends Record { + instanceId?: string; + dataSource?: DiscoverDataSource; + dataView?: DataView; + query?: Query | AggregateQuery; + filters?: Filter[]; + timeRange?: TimeRange; +} + +export interface DiscoverCellActionExecutionContext extends CellActionExecutionContext { + metadata: DiscoverCellActionMetadata | undefined; +} + +export type DiscoverCellAction = CellAction; + +export type AdditionalCellActionContext = CellActionsData & + Omit, 'instanceId'>; + +export interface AdditionalCellAction { + id: string; + getDisplayName: (context: AdditionalCellActionContext) => string; + getIconType: (context: AdditionalCellActionContext) => EuiIconType; + isCompatible?: ( + context: Omit + ) => boolean | Promise; + execute: (context: AdditionalCellActionContext) => void | Promise; +} + export interface Profile { getDefaultAppState: (params: DefaultAppStateExtensionParams) => DefaultAppStateExtension; // Data grid @@ -53,6 +89,7 @@ export interface Profile { getRowAdditionalLeadingControls: ( params: RowControlsExtensionParams ) => UnifiedDataTableProps['rowAdditionalLeadingControls'] | undefined; + getAdditionalCellActions: () => AdditionalCellAction[]; // Doc viewer getDocViewer: (params: DocViewerExtensionParams) => DocViewerExtension; } diff --git a/src/plugins/discover/public/embeddable/components/search_embeddable_grid_component.tsx b/src/plugins/discover/public/embeddable/components/search_embeddable_grid_component.tsx index f44184b9c9176..50f26bcf974b3 100644 --- a/src/plugins/discover/public/embeddable/components/search_embeddable_grid_component.tsx +++ b/src/plugins/discover/public/embeddable/components/search_embeddable_grid_component.tsx @@ -19,6 +19,7 @@ import { } from '@kbn/discover-utils'; import { Filter } from '@kbn/es-query'; import { + FetchContext, useBatchedOptionalPublishingSubjects, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; @@ -28,6 +29,7 @@ import { DataGridDensity, DataLoadingState, useColumns } from '@kbn/unified-data import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import { DiscoverGridSettings } from '@kbn/saved-search-plugin/common'; +import useObservable from 'react-use/lib/useObservable'; import { DiscoverDocTableEmbeddable } from '../../components/doc_table/create_doc_table_embeddable'; import { useDiscoverServices } from '../../hooks/use_discover_services'; import { getSortForEmbeddable } from '../../utils'; @@ -38,9 +40,15 @@ import type { SearchEmbeddableApi, SearchEmbeddableStateManager } from '../types import { DiscoverGridEmbeddable } from './saved_search_grid'; import { getSearchEmbeddableDefaults } from '../get_search_embeddable_defaults'; import { onResizeGridColumn } from '../../utils/on_resize_grid_column'; +import { DISCOVER_CELL_ACTIONS_TRIGGER, useAdditionalCellActions } from '../../context_awareness'; +import { getTimeRangeFromFetchContext } from '../utils/update_search_source'; +import { createDataSource } from '../../../common/data_sources'; interface SavedSearchEmbeddableComponentProps { - api: SearchEmbeddableApi & { fetchWarnings$: BehaviorSubject }; + api: SearchEmbeddableApi & { + fetchWarnings$: BehaviorSubject; + fetchContext$: BehaviorSubject; + }; dataView: DataView; onAddFilter?: DocViewFilterFn; stateManager: SearchEmbeddableStateManager; @@ -61,6 +69,9 @@ export function SearchEmbeddableGridComponent({ savedSearch, savedSearchId, interceptedWarnings, + query, + filters, + fetchContext, rows, totalHitCount, columnsMeta, @@ -70,6 +81,9 @@ export function SearchEmbeddableGridComponent({ api.savedSearch$, api.savedObjectId, api.fetchWarnings$, + api.query$, + api.filters$, + api.fetchContext$, stateManager.rows, stateManager.totalHitCount, stateManager.columnsMeta, @@ -123,6 +137,25 @@ export function SearchEmbeddableGridComponent({ settings: grid, }); + const dataSource = useMemo(() => createDataSource({ dataView, query }), [dataView, query]); + const timeRange = useMemo( + () => (fetchContext ? getTimeRangeFromFetchContext(fetchContext) : undefined), + [fetchContext] + ); + + const cellActionsMetadata = useAdditionalCellActions({ + dataSource, + dataView, + query, + filters, + timeRange, + }); + + // Security Solution overrides our cell actions -- this is a temporary workaroud to keep + // things working as they do currently until we can migrate their actions to One Discover + const isInSecuritySolution = + useObservable(discoverServices.application.currentAppId$) === 'securitySolutionUI'; + const onStateEditedProps = useMemo( () => ({ onAddColumn, @@ -210,7 +243,13 @@ export function SearchEmbeddableGridComponent({ {...onStateEditedProps} settings={savedSearch.grid} ariaLabelledBy={'documentsAriaLabel'} - cellActionsTriggerId={SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER_ID} + cellActionsTriggerId={ + isInSecuritySolution + ? SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER_ID + : DISCOVER_CELL_ACTIONS_TRIGGER.id + } + cellActionsMetadata={isInSecuritySolution ? undefined : cellActionsMetadata} + cellActionsHandling={isInSecuritySolution ? 'replace' : 'append'} columnsMeta={columnsMeta} configHeaderRowHeight={defaults.headerRowHeight} configRowHeight={defaults.rowHeight} diff --git a/src/plugins/discover/public/embeddable/get_search_embeddable_factory.tsx b/src/plugins/discover/public/embeddable/get_search_embeddable_factory.tsx index 9fc90bc8a942b..549b42c8a6cbe 100644 --- a/src/plugins/discover/public/embeddable/get_search_embeddable_factory.tsx +++ b/src/plugins/discover/public/embeddable/get_search_embeddable_factory.tsx @@ -297,7 +297,7 @@ export const getSearchEmbeddableFactory = ({ } > { + describe('ES|QL mode', () => { + it('should render additional cell actions for logs data source', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { esql: 'from my-example-logs | sort @timestamp desc' }, + }); + await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('example-data-source-action'); + let alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Example data source action executed'); + } finally { + await alert?.dismiss(); + } + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('another-example-data-source-action'); + alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Another example data source action executed'); + } finally { + await alert?.dismiss(); + } + }); + + it('should not render incompatible cell action for message column', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { esql: 'from my-example-logs | sort @timestamp desc' }, + }); + await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 2); + expect(await dataGrid.cellExpandPopoverActionExists('example-data-source-action')).to.be( + true + ); + expect( + await dataGrid.cellExpandPopoverActionExists('another-example-data-source-action') + ).to.be(false); + }); + + it('should not render cell actions for incompatible data source', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { esql: 'from my-example-metrics | sort @timestamp desc' }, + }); + await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + expect(await dataGrid.cellExpandPopoverActionExists('example-data-source-action')).to.be( + false + ); + expect( + await dataGrid.cellExpandPopoverActionExists('another-example-data-source-action') + ).to.be(false); + }); + }); + + describe('data view mode', () => { + it('should render additional cell actions for logs data source', async () => { + await PageObjects.common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await dataViews.switchTo('my-example-logs'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('example-data-source-action'); + let alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Example data source action executed'); + } finally { + await alert?.dismiss(); + } + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('another-example-data-source-action'); + alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Another example data source action executed'); + } finally { + await alert?.dismiss(); + } + // check Surrounding docs page + await dataGrid.clickRowToggle(); + const [, surroundingActionEl] = await dataGrid.getRowActions(); + await surroundingActionEl.click(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await browser.refresh(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('example-data-source-action'); + alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Example data source action executed'); + } finally { + await alert?.dismiss(); + } + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('another-example-data-source-action'); + alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Another example data source action executed'); + } finally { + await alert?.dismiss(); + } + }); + + it('should not render incompatible cell action for message column', async () => { + await PageObjects.common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await dataViews.switchTo('my-example-logs'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 2); + expect(await dataGrid.cellExpandPopoverActionExists('example-data-source-action')).to.be( + true + ); + expect( + await dataGrid.cellExpandPopoverActionExists('another-example-data-source-action') + ).to.be(false); + }); + + it('should not render cell actions for incompatible data source', async () => { + await PageObjects.common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await dataViews.switchTo('my-example-metrics'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + expect(await dataGrid.cellExpandPopoverActionExists('example-data-source-action')).to.be( + false + ); + expect( + await dataGrid.cellExpandPopoverActionExists('another-example-data-source-action') + ).to.be(false); + }); + }); + }); +} diff --git a/test/functional/apps/discover/context_awareness/index.ts b/test/functional/apps/discover/context_awareness/index.ts index d3da15973b49b..655f4460883d1 100644 --- a/test/functional/apps/discover/context_awareness/index.ts +++ b/test/functional/apps/discover/context_awareness/index.ts @@ -43,5 +43,6 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid loadTestFile(require.resolve('./extensions/_get_doc_viewer')); loadTestFile(require.resolve('./extensions/_get_cell_renderers')); loadTestFile(require.resolve('./extensions/_get_default_app_state')); + loadTestFile(require.resolve('./extensions/_get_additional_cell_actions')); }); } diff --git a/test/functional/services/data_grid.ts b/test/functional/services/data_grid.ts index de8f523b268ab..a280c6556bbd7 100644 --- a/test/functional/services/data_grid.ts +++ b/test/functional/services/data_grid.ts @@ -173,6 +173,23 @@ export class DataGridService extends FtrService { await this.clickCellExpandButton(rowIndex, controlsCount + columnIndex); } + /** + * Clicks a cell action button within the expanded cell popover + * @param cellActionId The ID of the registered cell action + */ + public async clickCellExpandPopoverAction(cellActionId: string) { + await this.testSubjects.click(`*dataGridColumnCellAction-${cellActionId}`); + } + + /** + * Checks if a cell action button exists within the expanded cell popover + * @param cellActionId The ID of the registered cell action + * @returns If the cell action button exists + */ + public async cellExpandPopoverActionExists(cellActionId: string) { + return await this.testSubjects.exists(`*dataGridColumnCellAction-${cellActionId}`); + } + /** * Clicks grid cell 'filter for' action button * @param rowIndex data row index starting from 0 (0 means 1st row) diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_additional_cell_actions.ts b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_additional_cell_actions.ts new file mode 100644 index 0000000000000..738785357fb5e --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_additional_cell_actions.ts @@ -0,0 +1,180 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import kbnRison from '@kbn/rison'; +import expect from '@kbn/expect'; +import type { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'discover', + 'header', + 'unifiedFieldList', + 'svlCommonPage', + ]); + const dataViews = getService('dataViews'); + const dataGrid = getService('dataGrid'); + const browser = getService('browser'); + + describe('extension getAdditionalCellActions', () => { + before(async () => { + await PageObjects.svlCommonPage.loginAsAdmin(); + }); + + describe('ES|QL mode', () => { + it('should render additional cell actions for logs data source', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { esql: 'from my-example-logs | sort @timestamp desc' }, + }); + await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('example-data-source-action'); + let alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Example data source action executed'); + } finally { + await alert?.dismiss(); + } + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('another-example-data-source-action'); + alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Another example data source action executed'); + } finally { + await alert?.dismiss(); + } + }); + + it('should not render incompatible cell action for message column', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { esql: 'from my-example-logs | sort @timestamp desc' }, + }); + await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 2); + expect(await dataGrid.cellExpandPopoverActionExists('example-data-source-action')).to.be( + true + ); + expect( + await dataGrid.cellExpandPopoverActionExists('another-example-data-source-action') + ).to.be(false); + }); + + it('should not render cell actions for incompatible data source', async () => { + const state = kbnRison.encode({ + dataSource: { type: 'esql' }, + query: { esql: 'from my-example-metrics | sort @timestamp desc' }, + }); + await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + ensureCurrentUrl: false, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + expect(await dataGrid.cellExpandPopoverActionExists('example-data-source-action')).to.be( + false + ); + expect( + await dataGrid.cellExpandPopoverActionExists('another-example-data-source-action') + ).to.be(false); + }); + }); + + describe('data view mode', () => { + it('should render additional cell actions for logs data source', async () => { + await PageObjects.common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await dataViews.switchTo('my-example-logs'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('example-data-source-action'); + let alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Example data source action executed'); + } finally { + await alert?.dismiss(); + } + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('another-example-data-source-action'); + alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Another example data source action executed'); + } finally { + await alert?.dismiss(); + } + // check Surrounding docs page + await dataGrid.clickRowToggle(); + const [, surroundingActionEl] = await dataGrid.getRowActions(); + await surroundingActionEl.click(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await browser.refresh(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('example-data-source-action'); + alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Example data source action executed'); + } finally { + await alert?.dismiss(); + } + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + await dataGrid.clickCellExpandPopoverAction('another-example-data-source-action'); + alert = await browser.getAlert(); + try { + expect(await alert?.getText()).to.be('Another example data source action executed'); + } finally { + await alert?.dismiss(); + } + }); + + it('should not render incompatible cell action for message column', async () => { + await PageObjects.common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await dataViews.switchTo('my-example-logs'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 2); + expect(await dataGrid.cellExpandPopoverActionExists('example-data-source-action')).to.be( + true + ); + expect( + await dataGrid.cellExpandPopoverActionExists('another-example-data-source-action') + ).to.be(false); + }); + + it('should not render cell actions for incompatible data source', async () => { + await PageObjects.common.navigateToActualUrl('discover', undefined, { + ensureCurrentUrl: false, + }); + await dataViews.switchTo('my-example-metrics'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 0); + expect(await dataGrid.cellExpandPopoverActionExists('example-data-source-action')).to.be( + false + ); + expect( + await dataGrid.cellExpandPopoverActionExists('another-example-data-source-action') + ).to.be(false); + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/index.ts b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/index.ts index d0e23c825870b..d7ce3bdc0434b 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/index.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/index.ts @@ -42,5 +42,6 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid loadTestFile(require.resolve('./extensions/_get_doc_viewer')); loadTestFile(require.resolve('./extensions/_get_cell_renderers')); loadTestFile(require.resolve('./extensions/_get_default_app_state')); + loadTestFile(require.resolve('./extensions/_get_additional_cell_actions')); }); } From c6a12bec9fbb202ff0b1776ccc6c8ac262f1c147 Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Wed, 11 Sep 2024 02:26:41 +0200 Subject: [PATCH 05/52] [Security Solution] migrate Threat Intelligence Cypress tests into security_solution_cypress folder (#191162) --- .../plugins/threat_intelligence/kibana.jsonc | 7 +- .../threat_intelligence/block_list.cy.ts | 112 + .../threat_intelligence/cases.cy.ts | 138 + .../threat_intelligence/empty_page.cy.ts | 33 + .../threat_intelligence/indicators.cy.ts | 382 +++ .../threat_intelligence/query_bar.cy.ts | 193 ++ .../threat_intelligence/timeline.cy.ts | 123 + .../screens/threat_intelligence/blocklist.ts | 27 + .../screens/threat_intelligence/cases.ts | 33 + .../screens/threat_intelligence/common.ts | 17 + .../screens/threat_intelligence/empty_page.ts | 14 + .../screens/threat_intelligence/indicators.ts | 130 + .../screens/threat_intelligence/query_bar.ts | 15 + .../screens/threat_intelligence/timeline.ts | 31 + .../tasks/threat_intelligence/blocklist.ts | 41 + .../tasks/threat_intelligence/cases.ts | 74 + .../tasks/threat_intelligence/common.ts | 120 + .../tasks/threat_intelligence/indicators.ts | 62 + .../tasks/threat_intelligence/query_bar.ts | 115 + .../tasks/threat_intelligence/timeline.ts | 80 + .../ti_indicators_data_invalid/data.json | 1809 ++++++++++++ .../ti_indicators_data_invalid/mappings.json | 1599 ++++++++++ .../ti_indicators_data_multiple/data.json | 2567 +++++++++++++++++ .../ti_indicators_data_multiple/mappings.json | 1599 ++++++++++ .../ti_indicators_data_no_mappings/data.json | 171 ++ .../ti_indicators_data_single/data.json | 77 + .../ti_indicators_data_single/mappings.json | 1599 ++++++++++ .../pipelines/pipeline.ts | 12 + .../pipelines/ti_abusech_malware.ts | 212 ++ .../pipelines/ti_abusech_malware_bazaar.ts | 356 +++ .../pipelines/ti_abusech_url.ts | 151 + .../test/security_solution_cypress/runner.ts | 24 + 32 files changed, 11920 insertions(+), 3 deletions(-) create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/block_list.cy.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/cases.cy.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/empty_page.cy.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/indicators.cy.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/query_bar.cy.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/timeline.cy.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/blocklist.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/cases.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/common.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/empty_page.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/indicators.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/query_bar.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/timeline.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/blocklist.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/cases.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/common.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/indicators.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/query_bar.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/timeline.ts create mode 100644 x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/data.json create mode 100644 x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/mappings.json create mode 100644 x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_multiple/data.json create mode 100644 x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_multiple/mappings.json create mode 100644 x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_no_mappings/data.json create mode 100644 x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_single/data.json create mode 100644 x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_single/mappings.json create mode 100644 x-pack/test/security_solution_cypress/pipelines/pipeline.ts create mode 100644 x-pack/test/security_solution_cypress/pipelines/ti_abusech_malware.ts create mode 100644 x-pack/test/security_solution_cypress/pipelines/ti_abusech_malware_bazaar.ts create mode 100644 x-pack/test/security_solution_cypress/pipelines/ti_abusech_url.ts diff --git a/x-pack/plugins/threat_intelligence/kibana.jsonc b/x-pack/plugins/threat_intelligence/kibana.jsonc index 3c750402438b2..35077b11facac 100644 --- a/x-pack/plugins/threat_intelligence/kibana.jsonc +++ b/x-pack/plugins/threat_intelligence/kibana.jsonc @@ -11,11 +11,12 @@ "cases", "data", "dataViews", + "inspector", + "kibanaReact", "kibanaUtils", "navigation", - "kibanaReact", - "triggersActionsUi", - "inspector" + "security", + "triggersActionsUi" ], "requiredBundles": [ "data", diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/block_list.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/block_list.cy.ts new file mode 100644 index 0000000000000..ec7c480400793 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/block_list.cy.ts @@ -0,0 +1,112 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { + closeFlyout, + navigateToThreatIntelligence, + openFlyout, + openFlyoutTakeAction, + openIndicatorsTableMoreActions, + waitForViewToBeLoaded, +} from '../../../tasks/threat_intelligence/common'; +import { + fillBlocklistForm, + openAddToBlockListFlyoutFromTable, + openAddToBlocklistFromFlyout, +} from '../../../tasks/threat_intelligence/blocklist'; +import { navigateToBlocklist } from '../../../tasks/threat_intelligence/common'; +import { login } from '../../../tasks/login'; +import { + BLOCK_LIST_VALUE_INPUT, + FLYOUT_ADD_TO_BLOCK_LIST_ITEM, + INDICATORS_TABLE_ADD_TO_BLOCK_LIST_BUTTON_ICON, + SAVED_BLOCK_LIST_DESCRIPTION, + SAVED_BLOCK_LIST_NAME, +} from '../../../screens/threat_intelligence/blocklist'; + +const URL = '/app/security/threat_intelligence/indicators'; + +const FIRST_BLOCK_LIST_NEW_NAME = 'first blocklist entry'; +const FIRST_BLOCK_LIST_NEW_DESCRIPTION = 'the first description'; +const SECOND_BLOCK_LIST_NEW_NAME = 'second blocklist entry'; +const SECOND_BLOCK_LIST_NEW_DESCRIPTION = 'the second description'; + +describe('Block list with invalid indicators', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_invalid' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_invalid' })); + + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should disabled blocklist in the indicators table context menu item and flyout context menu items', () => { + openIndicatorsTableMoreActions(3); + cy.get(INDICATORS_TABLE_ADD_TO_BLOCK_LIST_BUTTON_ICON).should('be.disabled'); + + openFlyout(3); + openFlyoutTakeAction(); + cy.get(FLYOUT_ADD_TO_BLOCK_LIST_ITEM).should('be.disabled'); + }); +}); + +describe('Block list interactions', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_multiple' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_multiple' })); + + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should add to block list from the indicators table and from flyout', () => { + // first indicator is a valid indicator for add to blocklist feature + const firstIndicatorId = 'd86e656455f985357df3063dff6637f7f3b95bb27d1769a6b88c7adecaf7763f'; + + cy.log('add to blocklist from the table more action menu'); + + openIndicatorsTableMoreActions(); + openAddToBlockListFlyoutFromTable(); + + cy.get(BLOCK_LIST_VALUE_INPUT(firstIndicatorId)); + + fillBlocklistForm(FIRST_BLOCK_LIST_NEW_NAME, FIRST_BLOCK_LIST_NEW_DESCRIPTION); + navigateToBlocklist(); + + cy.get(SAVED_BLOCK_LIST_NAME).eq(0).should('have.text', FIRST_BLOCK_LIST_NEW_NAME); + cy.get(SAVED_BLOCK_LIST_DESCRIPTION) + .eq(0) + .should('have.text', FIRST_BLOCK_LIST_NEW_DESCRIPTION); + + navigateToThreatIntelligence(); + + // second indicator is a valid indicator for add to blocklist feature + const secondIndicatorId = 'd3e2cf87eabf84ef929aaf8dad1431b3387f5a26de8ffb7a0c3c2a13f973c0ab'; + + cy.log('add to blocklist from the flyout'); + + openFlyout(1); + openFlyoutTakeAction(); + openAddToBlocklistFromFlyout(); + + cy.get(BLOCK_LIST_VALUE_INPUT(secondIndicatorId)); + + fillBlocklistForm(SECOND_BLOCK_LIST_NEW_NAME, SECOND_BLOCK_LIST_NEW_DESCRIPTION); + closeFlyout(); + navigateToBlocklist(); + + cy.get(SAVED_BLOCK_LIST_NAME).eq(0).should('have.text', SECOND_BLOCK_LIST_NEW_NAME); + cy.get(SAVED_BLOCK_LIST_DESCRIPTION) + .eq(0) + .should('have.text', SECOND_BLOCK_LIST_NEW_DESCRIPTION); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/cases.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/cases.cy.ts new file mode 100644 index 0000000000000..4efdd7151c7ec --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/cases.cy.ts @@ -0,0 +1,138 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { + navigateToThreatIntelligence, + openFlyout, + openFlyoutTakeAction, + openIndicatorsTableMoreActions, + waitForViewToBeLoaded, +} from '../../../tasks/threat_intelligence/common'; +import { + createNewCaseFromTI, + navigateToCaseViaToaster, + openAddToExistingCaseFlyoutFromTable, + openAddToExistingCaseFromFlyout, + openAddToNewCaseFlyoutFromTable, + openAddToNewCaseFromFlyout, + selectExistingCase, +} from '../../../tasks/threat_intelligence/cases'; +import { + CASE_COMMENT_EXTERNAL_REFERENCE, + FLYOUT_ADD_TO_EXISTING_CASE_ITEM, + FLYOUT_ADD_TO_NEW_CASE_ITEM, + INDICATORS_TABLE_ADD_TO_EXISTING_CASE_BUTTON_ICON, + INDICATORS_TABLE_ADD_TO_NEW_CASE_BUTTON_ICON, +} from '../../../screens/threat_intelligence/cases'; +import { login } from '../../../tasks/login'; + +const URL = '/app/security/threat_intelligence/indicators'; + +describe('Cases with invalid indicators', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_invalid' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_invalid' })); + + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should disable the indicators table context menu items and flyout context menu items', () => { + const documentsNumber = 22; + openIndicatorsTableMoreActions(documentsNumber - 1); + + cy.get(INDICATORS_TABLE_ADD_TO_EXISTING_CASE_BUTTON_ICON).should('be.disabled'); + cy.get(INDICATORS_TABLE_ADD_TO_NEW_CASE_BUTTON_ICON).should('be.disabled'); + + openFlyout(documentsNumber - 1); + openFlyoutTakeAction(); + + cy.get(FLYOUT_ADD_TO_EXISTING_CASE_ITEM).should('be.disabled'); + cy.get(FLYOUT_ADD_TO_NEW_CASE_ITEM).should('be.disabled'); + }); +}); + +describe('Cases interactions', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_single' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_single' })); + + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should add to new case and to existing case from the indicators table and the flyout', () => { + cy.log('should add to new case when clicking on the button in the indicators table'); + + openIndicatorsTableMoreActions(); + openAddToNewCaseFlyoutFromTable(); + createNewCaseFromTI(); + navigateToCaseViaToaster(); + + cy.get(CASE_COMMENT_EXTERNAL_REFERENCE) + .should('exist') + .and('contain.text', 'added an indicator of compromise') + .and('contain.text', 'Indicator name') + .and('contain.text', 'Indicator type') + .and('contain.text', 'Feed name'); + + navigateToThreatIntelligence(); + + cy.log('should add to existing case when clicking on the button in the indicators table'); + + openIndicatorsTableMoreActions(); + openAddToExistingCaseFlyoutFromTable(); + selectExistingCase(); + navigateToCaseViaToaster(); + + cy.get(CASE_COMMENT_EXTERNAL_REFERENCE) + .should('exist') + .and('contain.text', 'added an indicator of compromise') + .and('contain.text', 'Indicator name') + .and('contain.text', 'Indicator type') + .and('contain.text', 'Feed name'); + + navigateToThreatIntelligence(); + + cy.log('should add to new case when clicking on the button in the indicators flyout'); + + openFlyout(0); + openFlyoutTakeAction(); + openAddToNewCaseFromFlyout(); + createNewCaseFromTI(); + + navigateToCaseViaToaster(); + cy.get(CASE_COMMENT_EXTERNAL_REFERENCE) + .should('exist') + .and('contain.text', 'added an indicator of compromise') + .and('contain.text', 'Indicator name') + .and('contain.text', 'Indicator type') + .and('contain.text', 'Feed name'); + + navigateToThreatIntelligence(); + + cy.log('should add to existing case when clicking on the button in the indicators flyout'); + + openFlyout(0); + openFlyoutTakeAction(); + openAddToExistingCaseFromFlyout(); + selectExistingCase(); + + navigateToCaseViaToaster(); + cy.get(CASE_COMMENT_EXTERNAL_REFERENCE) + .should('exist') + .and('contain.text', 'added an indicator of compromise') + .and('contain.text', 'Indicator name') + .and('contain.text', 'Indicator type') + .and('contain.text', 'Feed name'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/empty_page.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/empty_page.cy.ts new file mode 100644 index 0000000000000..1fc5c21e14af0 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/empty_page.cy.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { login } from '../../../tasks/login'; +import { + EMPTY_PAGE_BODY, + EMPTY_PAGE_DOCS_LINK, + EMPTY_PAGE_INTEGRATIONS_LINK, +} from '../../../screens/threat_intelligence/empty_page'; + +const URL = '/app/security/threat_intelligence/'; + +describe('Empty Page', { tags: ['@ess'] }, () => { + beforeEach(() => { + login(); + visitWithTimeRange(URL); + }); + + it('should render the empty page with link to docs and integrations, and navigate to integrations page', () => { + cy.get(EMPTY_PAGE_BODY).should('be.visible'); + cy.get(EMPTY_PAGE_DOCS_LINK).should('be.visible'); + cy.get(EMPTY_PAGE_INTEGRATIONS_LINK).should('be.visible'); + + cy.get(EMPTY_PAGE_INTEGRATIONS_LINK).click(); + cy.url().should('include', '/app/integrations/browse/threat_intel'); + cy.get('h1').first().should('contain', 'Integrations'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/indicators.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/indicators.cy.ts new file mode 100644 index 0000000000000..03cf8e794c7ab --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/indicators.cy.ts @@ -0,0 +1,382 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { INDICATORS_TABLE_INVESTIGATE_IN_TIMELINE_BUTTON_ICON } from '../../../screens/threat_intelligence/timeline'; +import { + closeFlyout, + navigateToFlyoutJsonTab, + navigateToFlyoutTableTab, + openFlyout, + waitForViewToBeLoaded, +} from '../../../tasks/threat_intelligence/common'; +import { + clearQuery, + closeFieldBrowser, + enterQuery, + navigateToIndicatorsTablePage, + openFieldBrowser, + openInspector, +} from '../../../tasks/threat_intelligence/indicators'; +import { + ADD_INTEGRATIONS_BUTTON, + BREADCRUMBS, + DEFAULT_LAYOUT_TITLE, + EMPTY_STATE, + ENDING_BREADCRUMB, + FIELD_BROWSER, + FIELD_BROWSER_MODAL, + FIELD_SELECTOR, + FIELD_SELECTOR_INPUT, + FIELD_SELECTOR_LIST, + FIELD_SELECTOR_TOGGLE_BUTTON, + FILTERS_GLOBAL_CONTAINER, + FLYOUT_JSON, + FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM, + FLYOUT_OVERVIEW_HIGHLIGHTED_FIELDS_TABLE, + FLYOUT_TABLE, + FLYOUT_TABS, + FLYOUT_TITLE, + INDICATOR_TYPE_CELL, + INDICATORS_TABLE, + INDICATORS_TABLE_FEED_NAME_CELL, + INDICATORS_TABLE_FEED_NAME_COLUMN_HEADER, + INDICATORS_TABLE_FIRST_SEEN_COLUMN_HEADER, + INDICATORS_TABLE_INDICATOR_LAST_SEEN_CELL, + INDICATORS_TABLE_INDICATOR_NAME_CELL, + INDICATORS_TABLE_INDICATOR_NAME_COLUMN_HEADER, + INDICATORS_TABLE_INDICATOR_TYPE_CELL, + INDICATORS_TABLE_INDICATOR_TYPE_COLUMN_HEADER, + INDICATORS_TABLE_LAST_SEEN_COLUMN_HEADER, + INDICATORS_TABLE_ROW_CELL, + INSPECTOR_BUTTON, + INSPECTOR_PANEL, + LEADING_BREADCRUMB, + QUERY_INPUT, + REFRESH_BUTTON, + TABLE_CONTROLS, + TIME_RANGE_PICKER, +} from '../../../screens/threat_intelligence/indicators'; +import { login } from '../../../tasks/login'; +import { visit, visitWithTimeRange } from '../../../tasks/navigation'; + +const URL = '/app/security/threat_intelligence/indicators'; +const URL_WITH_CONTRADICTORY_FILTERS = + '/app/security/threat_intelligence/indicators?indicators=(filterQuery:(language:kuery,query:%27%27),filters:!((%27$state%27:(store:appState),meta:(alias:!n,disabled:!f,index:%27%27,key:threat.indicator.type,negate:!f,params:(query:file),type:phrase),query:(match_phrase:(threat.indicator.type:file))),(%27$state%27:(store:appState),meta:(alias:!n,disabled:!f,index:%27%27,key:threat.indicator.type,negate:!f,params:(query:url),type:phrase),query:(match_phrase:(threat.indicator.type:url)))),timeRange:(from:now/d,to:now/d))'; + +describe('Single indicator', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_single' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_single' })); + + describe('basic/simple url', () => { + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should render the basic page elements', () => { + cy.log('should show breadcrumb'); + + cy.get(BREADCRUMBS).should('be.visible'); + cy.get(LEADING_BREADCRUMB).should('have.text', 'Security'); + cy.get(ENDING_BREADCRUMB).should('have.text', 'Intelligence'); + + cy.log('should show title'); + + cy.get(DEFAULT_LAYOUT_TITLE).should('have.text', 'Indicators'); + + cy.log('should show table'); + + cy.get(INDICATORS_TABLE).should('exist'); + cy.get(INDICATORS_TABLE_INDICATOR_NAME_COLUMN_HEADER).should('exist'); + cy.get(INDICATORS_TABLE_INDICATOR_NAME_CELL).should( + 'contain.text', + 'd86e656455f985357df3063dff6637f7f3b95bb27d1769a6b88c7adecaf7763f' + ); + cy.get(INDICATORS_TABLE_INDICATOR_TYPE_COLUMN_HEADER).should('exist'); + cy.get(INDICATORS_TABLE_INDICATOR_TYPE_CELL).should('contain.text', 'file'); + cy.get(INDICATORS_TABLE_FEED_NAME_COLUMN_HEADER).should('exist'); + cy.get(INDICATORS_TABLE_FEED_NAME_CELL).should('contain.text', 'AbuseCH Malware'); + cy.get(INDICATORS_TABLE_FIRST_SEEN_COLUMN_HEADER).should('exist'); + cy.get(INDICATORS_TABLE_LAST_SEEN_COLUMN_HEADER).should('exist'); + cy.get(INDICATORS_TABLE_INDICATOR_LAST_SEEN_CELL).should('contain.text', '-'); + + cy.log('should show kql bar'); + + cy.get(FILTERS_GLOBAL_CONTAINER).should('exist'); + cy.get(`${FILTERS_GLOBAL_CONTAINER} ${TIME_RANGE_PICKER}`).should('exist'); + cy.get(`${FIELD_SELECTOR}`).should('exist'); + + cy.log('should show flyout'); + + openFlyout(); + + cy.get(FLYOUT_TITLE).should('contain', 'Indicator details'); + cy.get(FLYOUT_TABS).should('exist').children().should('have.length', 3); + cy.get(FLYOUT_TABS).should('exist'); + + closeFlyout(); + + cy.log('should render proper field browser modal'); + + openFieldBrowser(); + + cy.get(FIELD_BROWSER_MODAL).should('be.visible'); + + closeFieldBrowser(); + + cy.log('should render the inspector flyout when inspector button is clicked'); + + openInspector(); + + cy.get(INSPECTOR_PANEL).contains('Indicators search requests'); + }); + + it('should render flyout content', () => { + openFlyout(); + + cy.log('should show the high level blocks'); + + cy.get(FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM) + .eq(0) + .should('contain.text', 'Feed') + .and('contain.text', 'AbuseCH Malware'); + cy.get(FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM) + .eq(1) + .should('contain.text', 'Indicator type') + .and('contain.text', 'file'); + cy.get(FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM) + .eq(2) + .should('contain.text', 'TLP Marking-') + .and('contain.text', '-'); + cy.get(FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM) + .eq(3) + .should('contain.text', 'Confidence') + .and('contain.text', '-'); + + cy.log('should show the highlighted fields table'); + + cy.get(FLYOUT_OVERVIEW_HIGHLIGHTED_FIELDS_TABLE) + .should('contain.text', 'threat.indicator.file.hash.md5') + .and('contain.text', 'a7f997be65f62fdbe5ec076f0fe207f7'); + cy.get(FLYOUT_OVERVIEW_HIGHLIGHTED_FIELDS_TABLE) + .should('contain.text', 'threat.indicator.file.type') + .and('contain.text', 'zip'); + + cy.log('should render the table tab correctly'); + + navigateToFlyoutTableTab(); + + cy.get(FLYOUT_TABLE).should('contain.text', 'threat.indicator.type'); + cy.get(FLYOUT_TABLE) + .should('contain.text', '@timestamp') + .and('contain.text', 'Jun 2, 2022 @ 13:29:47.677'); + cy.get(FLYOUT_TABLE) + .should('contain.text', 'threat.indicator.file.type') + .and('contain.text', 'zip'); + + cy.log('should render the json tab correctly'); + + navigateToFlyoutJsonTab(); + + cy.get(FLYOUT_JSON).should('contain.text', 'threat.indicator.type'); + cy.get(FLYOUT_JSON).should('contain.text', '"@timestamp": "2022-06-02T13:29:47.677Z",'); + }); + }); + + describe('No items match search criteria', () => { + beforeEach(() => { + login(); + cy.visit(URL_WITH_CONTRADICTORY_FILTERS); + }); + + it('should handle no match search criteria', () => { + cy.log('not display the table when contradictory filters are set'); + + cy.get(FLYOUT_TABLE).should('not.exist'); + cy.get(EMPTY_STATE).should('exist').and('contain.text', 'No results'); + + cy.log('have the default selected field, then update when user selects'); + + const threatFeedName = 'threat.feed.name'; + cy.get(`${FIELD_SELECTOR_INPUT}`).should('have.value', threatFeedName); + + const timestamp: string = '@timestamp'; + cy.get(`${FIELD_SELECTOR_TOGGLE_BUTTON}`).should('exist').click(); + cy.get(`${FIELD_SELECTOR_LIST}`).should('exist').contains(timestamp); + }); + }); + + describe('Field browser', () => { + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should render proper modal window', () => { + cy.get('[data-test-subj="tiIndicatorsTable"]').within(() => { + cy.get(FIELD_BROWSER).last().click(); + }); + + cy.get(FIELD_BROWSER_MODAL).should('be.visible'); + }); + }); + + describe('Request inspector', () => { + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('when inspector button is clicked it should render the inspector flyout', () => { + cy.get(INSPECTOR_BUTTON).last().click(); + + cy.get(INSPECTOR_PANEL).contains('Indicators search requests'); + }); + }); + + describe('Add integrations', () => { + beforeEach(() => { + login(); + visit(URL); + }); + + it('when the global header add integrations button is clicked it should navigate to the Integrations page with Threat Intelligence category selected', () => { + cy.get(ADD_INTEGRATIONS_BUTTON).click(); + + cy.url().should('include', 'threat_intel'); + }); + }); +}); + +describe('Multiple indicators', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_multiple' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_multiple' })); + + describe('Indicator page search', () => { + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should handle all search actions', () => { + cy.log('should narrow the results to url indicators when respective KQL search is executed'); + + enterQuery('threat.indicator.type: "url"{enter}'); + + // Check if query results are narrowed after search + cy.get(INDICATOR_TYPE_CELL).should('not.contain.text', 'file'); + + clearQuery(); + enterQuery('threat.indicator.type: "file"{enter}'); + + cy.get(INDICATOR_TYPE_CELL).should('not.contain.text', 'url'); + + clearQuery(); + + cy.log('should go to the 2nd page'); + + navigateToIndicatorsTablePage(1); + + cy.get(TABLE_CONTROLS).should('contain.text', 'Showing 26-26 of'); + + cy.log('should go to page 1 when search input is cleared'); + + cy.get(QUERY_INPUT).should('exist').focus(); + cy.get(QUERY_INPUT).clear(); + cy.get(QUERY_INPUT).type('{enter}'); + cy.get(TABLE_CONTROLS).should('contain.text', 'Showing 1-25 of'); + + cy.log('should reload the data when refresh button is pressed'); + + cy.intercept(/bsearch/).as('search'); + cy.get(REFRESH_BUTTON).should('exist').click(); + cy.wait('@search'); + }); + }); +}); + +describe('Invalid Indicators', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_invalid' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_invalid' })); + + describe('verify the grid loads even with missing fields', () => { + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should display data grid despite the missing fields', () => { + cy.get(INDICATORS_TABLE).should('exist'); + + // there are 19 documents in the x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/data.json + const documentsNumber = 22; + cy.get(INDICATORS_TABLE_ROW_CELL).should('have.length.gte', documentsNumber); + + // the last 3 documents have no hash so the investigate in timeline button isn't rendered + cy.get(INDICATORS_TABLE_INVESTIGATE_IN_TIMELINE_BUTTON_ICON).should( + 'have.length', + documentsNumber - 4 + ); + + // we should have 21 documents plus the header + cy.get(INDICATORS_TABLE_INDICATOR_NAME_CELL).should('have.length', documentsNumber + 1); + + // this entry has no hash to we show - in the Indicator Name column + cy.get(INDICATORS_TABLE_INDICATOR_NAME_CELL) + .eq(documentsNumber - 3) + .should('contain.text', '-'); + + // this entry is missing the file key entirely + cy.get(INDICATORS_TABLE_INDICATOR_NAME_CELL) + .eq(documentsNumber - 2) + .should('contain.text', '-'); + + // this entry is missing the type field + cy.get(INDICATORS_TABLE_INDICATOR_NAME_CELL) + .eq(documentsNumber - 1) + .should('contain.text', '-'); + cy.get(INDICATORS_TABLE_INDICATOR_TYPE_CELL) + .eq(documentsNumber - 1) + .should('contain.text', '-'); + + // this entry is missing the type field + cy.get(INDICATORS_TABLE_INDICATOR_NAME_CELL).last().should('contain.text', '-'); + cy.get(INDICATORS_TABLE_INDICATOR_TYPE_CELL).last().should('contain.text', '-'); + }); + }); +}); + +describe('Missing mappings', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_no_mappings' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_no_mappings' })); + + describe('verify the grid loads even with missing mappings and missing fields', () => { + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should display data grid despite the missing mappings and missing fields', () => { + // there are 2 documents in the x-pack/test/threat_intelligence_cypress/es_archives/threat_intelligence/missing_mappings_indicators_data/data.json + const documentsNumber = 2; + cy.get(INDICATORS_TABLE_ROW_CELL).should('have.length.gte', documentsNumber); + + // we should have 2 documents plus the header + cy.get(INDICATORS_TABLE_INDICATOR_NAME_CELL).should('have.length', documentsNumber + 1); + }); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/query_bar.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/query_bar.cy.ts new file mode 100644 index 0000000000000..a7cefa41bc678 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/query_bar.cy.ts @@ -0,0 +1,193 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { + closeFlyout, + navigateToFlyoutTableTab, + openFlyout, + waitForViewToBeLoaded, + waitForViewToBeUpdated, +} from '../../../tasks/threat_intelligence/common'; +import { + clearKQLBar, + filterInFromBarChartLegend, + filterInFromFlyoutBlockItem, + filterInFromFlyoutOverviewTable, + filterInFromFlyoutTableTab, + filterInFromTableCell, + filterOutFromBarChartLegend, + filterOutFromFlyoutBlockItem, + filterOutFromFlyoutOverviewTable, + filterOutFromFlyoutTableTab, + filterOutFromTableCell, +} from '../../../tasks/threat_intelligence/query_bar'; +import { INDICATOR_TYPE_CELL } from '../../../screens/threat_intelligence/indicators'; +import { KQL_FILTER } from '../../../screens/threat_intelligence/query_bar'; +import { login } from '../../../tasks/login'; + +const URL = '/app/security/threat_intelligence/indicators'; + +describe('Indicators query bar interaction', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_multiple' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_multiple' })); + + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should add filter to kql', () => { + cy.log('filter in values when clicking in the barchart legend'); + + waitForViewToBeUpdated(); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + filterInFromBarChartLegend(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter out values when clicking in the barchart legend'); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + filterOutFromBarChartLegend(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter in values when clicking in an indicators table cell'); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + filterInFromTableCell(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter out and out values when clicking in an indicators table cell'); + + waitForViewToBeUpdated(); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + filterOutFromTableCell(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter in values when clicking in an indicators flyout overview tab block'); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + openFlyout(); + filterInFromFlyoutBlockItem(); + closeFlyout(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter out values when clicking in an indicators flyout overview block'); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + openFlyout(); + filterOutFromFlyoutBlockItem(); + closeFlyout(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter in values when clicking in an indicators flyout overview tab table row'); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + openFlyout(); + filterInFromFlyoutOverviewTable(); + closeFlyout(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter out values when clicking in an indicators flyout overview tab row'); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + openFlyout(); + filterOutFromFlyoutOverviewTable(); + closeFlyout(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter in values when clicking in an indicators flyout table tab action column'); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + openFlyout(); + navigateToFlyoutTableTab(); + filterInFromFlyoutTableTab(); + closeFlyout(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + waitForViewToBeUpdated(); + + cy.log('filter out values when clicking in an indicators flyout table tab action column'); + + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + openFlyout(); + navigateToFlyoutTableTab(); + filterOutFromFlyoutTableTab(); + closeFlyout(); + waitForViewToBeUpdated(); + + cy.get(KQL_FILTER).should('exist'); + cy.get(INDICATOR_TYPE_CELL).its('length').should('be.gte', 0); + + clearKQLBar(); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/timeline.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/timeline.cy.ts new file mode 100644 index 0000000000000..691dc1926a454 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/timeline.cy.ts @@ -0,0 +1,123 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { + addToTimelineFromBarchartLegend, + addToTimelineFromFlyoutOverviewTabBlock, + addToTimelineFromFlyoutOverviewTabTable, + addToTimelineFromTableCell, + closeTimeline, + investigateInTimelineFromFlyout, + investigateInTimelineFromTable, + openTimeline, +} from '../../../tasks/threat_intelligence/timeline'; +import { + closeFlyout, + openFlyout, + openFlyoutTakeAction, + waitForViewToBeLoaded, +} from '../../../tasks/threat_intelligence/common'; +import { + TIMELINE_AND_OR_BADGE, + TIMELINE_DATA_PROVIDERS_WRAPPER, + TIMELINE_DRAGGABLE_ITEM, +} from '../../../screens/threat_intelligence/timeline'; +import { login } from '../../../tasks/login'; + +const URL = '/app/security/threat_intelligence/indicators'; + +describe('Timeline', { tags: ['@ess'] }, () => { + before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_single' })); + + after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_single' })); + + beforeEach(() => { + login(); + visitWithTimeRange(URL); + waitForViewToBeLoaded(); + }); + + it('should verify add to timeline and investigate in timeline work from various places', () => { + cy.log('add to timeline when clicking in the barchart legend'); + + addToTimelineFromBarchartLegend(); + openTimeline(); + + cy.get(TIMELINE_DATA_PROVIDERS_WRAPPER).within(() => { + cy.get(TIMELINE_AND_OR_BADGE).should('be.visible').and('have.length', 3); + cy.get(TIMELINE_DRAGGABLE_ITEM).should('contain.text', 'threat.feed.name: "AbuseCH Malware"'); + }); + closeTimeline(); + + cy.log('add to timeline when clicking in an indicator flyout overview tab table row'); + + openFlyout(); + addToTimelineFromFlyoutOverviewTabTable(); + closeFlyout(); + openTimeline(); + + cy.get(TIMELINE_DATA_PROVIDERS_WRAPPER).within(() => { + cy.get(TIMELINE_AND_OR_BADGE).should('be.visible').and('have.length', 5); + cy.get(TIMELINE_DRAGGABLE_ITEM).should( + 'contain.text', + 'threat.indicator.file.hash.md5: "a7f997be65f62fdbe5ec076f0fe207f7"' + ); + }); + + closeTimeline(); + + cy.log( + 'add to timeline when clicking in an indicator flyout overview block (should not add a new entry)' + ); + + openFlyout(); + addToTimelineFromFlyoutOverviewTabBlock(); + closeFlyout(); + openTimeline(); + + cy.get(TIMELINE_DATA_PROVIDERS_WRAPPER).within(() => { + cy.get(TIMELINE_AND_OR_BADGE).should('be.visible').and('have.length', 5); + }); + + closeTimeline(); + + cy.log('add to timeline when clicking in an indicator table cell'); + + addToTimelineFromTableCell(); + openTimeline(); + + cy.get(TIMELINE_DATA_PROVIDERS_WRAPPER).within(() => { + cy.get(TIMELINE_AND_OR_BADGE).should('be.visible').and('have.length', 7); + cy.get(TIMELINE_DRAGGABLE_ITEM).should('contain.text', 'threat.indicator.type: "file"'); + }); + + closeTimeline(); + + cy.log('investigate in timeline when clicking in an indicator table action row'); + + investigateInTimelineFromTable(); + + cy.get(TIMELINE_DATA_PROVIDERS_WRAPPER).within(() => { + cy.get(TIMELINE_DRAGGABLE_ITEM).should('exist'); + cy.get(TIMELINE_AND_OR_BADGE).should('be.visible').and('have.length', 5); + }); + + closeTimeline(); + + cy.log('investigate in timeline when clicking in an indicator flyout'); + + openFlyout(); + openFlyoutTakeAction(); + investigateInTimelineFromFlyout(); + + cy.get(TIMELINE_DATA_PROVIDERS_WRAPPER).within(() => { + cy.get(TIMELINE_DRAGGABLE_ITEM).should('exist'); + cy.get(TIMELINE_AND_OR_BADGE).should('be.visible').and('have.length', 5); + }); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/blocklist.ts b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/blocklist.ts new file mode 100644 index 0000000000000..b9c79fc18340c --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/blocklist.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getDataTestSubjectSelector } from '../../helpers/common'; + +export const INDICATORS_TABLE_ADD_TO_BLOCK_LIST_BUTTON_ICON = getDataTestSubjectSelector( + 'tiIndicatorsTableAddToBlockListContextMenu' +); +export const FLYOUT_ADD_TO_BLOCK_LIST_ITEM = getDataTestSubjectSelector( + 'tiIndicatorFlyoutAddToBlockListContextMenu' +); +export const BLOCK_LIST_NAME = getDataTestSubjectSelector('blocklist-form-name-input'); +export const BLOCK_LIST_DESCRIPTION = getDataTestSubjectSelector( + 'blocklist-form-description-input' +); +export const BLOCK_LIST_ADD_BUTTON = `[class="eui-textTruncate"]`; +export const BLOCK_LIST_TOAST_LIST = getDataTestSubjectSelector('globalToastList'); +export const BLOCK_LIST_VALUE_INPUT = (iocId: string) => + getDataTestSubjectSelector(`blocklist-form-values-input-${iocId}`); +export const SAVED_BLOCK_LIST_NAME = getDataTestSubjectSelector('blocklistPage-card-header-title'); +export const SAVED_BLOCK_LIST_DESCRIPTION = getDataTestSubjectSelector( + 'blocklistPage-card-description' +); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/cases.ts b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/cases.ts new file mode 100644 index 0000000000000..e0d207f5aa46b --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/cases.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getDataTestSubjectSelector } from '../../helpers/common'; + +export const INDICATORS_TABLE_ADD_TO_NEW_CASE_BUTTON_ICON = getDataTestSubjectSelector( + 'tiIndicatorTableAddToNewCaseContextMenu' +); +export const INDICATORS_TABLE_ADD_TO_EXISTING_CASE_BUTTON_ICON = getDataTestSubjectSelector( + 'tiIndicatorTableAddToExistingCaseContextMenu' +); +export const FLYOUT_ADD_TO_EXISTING_CASE_ITEM = getDataTestSubjectSelector( + 'tiIndicatorFlyoutAddToExistingCaseContextMenu' +); +export const FLYOUT_ADD_TO_NEW_CASE_ITEM = getDataTestSubjectSelector( + 'tiIndicatorFlyoutAddToNewCaseContextMenu' +); +export const SELECT_EXISTING_CASE = `[class="eui-textTruncate"]`; +export const VIEW_CASE_TOASTER_LINK = getDataTestSubjectSelector('toaster-content-case-view-link'); +export const CASE_COMMENT_EXTERNAL_REFERENCE = getDataTestSubjectSelector( + 'comment-externalReference-indicator' +); +export const NEW_CASE_NAME_INPUT = getDataTestSubjectSelector( + 'input"][aria-describedby="caseTitle' +); +export const NEW_CASE_DESCRIPTION_INPUT = getDataTestSubjectSelector('euiMarkdownEditorTextArea'); +export const NEW_CASE_CREATE_BUTTON = getDataTestSubjectSelector('create-case-submit'); +export const SELECT_CASE_TABLE_ROW = `.euiTableRow`; +export const SELECT_EXISTING_CASES_MODAL = getDataTestSubjectSelector('all-cases-modal'); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/common.ts b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/common.ts new file mode 100644 index 0000000000000..c4e0a2913af8e --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/common.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getDataTestSubjectSelector } from '../../helpers/common'; + +export const UPDATE_STATUS = getDataTestSubjectSelector('updateStatus'); +export const SECURITY_SOLUTION_NAVBAR_MANAGE_ITEM = getDataTestSubjectSelector( + 'solutionSideNavItemLink-administration' +); +export const SECURITY_SOLUTION_NAVBAR_THREAT_INTELLIGENCE_ITEM = getDataTestSubjectSelector( + 'solutionSideNavItemLink-threat_intelligence' +); +export const MANAGE_NAVIGATION_ITEMS = `.euiLink`; diff --git a/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/empty_page.ts b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/empty_page.ts new file mode 100644 index 0000000000000..4db010fb19068 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/empty_page.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getDataTestSubjectSelector } from '../../helpers/common'; + +export const EMPTY_PAGE_BODY = getDataTestSubjectSelector('tiEmptyPage'); +export const EMPTY_PAGE_DOCS_LINK = getDataTestSubjectSelector('tiEmptyPageDocsLink'); +export const EMPTY_PAGE_INTEGRATIONS_LINK = getDataTestSubjectSelector( + 'tiEmptyPageIntegrationsPageLink' +); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/indicators.ts b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/indicators.ts new file mode 100644 index 0000000000000..04d4e93dfc85b --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/indicators.ts @@ -0,0 +1,130 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getDataTestSubjectSelector } from '../../helpers/common'; + +/* Indicators Table */ + +export const INDICATORS_TABLE = getDataTestSubjectSelector('tiIndicatorsTable'); +export const INDICATORS_TABLE_ROW_CELL = getDataTestSubjectSelector('dataGridRowCell'); +export const INDICATORS_TABLE_INDICATOR_NAME_COLUMN_HEADER = getDataTestSubjectSelector( + 'dataGridHeaderCell-threat.indicator.name' +); +export const INDICATORS_TABLE_INDICATOR_NAME_CELL = + '[data-gridcell-column-id="threat.indicator.name"]'; +export const INDICATORS_TABLE_INDICATOR_TYPE_COLUMN_HEADER = getDataTestSubjectSelector( + 'dataGridHeaderCell-threat.indicator.type' +); +export const INDICATORS_TABLE_INDICATOR_TYPE_CELL = + '[data-gridcell-column-id="threat.indicator.type"]'; +export const INDICATORS_TABLE_FEED_NAME_COLUMN_HEADER = getDataTestSubjectSelector( + 'dataGridHeaderCell-threat.feed.name' +); +export const INDICATORS_TABLE_FEED_NAME_CELL = '[data-gridcell-column-id="threat.feed.name"]'; +export const INDICATORS_TABLE_FIRST_SEEN_COLUMN_HEADER = getDataTestSubjectSelector( + 'dataGridHeaderCell-threat.indicator.first_seen' +); +export const INDICATORS_TABLE_INDICATOR_FIRST_SEEN_CELL = + '[data-gridcell-column-id="threat.indicator.first_seen"]'; +export const INDICATORS_TABLE_LAST_SEEN_COLUMN_HEADER = getDataTestSubjectSelector( + 'dataGridHeaderCell-threat.indicator.last_seen' +); +export const INDICATORS_TABLE_INDICATOR_LAST_SEEN_CELL = + '[data-gridcell-column-id="threat.indicator.last_seen"]'; +export const TABLE_CONTROLS = getDataTestSubjectSelector('dataGridControls'); +export const INDICATOR_TYPE_CELL = `[role="gridcell"][data-gridcell-column-id="threat.indicator.type"]`; +export const INDICATORS_TABLE_CELL_FILTER_IN_BUTTON = `${getDataTestSubjectSelector( + 'tiIndicatorsTableCellFilterInButton' +)} button`; +export const INDICATORS_TABLE_CELL_FILTER_OUT_BUTTON = `${getDataTestSubjectSelector( + 'tiIndicatorsTableCellFilterOutButton' +)} button`; +export const INDICATORS_TABLE_MORE_ACTION_BUTTON_ICON = getDataTestSubjectSelector( + 'tiIndicatorTableMoreActionsButton' +); + +/* Flyout */ + +export const TOGGLE_FLYOUT_BUTTON = getDataTestSubjectSelector('tiToggleIndicatorFlyoutButton'); +export const FLYOUT_CLOSE_BUTTON = getDataTestSubjectSelector('euiFlyoutCloseButton'); +export const FLYOUT_TITLE = getDataTestSubjectSelector('tiIndicatorFlyoutTitle'); +export const FLYOUT_TABS = getDataTestSubjectSelector('tiIndicatorFlyoutTabs'); +export const FLYOUT_TABLE = getDataTestSubjectSelector('tiFlyoutTable'); +export const FLYOUT_JSON = getDataTestSubjectSelector('tiFlyoutJsonCodeBlock'); +export const FLYOUT_OVERVIEW_TAB_TABLE_ROW_FILTER_IN_BUTTON = getDataTestSubjectSelector( + 'tiFlyoutOverviewTableRowFilterInButton' +); +export const FLYOUT_OVERVIEW_TAB_TABLE_ROW_FILTER_OUT_BUTTON = getDataTestSubjectSelector( + 'tiFlyoutOverviewTableRowFilterOutButton' +); +export const FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM = getDataTestSubjectSelector( + 'tiFlyoutOverviewHighLevelBlocksItem' +); +export const FLYOUT_OVERVIEW_TAB_BLOCKS_FILTER_IN_BUTTON = getDataTestSubjectSelector( + 'tiFlyoutOverviewHighLevelBlocksFilterInButton' +); +export const FLYOUT_OVERVIEW_TAB_BLOCKS_FILTER_OUT_BUTTON = getDataTestSubjectSelector( + 'tiFlyoutOverviewHighLevelBlocksFilterOutButton' +); +export const FLYOUT_OVERVIEW_HIGHLIGHTED_FIELDS_TABLE = getDataTestSubjectSelector( + 'tiFlyoutOverviewTableRow' +); +export const FLYOUT_TABLE_MORE_ACTIONS_BUTTON = `${getDataTestSubjectSelector( + 'tiFlyoutOverviewTableRowPopoverButton' +)} button`; +export const FLYOUT_BLOCK_MORE_ACTIONS_BUTTON = `${getDataTestSubjectSelector( + 'tiFlyoutOverviewHighLevelBlocksPopoverButton' +)} button`; +export const FLYOUT_TABLE_TAB_ROW_FILTER_IN_BUTTON = getDataTestSubjectSelector( + 'tiFlyoutTableFilterInButton' +); +export const FLYOUT_TABLE_TAB_ROW_FILTER_OUT_BUTTON = getDataTestSubjectSelector( + 'tiFlyoutTableFilterOutButton' +); + +export const FLYOUT_TAKE_ACTION_BUTTON = getDataTestSubjectSelector( + 'tiIndicatorFlyoutTakeActionButton' +); + +/* Field selector */ + +export const FIELD_SELECTOR = getDataTestSubjectSelector('tiIndicatorFieldSelectorDropdown'); +export const FIELD_SELECTOR_INPUT = getDataTestSubjectSelector('comboBoxSearchInput'); +export const FIELD_SELECTOR_TOGGLE_BUTTON = getDataTestSubjectSelector('comboBoxToggleListButton'); +export const FIELD_SELECTOR_LIST = getDataTestSubjectSelector( + 'comboBoxOptionsList tiIndicatorFieldSelectorDropdown-optionsList' +); + +/* Field browser */ + +export const FIELD_BROWSER = getDataTestSubjectSelector('show-field-browser'); +export const FIELD_BROWSER_MODAL = getDataTestSubjectSelector('fields-browser-container'); +export const FIELD_BROWSER_MODAL_CLOSE_BUTTON = getDataTestSubjectSelector('close'); + +/* Barchart */ + +export const BARCHART_WRAPPER = getDataTestSubjectSelector('tiBarchartWrapper'); +export const BARCHART_POPOVER_BUTTON = getDataTestSubjectSelector('tiBarchartPopoverButton'); +export const BARCHART_TIMELINE_BUTTON = getDataTestSubjectSelector('tiBarchartTimelineButton'); +export const BARCHART_FILTER_IN_BUTTON = getDataTestSubjectSelector('tiBarchartFilterInButton'); +export const BARCHART_FILTER_OUT_BUTTON = getDataTestSubjectSelector('tiBarchartFilterOutButton'); + +/* Miscellaneous */ + +export const DEFAULT_LAYOUT_TITLE = getDataTestSubjectSelector('tiDefaultPageLayoutTitle'); +export const BREADCRUMBS = getDataTestSubjectSelector('breadcrumbs'); +export const LEADING_BREADCRUMB = getDataTestSubjectSelector('breadcrumb first'); +export const ENDING_BREADCRUMB = getDataTestSubjectSelector('breadcrumb last'); +export const FILTERS_GLOBAL_CONTAINER = getDataTestSubjectSelector('filters-global-container'); +export const TIME_RANGE_PICKER = getDataTestSubjectSelector('superDatePickerToggleQuickMenuButton'); +export const QUERY_INPUT = getDataTestSubjectSelector('queryInput'); +export const EMPTY_STATE = getDataTestSubjectSelector('tiIndicatorsTableEmptyState'); +export const INSPECTOR_BUTTON = getDataTestSubjectSelector('tiIndicatorsGridInspect'); +export const INSPECTOR_PANEL = getDataTestSubjectSelector('inspectorPanel'); +export const ADD_INTEGRATIONS_BUTTON = getDataTestSubjectSelector('add-data'); +export const REFRESH_BUTTON = getDataTestSubjectSelector('querySubmitButton'); +export const ADDED_TO_TIMELINE_TOAST = getDataTestSubjectSelector('add-to-timeline-toast-success'); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/query_bar.ts b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/query_bar.ts new file mode 100644 index 0000000000000..ab04913c59182 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/query_bar.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getDataTestSubjectSelector } from '../../helpers/common'; + +export const QUERY_BAR = getDataTestSubjectSelector('globalDatePicker'); +export const QUERY_BAR_MENU = getDataTestSubjectSelector('showQueryBarMenu'); +export const QUERY_BAR_MENU_REMOVE_ALL_FILTERS_BUTTON = getDataTestSubjectSelector( + 'filter-sets-removeAllFilters' +); +export const KQL_FILTER = `[id="popoverFor_filter0"]`; diff --git a/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/timeline.ts b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/timeline.ts new file mode 100644 index 0000000000000..ed1adb33f5392 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/threat_intelligence/timeline.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getDataTestSubjectSelector } from '../../helpers/common'; + +export const INDICATORS_TABLE_INVESTIGATE_IN_TIMELINE_BUTTON_ICON = getDataTestSubjectSelector( + 'tiIndicatorTableInvestigateInTimelineButtonIcon' +); +export const UNTITLED_TIMELINE_BUTTON = getDataTestSubjectSelector( + `timeline-bottom-bar-title-button` +); +export const INDICATORS_TABLE_CELL_TIMELINE_BUTTON = `${getDataTestSubjectSelector( + 'tiIndicatorsTableCellTimelineButton' +)} button`; +export const TIMELINE_DATA_PROVIDERS_WRAPPER = getDataTestSubjectSelector(`dataProviders`); +export const TIMELINE_DRAGGABLE_ITEM = getDataTestSubjectSelector(`providerContainer`); +export const TIMELINE_AND_OR_BADGE = getDataTestSubjectSelector(`and-or-badge`); +export const CLOSE_TIMELINE_BTN = '[data-test-subj="timeline-modal-header-close-button"]'; +export const FLYOUT_OVERVIEW_TAB_TABLE_ROW_TIMELINE_BUTTON = getDataTestSubjectSelector( + 'tiFlyoutOverviewTableRowTimelineButton' +); +export const FLYOUT_OVERVIEW_TAB_BLOCKS_TIMELINE_BUTTON = getDataTestSubjectSelector( + 'tiFlyoutOverviewHighLevelBlocksTimelineButton' +); +export const FLYOUT_INVESTIGATE_IN_TIMELINE_ITEM = getDataTestSubjectSelector( + 'tiIndicatorFlyoutInvestigateInTimelineContextMenu' +); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/blocklist.ts b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/blocklist.ts new file mode 100644 index 0000000000000..7a56a7235f453 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/blocklist.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + BLOCK_LIST_ADD_BUTTON, + BLOCK_LIST_DESCRIPTION, + BLOCK_LIST_NAME, + BLOCK_LIST_TOAST_LIST, + FLYOUT_ADD_TO_BLOCK_LIST_ITEM, + INDICATORS_TABLE_ADD_TO_BLOCK_LIST_BUTTON_ICON, +} from '../../screens/threat_intelligence/blocklist'; + +/** + * Open the blocklist form from the indicators table more actions menu + */ +export const openAddToBlockListFlyoutFromTable = () => { + cy.get(INDICATORS_TABLE_ADD_TO_BLOCK_LIST_BUTTON_ICON).first().click(); +}; + +/** + * Open the blocklist form from the indicators flyout take action menu + */ +export const openAddToBlocklistFromFlyout = () => { + cy.get(FLYOUT_ADD_TO_BLOCK_LIST_ITEM).first().click(); +}; + +/** + * Fill out blocklist form with title and description + */ +export const fillBlocklistForm = (title: string, description: string) => { + cy.get(BLOCK_LIST_NAME).type(title); + cy.get(BLOCK_LIST_DESCRIPTION).type(description); + cy.get(BLOCK_LIST_ADD_BUTTON).last().click(); + + const text: string = `"${title}" has been added`; + cy.get(BLOCK_LIST_TOAST_LIST).should('exist').and('contain.text', text); +}; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/cases.ts b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/cases.ts new file mode 100644 index 0000000000000..8037b436ace15 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/cases.ts @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + FLYOUT_ADD_TO_EXISTING_CASE_ITEM, + FLYOUT_ADD_TO_NEW_CASE_ITEM, + INDICATORS_TABLE_ADD_TO_EXISTING_CASE_BUTTON_ICON, + INDICATORS_TABLE_ADD_TO_NEW_CASE_BUTTON_ICON, + NEW_CASE_CREATE_BUTTON, + NEW_CASE_DESCRIPTION_INPUT, + NEW_CASE_NAME_INPUT, + SELECT_CASE_TABLE_ROW, + SELECT_EXISTING_CASE, + SELECT_EXISTING_CASES_MODAL, + VIEW_CASE_TOASTER_LINK, +} from '../../screens/threat_intelligence/cases'; + +/** + * Open the add to new case flyout from the indicators table more actions menu + */ +export const openAddToNewCaseFlyoutFromTable = () => { + cy.get(INDICATORS_TABLE_ADD_TO_NEW_CASE_BUTTON_ICON).first().click(); +}; + +/** + * Open the add to existing case flyout from the indicators table more actions menu + */ +export const openAddToExistingCaseFlyoutFromTable = () => { + cy.get(INDICATORS_TABLE_ADD_TO_EXISTING_CASE_BUTTON_ICON).first().click(); +}; + +/** + * Open the new case flyout from the indicators flyout take action menu + */ +export const openAddToNewCaseFromFlyout = () => { + cy.get(FLYOUT_ADD_TO_NEW_CASE_ITEM).first().click(); +}; + +/** + * Open the new existing flyout from the indicators flyout take action menu + */ +export const openAddToExistingCaseFromFlyout = () => { + cy.get(FLYOUT_ADD_TO_EXISTING_CASE_ITEM).first().click(); +}; + +/** + * Create a new case from the Threat Intelligence page + */ +export const createNewCaseFromTI = () => { + cy.get(NEW_CASE_NAME_INPUT).type('case'); + cy.get(NEW_CASE_DESCRIPTION_INPUT).type('case description'); + cy.get(NEW_CASE_CREATE_BUTTON).click(); +}; + +/** + * Click on the toaster to navigate to case and verified created case + */ +export const navigateToCaseViaToaster = () => { + cy.get(VIEW_CASE_TOASTER_LINK).click(); +}; + +/** + * Select existing case from cases modal + */ +export const selectExistingCase = () => { + cy.get(SELECT_EXISTING_CASES_MODAL).within(() => { + cy.get(SELECT_CASE_TABLE_ROW).its('length').should('be.gte', 0); + cy.get(SELECT_EXISTING_CASE).should('exist').contains('Select').click(); + }); +}; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/common.ts b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/common.ts new file mode 100644 index 0000000000000..ab80cca467f04 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/common.ts @@ -0,0 +1,120 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { recurse } from 'cypress-recurse'; +import { + MANAGE_NAVIGATION_ITEMS, + SECURITY_SOLUTION_NAVBAR_MANAGE_ITEM, + SECURITY_SOLUTION_NAVBAR_THREAT_INTELLIGENCE_ITEM, + UPDATE_STATUS, +} from '../../screens/threat_intelligence/common'; +import { + BARCHART_POPOVER_BUTTON, + BARCHART_WRAPPER, + FLYOUT_CLOSE_BUTTON, + FLYOUT_TABS, + FLYOUT_TAKE_ACTION_BUTTON, + INDICATORS_TABLE, + INDICATORS_TABLE_MORE_ACTION_BUTTON_ICON, + TOGGLE_FLYOUT_BUTTON, +} from '../../screens/threat_intelligence/indicators'; + +/** + * Navigate to Blocklist screen via the Security Solution navbar and Manage menu item + */ +export const navigateToBlocklist = () => { + cy.get(SECURITY_SOLUTION_NAVBAR_MANAGE_ITEM).click(); + cy.get(MANAGE_NAVIGATION_ITEMS).contains('Blocklist').click(); +}; + +/** + * Navigate to Threat Intelligence screen via the Security Solution navbar + */ +export const navigateToThreatIntelligence = () => { + cy.get(SECURITY_SOLUTION_NAVBAR_THREAT_INTELLIGENCE_ITEM).click(); +}; + +/** + * Close the opened flyout + */ +export const closeFlyout = () => { + cy.get(FLYOUT_CLOSE_BUTTON).click(); +}; + +/** + * Open the indicators table more actions menu + */ +export const openIndicatorsTableMoreActions = (index = 0) => { + cy.get(INDICATORS_TABLE_MORE_ACTION_BUTTON_ICON).eq(index).click(); +}; + +/** + * Open the indicator flyout from indicators table + */ +export const openFlyout = (index = 0) => { + cy.get(TOGGLE_FLYOUT_BUTTON).eq(index).click(); +}; + +/** + * Open the take action button within indicator flyout + */ +export const openFlyoutTakeAction = () => { + cy.get(FLYOUT_TAKE_ACTION_BUTTON).first().click(); +}; + +/** + * Navigate to Table tab in indicators flyout + */ +export const navigateToFlyoutTableTab = () => { + cy.get(`${FLYOUT_TABS} button:nth-child(2)`).click(); +}; + +/** + * Navigate to Json tab in indicators flyout + */ +export const navigateToFlyoutJsonTab = () => { + cy.get(`${FLYOUT_TABS} button:nth-child(3)`).click(); +}; + +/** + * Wait for the view to be fully loaded + */ +export const waitForViewToBeLoaded = () => { + cy.get(INDICATORS_TABLE).should('exist'); + cy.get(BARCHART_WRAPPER).should('exist'); + waitForViewToBeUpdated(); +}; + +/** + * Wait for the view to be updated + */ +export const waitForViewToBeUpdated = () => { + cy.get(UPDATE_STATUS).should('contain.text', 'Updated'); +}; + +/** + * Open barchart 3-dot popover menu + */ +export const openBarchartPopoverMenu = () => { + cy.get(BARCHART_POPOVER_BUTTON).first().click(); +}; + +/** + * Performs click on element that require a mouse hover first + */ +export const clickAction = (propertySelector: string, rowIndex: number, actionSelector: string) => { + recurse( + () => { + cy.get(propertySelector).eq(rowIndex).realHover(); + return cy.get(actionSelector).first(); + }, + ($el) => $el.is(':visible') + ); + + // while { force: true } shouldn't really be used, here it allows us to get rid of flakiness on things that need an mouse hover + cy.get(actionSelector).first().click({ force: true }); +}; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/indicators.ts b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/indicators.ts new file mode 100644 index 0000000000000..f1d80fb079689 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/indicators.ts @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + ADD_INTEGRATIONS_BUTTON, + FIELD_BROWSER, + FIELD_BROWSER_MODAL, + FIELD_BROWSER_MODAL_CLOSE_BUTTON, + INDICATORS_TABLE, + INSPECTOR_BUTTON, + QUERY_INPUT, +} from '../../screens/threat_intelligence/indicators'; + +/** + * Navigate to specific page in indicators table + */ +export const navigateToIndicatorsTablePage = (index: number) => { + cy.get(`[data-test-subj="pagination-button-${index}"]`).click(); +}; + +/** + * Clears text in KQL bar + */ +export const enterQuery = (text: string) => { + cy.get(QUERY_INPUT).focus(); + cy.get(QUERY_INPUT).type(text); +}; + +/** + * Clears text in KQL bar + */ +export const clearQuery = () => { + cy.get(QUERY_INPUT).focus(); + cy.get(QUERY_INPUT).clear(); +}; + +/** + * Open field browser modal + */ +export const openFieldBrowser = () => { + cy.get(INDICATORS_TABLE).within(() => cy.get(FIELD_BROWSER).last().click()); +}; + +/** + * Close field browser modal + */ +export const closeFieldBrowser = () => + cy.get(FIELD_BROWSER_MODAL).within(() => cy.get(FIELD_BROWSER_MODAL_CLOSE_BUTTON).click()); + +/** + * Open inspector flyout + */ +export const openInspector = () => cy.get(INSPECTOR_BUTTON).last().click(); + +/** + * Navigate to integrations + */ +export const navigateToIntegrations = () => cy.get(ADD_INTEGRATIONS_BUTTON).click(); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/query_bar.ts b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/query_bar.ts new file mode 100644 index 0000000000000..0ccb2b5eb9780 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/query_bar.ts @@ -0,0 +1,115 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { clickAction, openBarchartPopoverMenu } from './common'; +import { + QUERY_BAR, + QUERY_BAR_MENU_REMOVE_ALL_FILTERS_BUTTON, + QUERY_BAR_MENU, +} from '../../screens/threat_intelligence/query_bar'; +import { + BARCHART_FILTER_IN_BUTTON, + BARCHART_FILTER_OUT_BUTTON, + INDICATORS_TABLE_CELL_FILTER_IN_BUTTON, + INDICATORS_TABLE_CELL_FILTER_OUT_BUTTON, + INDICATOR_TYPE_CELL, + FLYOUT_OVERVIEW_TAB_BLOCKS_FILTER_IN_BUTTON, + FLYOUT_OVERVIEW_TAB_BLOCKS_FILTER_OUT_BUTTON, + FLYOUT_OVERVIEW_TAB_TABLE_ROW_FILTER_IN_BUTTON, + FLYOUT_OVERVIEW_TAB_TABLE_ROW_FILTER_OUT_BUTTON, + FLYOUT_TABLE_TAB_ROW_FILTER_IN_BUTTON, + FLYOUT_TABLE_TAB_ROW_FILTER_OUT_BUTTON, + FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM, +} from '../../screens/threat_intelligence/indicators'; + +/** + * Filter in value by clicking on the menu item within barchart popover + */ +export const filterInFromBarChartLegend = () => { + openBarchartPopoverMenu(); + cy.get(BARCHART_FILTER_IN_BUTTON).click(); +}; + +/** + * Filter out value by clicking on the menu item within barchart popover + */ +export const filterOutFromBarChartLegend = () => { + openBarchartPopoverMenu(); + cy.get(BARCHART_FILTER_OUT_BUTTON).click(); +}; + +/** + * Filter in value by clicking on the menu item within an indicators table cell + */ +export const filterInFromTableCell = () => { + clickAction(INDICATOR_TYPE_CELL, 0, INDICATORS_TABLE_CELL_FILTER_IN_BUTTON); +}; + +/** + * Filter out value by clicking on the menu item within an indicators table cell + */ +export const filterOutFromTableCell = () => { + clickAction(INDICATOR_TYPE_CELL, 0, INDICATORS_TABLE_CELL_FILTER_OUT_BUTTON); +}; + +/** + * Clears all filters within KQL bar + */ +export const clearKQLBar = () => { + cy.get(QUERY_BAR).within(() => cy.get(QUERY_BAR_MENU).click()); + cy.get(QUERY_BAR_MENU_REMOVE_ALL_FILTERS_BUTTON).click(); +}; + +/** + * Filter in value from indicators flyout block item + */ +export const filterInFromFlyoutBlockItem = () => { + clickAction( + FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM, + 0, + FLYOUT_OVERVIEW_TAB_BLOCKS_FILTER_IN_BUTTON + ); +}; + +/** + * Filter out value from indicators flyout block item + */ +export const filterOutFromFlyoutBlockItem = () => { + clickAction( + FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM, + 0, + FLYOUT_OVERVIEW_TAB_BLOCKS_FILTER_OUT_BUTTON + ); +}; + +/** + * Filter in value from indicators flyout overview tab table + */ +export const filterInFromFlyoutOverviewTable = () => { + cy.get(FLYOUT_OVERVIEW_TAB_TABLE_ROW_FILTER_IN_BUTTON).first().click(); +}; + +/** + * Filter out value from indicators flyout overview tab table + */ +export const filterOutFromFlyoutOverviewTable = () => { + cy.get(FLYOUT_OVERVIEW_TAB_TABLE_ROW_FILTER_OUT_BUTTON).first().click(); +}; + +/** + * Filter in value from indicators flyout overview tab table + */ +export const filterInFromFlyoutTableTab = () => { + cy.get(FLYOUT_TABLE_TAB_ROW_FILTER_IN_BUTTON).first().click(); +}; + +/** + * Filter out value from indicators flyout overview tab table + */ +export const filterOutFromFlyoutTableTab = () => { + cy.get(FLYOUT_TABLE_TAB_ROW_FILTER_OUT_BUTTON).first().click(); +}; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/timeline.ts b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/timeline.ts new file mode 100644 index 0000000000000..be4e7e618b6eb --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/tasks/threat_intelligence/timeline.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { clickAction, openBarchartPopoverMenu } from './common'; +import { + CLOSE_TIMELINE_BTN, + FLYOUT_INVESTIGATE_IN_TIMELINE_ITEM, + FLYOUT_OVERVIEW_TAB_TABLE_ROW_TIMELINE_BUTTON, + INDICATORS_TABLE_CELL_TIMELINE_BUTTON, + INDICATORS_TABLE_INVESTIGATE_IN_TIMELINE_BUTTON_ICON, + UNTITLED_TIMELINE_BUTTON, +} from '../../screens/threat_intelligence/timeline'; +import { + BARCHART_TIMELINE_BUTTON, + FLYOUT_BLOCK_MORE_ACTIONS_BUTTON, + FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM, + FLYOUT_TABLE_MORE_ACTIONS_BUTTON, + INDICATOR_TYPE_CELL, +} from '../../screens/threat_intelligence/indicators'; + +/** + * Add data to timeline from barchart legend menu item + */ +export const addToTimelineFromBarchartLegend = () => { + openBarchartPopoverMenu(); + cy.get(BARCHART_TIMELINE_BUTTON).first().click(); +}; +/** + * Add data to timeline from indicators table cell menu + */ +export const addToTimelineFromTableCell = () => { + clickAction(INDICATOR_TYPE_CELL, 0, INDICATORS_TABLE_CELL_TIMELINE_BUTTON); +}; + +/** + * Open untitled timeline from button in footer + */ +export const openTimeline = () => { + cy.get(UNTITLED_TIMELINE_BUTTON).first().click(); +}; + +/** + * Close flyout button in top right corner + */ +export const closeTimeline = () => { + cy.get(CLOSE_TIMELINE_BTN).should('be.visible').click(); +}; + +/** + * Add data to timeline from flyout overview tab table + */ +export const addToTimelineFromFlyoutOverviewTabTable = () => { + cy.get(FLYOUT_TABLE_MORE_ACTIONS_BUTTON).first().click(); + cy.get(FLYOUT_OVERVIEW_TAB_TABLE_ROW_TIMELINE_BUTTON).first().click(); +}; + +/** + * Add data to timeline from flyout overview tab block + */ +export const addToTimelineFromFlyoutOverviewTabBlock = () => { + clickAction(FLYOUT_OVERVIEW_HIGH_LEVEL_BLOCK_ITEM, 0, FLYOUT_BLOCK_MORE_ACTIONS_BUTTON); +}; + +/** + * Investigate data to timeline from indicators table row + */ +export const investigateInTimelineFromTable = () => { + cy.get(INDICATORS_TABLE_INVESTIGATE_IN_TIMELINE_BUTTON_ICON).first().click(); +}; + +/** + * Investigate data to timeline from flyout take action button + */ +export const investigateInTimelineFromFlyout = () => { + cy.get(FLYOUT_INVESTIGATE_IN_TIMELINE_ITEM).first().click(); +}; diff --git a/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/data.json b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/data.json new file mode 100644 index 0000000000000..664ef1b35417f --- /dev/null +++ b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/data.json @@ -0,0 +1,1809 @@ +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "RP0HlUQkToBRTlZeGAItbyWMx1E=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.677Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.677Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "a7f997be65f62fdbe5ec076f0fe207f7", + "d86e656455f985357df3063dff6637f7f3b95bb27d1769a6b88c7adecaf7763f", + "6144:Eiu4rKJqctSMeWml5SBm5bT6rhnMqvTRrbx50Elf03jhBtGuYEs0gw4N1c5b8Onl:vuI6QWm+6bTShnMIRUEKThB1sn5hOnl", + "T15194232F21ACD2E5F4379415A97680C8DE041E08695B5F2AD73B237AC5EF2F682C57" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha256": "sha256", + "md5": "md5", + "sha1": "sha1", + "sha224": "sha224", + "sha3-224": "sha3-224", + "sha3-256": "sha3-256", + "sha384": "sha384", + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 441803, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:44.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "C4ObxkoTZzcjmk1jFwGlRadzMnA=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.678Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/d3e2cf87eabf84ef929aaf8dad1431b3387f5a26de8ffb7a0c3c2a13f973c0ab/detection/f-d3e2cf8", + "percent": 41.94, + "result": "26 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "cce28cbfb3cb7ecdae0f5969476f3f09", + "d3e2cf87eabf84ef929aaf8dad1431b3387f5a26de8ffb7a0c3c2a13f973c0ab", + "24576:WEnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7q:WEnrkRDDzCFeGvMTM2/gY9vxv7o7q", + "T1F95533F3C00FA54679E42E57649F8B2996112DFC8A9C412ECA743397E4D782C869BC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "md5", + "sha1": "sha1", + "sha224": "sha224", + "sha3-224": "sha3-224", + "sha3-256": "sha3-256", + "sha384": "sha384", + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 1361342, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:40.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "5hGL0ETQsk+B0L7ryVcQVwsYhOk=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.678Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/4880faee7a174bf9701c7356137b2fed8681525527deb2d1c8a1c7a6d0e7eaaa/detection/f-4880fae", + "percent": 39.34, + "result": "24 / 61" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "261b83754435cc988d8d37abe8b97f4c", + "4880faee7a174bf9701c7356137b2fed8681525527deb2d1c8a1c7a6d0e7eaaa", + "24576:O4nrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7V:O4nrkRDDzCFeGvMTM2/gY9vxv7o7V", + "T19D5533F3C00FA51A79D03A4668AF875D95112DAC8A9C412ECA74339BD9C7C2CD697C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha1": "sha1", + "sha224": "sha224", + "sha3-224": "sha3-224", + "sha3-256": "sha3-256", + "sha384": "sha384", + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 1361341, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:39.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "qq3AKvjp1c/FBtEoh10Vt+PsT14=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.678Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "354f8e74f6a070127fe6c5247c99b937", + "bcc53ec3c58f46b331550725ac1ea79070368c672584861027f13f08ff18402e", + "12:6ia5Wl1LCHBF5CRyPFJ+QIGZL5sR6Tl/WQPKlQHl2+ew5+qzL35BE3t5:i5WK4EFJzN5d14+ewN9C3n", + "T164017540AD6A9BF525086CF97D86390884AB61E850ABD19CFE4DDB44153E15083520" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha224": "sha224", + "sha3-224": "sha3-224", + "sha3-256": "sha3-256", + "sha384": "sha384", + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 782, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:37.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "CNCiNUxTNHF5qyRWclltlrnxwhk=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.678Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/cce0876cfaf187e222cdfba3469ed75da67e2c43067750e36ac0bb3299964f6d/detection/f-cce0876", + "percent": 41.94, + "result": "26 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "ef633ad733a6c18a008150c34e708b2a", + "cce0876cfaf187e222cdfba3469ed75da67e2c43067750e36ac0bb3299964f6d", + "24576:dkiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbZ:OiaxnrkRDDzCFeGvMTM2/gY9vxv7o7d", + "T1675533F7C00FA50675D06943689F8B6E96112EAC8B9C412DCA343397E9C792C92DBC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha3-224": "sha3-224", + "sha3-256": "sha3-256", + "sha384": "sha384", + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 1361341, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:35.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "Rk80kuvgnMegEB+1jhGlgLO5h5Y=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/377d56f1683ee27d9147bc2bb2c417926686abfee7705de96a032f982c9f6364/detection/f-377d56f", + "percent": 42.62, + "result": "26 / 61" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "24dda97b79673d8676c3cfc3c83e694c", + "377d56f1683ee27d9147bc2bb2c417926686abfee7705de96a032f982c9f6364", + "24576:CRnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7o:CnrkRDDzCFeGvMTM2/gY9vxv7o7o", + "T1C95533F3C00FA90679D06A57A09F872E96112DBC8B9C512ECA703357E5D7C2C9697C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha3-256": "sha3-256", + "sha384": "sha384", + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 1361346, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:30.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "oF2/6vlWcu7040SDtfZuBX4sXEo=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "375677c2333221471a9dbabb4cf100f8", + "7b8f4047dd83e8a9e9642a9ef1af05756ad29a15e45a2b7de0a1959976def4f6", + "48:Mfh7te/6TxaYWLcv2CfnQE2HVt51fo/Gjw:SJe/6Txa19CfnB2HVtTgD", + "T15731FAD01EDCA96960E677BB0635B53748ED382D4C031835F652CD7244B199C10293" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha384": "sha384", + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 1666, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:30.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "mgUWSsWrUtqPZFUpBNhFU75TKyc=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "f086951b963255abf639d261ddc17d69", + "3c2a0cd048eccf7a3d61455db095d5900880fec9a06a3c8698a6f4ac0e30f9ea", + "12288:Q4n4CkVBDDYcoY7UDn8QUoMlZ6+syJsTXy8VAz6VerIFyZGvMPPQ457kWjfa2mQr:Q4nrkvPLK8Qtaw+sy0AdrIFeGvoPTM2z", + "T1ABF433E7C20ED45DB0A42A03FDB3C65E8A241CA41D0C412F96353282DDDBD2CA697C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 767547, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:30.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "auKnqhqoLKmnMsohKHQMvqvLSK4=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "c44b945dba0433b8c1ed8467ed109128", + "56e1313ad26fdf3f105959c76eb9b6ec1653285a2d2f900b6e8ca82d100ae666", + "12288:luVn4CkVBDDYcoY7UDn8QUoMlZ6+syJsTXy8VAz6VerIFyZGvMPPQv:luVnrkvPLK8Qtaw+sy0AdrIFeGvoPU", + "T1D9A423FBC40EA157F4D02E8A65EBCA9C053C2DAC0C594D249235308ACED953DBD96E" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 475136, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:29.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "Llc8xZPNZbUM6j5sAHAFCeyu+po=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/e1d9c3d1ec47342b333cb3d82f28167585377e1c7ff4f5743ae085ba4e4f5cf7/detection/f-e1d9c3d", + "percent": 32.69, + "result": "17 / 52" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "89c639a74da0b66661bcda4c632fc4b5", + "e1d9c3d1ec47342b333cb3d82f28167585377e1c7ff4f5743ae085ba4e4f5cf7", + "24576:TkiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbe:YiaxnrkRDDzCFeGvMTM2/gY9vxv7o7q", + "T18C5533F7C00FA50675D46947689F8B6E96112EAC8B9C412ECA343357E9C782C92DBC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 1361347, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:23.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "VbMLdKEoQI/Xli/LgjmvMOlGYZY=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "e8f9dc1ebc9c3836e630ea890f49062c", + "99b0048497cf99ac223f56fdc57e9c9da368474bfd3249333d20245617584a36", + "12288:ZrNSkSCzn4CawkkDYcjt2PwnnbziBHZy+syptTHysl8Zz6xW3rIBGrS35jhQgZUb:lNnSCznrawnPjt2PibziFI+syIZoSrI8", + "T1EAD423FBAD4FE145F4B63D56ACAC8B8C61147AF5070E8A20D82DB448454F66C29E7C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 607710, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:21.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "/6DDSx9lUsUoJUF8QSZiQ/oMvmQ=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "96dd2f36a091a5ebb2fbc8a4521165ee", + "1e60c0e0b23ba3767698116522460ee55cc44c3f4dc9d295bf572bedd5ac0f65", + "1536:IN9xqKCppztoghURX5Ll1bYL1T+6XpcT9YpDFa+9:IN9xqfftLhoJbYE6XOT9R+9", + "T11D23D1FB616D7CF1772BEED66E013B1A97BEC1C6052D1118AA5D8B9E2444C284FD0B" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 49326, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:20.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "d+KIrgaxYVhvb/sqhlb5AYOHQDo=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "b339f90894265cb97515daa470af07cf", + "d0bd2eb817f80077a36b975511e8229822e8c34977a6fcdf890c996e7ef824e7", + "96:CeAh/kdPbox9Xvn9jx77DWtozT1oImYAwjrTXTd4JBR4pxG+WP:CnMbox9/nXWtLImYAUTR4jRckP", + "T197916CFC910373F4642EF274EA4BEA722BE6E4F415EC1A43496A5250E23F2D1B2037" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 4240, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:20.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "bAPvrGKWj/ess46s3KwFqAJ8+tc=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "a977be9538079d04662cb855472280f0", + "b169429bc31d82019f106c1a4888bf0cb09cdd67223ab8ee11ad1cb22e5b33d8", + "48:JY1vl8uN9y+xhS/frD/yPkrceiEJ77ejwqu3GHmcjBMInNeAVOp4P1Y:JA8CyxvJiE17gwqcGGGmInNeAVOA1Y", + "T1E0514CE79E74FD4AD8E01B49383529032FD325EE050A405D7D77312856722B5D051B" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 2762, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:18.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "uM8A5Yr/gMJ4tPHb9XIABYC/mRk=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "ff8378ca6de4242367a38c559481b269", + "825c15ab9faf964fb5a904953dd2d37abbce9e140dbd4cc22e0cd37a3ea76ae4", + "24:d8sxTEAby02+ygbBSND09H6j/NljGCBm5fLrkHsu4MHlerNhBzGCt3Th9Nwn:dvT80FKDqHI/2P5fLrgJler1zGCt9Nw", + "T18F31D894CBF5B99B65302DBC0FA5AD508C641E5C3ABCC8348F6A905A69994D3814CD" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 1665, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:16.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "YPTTIf8ctfvqnTo2W9OpoJD6n9Q=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "5dcb49bc49109e90f5c6b8e5597b80ca", + "51bbdb79175fe1a9bb2ba6055f80bdd35d8486781881fef5cfe8d28b86c5870d", + "48:dyin3B3LH5XfXaImL3esbl9HglyiqRuBrTgq:d53B9XfX8L1vgnqRW0q", + "T15431D836CB901B7FD26B160350A2A96527AF8C5B5B9F4C292816FC0AC354C634FA66" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 1664, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:09.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "UJBUWYV6AtCidXCm1NBsWtAYWZI=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "72ec96611a0b5f493854a5dcdd1aa528", + "c5df0748e8b023886b12647c050a826a7b43374cdc9112124e55ed46a4f926d2", + "24:991g7c6kzftBeaOY3+1Zc0Iq3aGG9wpe8kZyLq39C7U:99evkbNv3iYXd5ILOCg", + "T1CA114437127EC8A9D93004342166AE26D1009941146099CBAB575D368C877C32F42B" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 909, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:07.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "e1yn2nAO9PlprMEaPBhcjgg9lwE=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "9707127fb08e7956151dda4f502cf707", + "71f5f598623fefd1d6bad450da4cb736b3b2cfb9a62c8d867da8516641df73b3", + "12288:gwnSE7CkFiurKQXYFZlIo1aMrIw8ZoOajbxYE/:gqSORnXmHsbl6V3L/", + "T1ECB4233A9AECEAE05B6F8DD075B9B641B05E32E145F9533CC869C0AF87170E602857" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "vhash": "vhash" + }, + "pe": { + }, + "size": 507323, + "type": "zip" + }, + "first_seen": "2022-06-02T13:28:27.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "e74l+UPbo6o0DotQc8Roo3OVcJQ=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/38262d6bbeb72bfe5a3baf36250ee80a6824c4d6e1079e4cfdc6869c065693df/detection/f-38262d6", + "percent": 27.42, + "result": "17 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "f1650fc9608337179d7424c87f1ee737", + "38262d6bbeb72bfe5a3baf36250ee80a6824c4d6e1079e4cfdc6869c065693df", + "24576:1EnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7P:1EnrkRDDzCFeGvMTM2/gY9vxv7o7P", + "T11F5533F3C00FA54679E42E57649F8B2996112DFC8A9C412ECA743397E4D782C869BC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": {}, + "pe": { + }, + "size": 1361344, + "type": "zip" + }, + "first_seen": "2022-06-02T13:27:51.000Z", + "type": "file" + } + } + } + } +} + + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "XIDmYG67Bs5j3njl7xYKAyH1emM=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/cfb001ca42b62b1ade9220f44bd6479aff6eeaaa108aa98a4b0169ea1dec8e86/detection/f-cfb001c", + "percent": 38.1, + "result": "24 / 63" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "970e0ba1981035359600b63b43b10bc0", + "cfb001ca42b62b1ade9220f44bd6479aff6eeaaa108aa98a4b0169ea1dec8e86", + "24576:MRnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7P:cnrkRDDzCFeGvMTM2/gY9vxv7o7P", + "T1025533F3C00FA90679D07A57A09F872E96112DB88B9C512ECA703357E5D7C2C9697C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "first_seen": "2022-06-02T13:27:50.000Z", + "type": "file" + } + } + } + } +} + + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "TxxcH4E0aWG8D8rloVjU3cK+sy0=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.685Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/f1121e7b8419f84a7c8ad91acd9d4d804d78bb10a899cee1ab4f0b349097eb94/detection/f-f1121e7", + "percent": 43.55, + "result": "27 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.685Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "d04039c9b1f2d6f13a17962c6131e573", + "f1121e7b8419f84a7c8ad91acd9d4d804d78bb10a899cee1ab4f0b349097eb94", + "24576:ikiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbS:HiaxnrkRDDzCFeGvMTM2/gY9vxv7o7m", + "T17D5533F7C00FA50679D46947689F8B6E96112EAC8B9C412ECA343357E5C782C92DBC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": {} + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "0j+BQ8HFrDQYe5kbXMc9ANSCjBY=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.685Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/a2b6f823f7ce67a0b5ac0a0561139693e526f6c5b4a2ba05d20fd9e467e9dacc/detection/f-a2b6f82", + "percent": 41.67, + "result": "25 / 60" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.685Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "2209a62733aa8fd802e60508ecce900a", + "a2b6f823f7ce67a0b5ac0a0561139693e526f6c5b4a2ba05d20fd9e467e9dacc", + "24576:hUQ2zgDnrawnPjt2PibziFI+syIZoSrI0r+xGgWdVnG45U3D9WHqyraYvb9mRhpt:CQm8nrawTGDIZoB0r+xkdciU5WHqgUjt", + "T19D5533FB4C4B9556B9F4AA43A88D8B3C9000E5EC574CA670D908C9FEE44B7B850DB8" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ] + } + } +} diff --git a/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/mappings.json b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/mappings.json new file mode 100644 index 0000000000000..e0837a100a9a0 --- /dev/null +++ b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_invalid/mappings.json @@ -0,0 +1,1599 @@ +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.malware-*" + ], + "name": "logs-ti_abusech.malware", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "malware": { + "properties": { + "signature": { + "ignore_above": 1024, + "type": "keyword" + }, + "virustotal": { + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "percent": { + "type": "float" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.malware" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH Malware" + } + } + }, + "indicator": { + "properties": { + "file": { + "properties": { + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "imphash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "first_seen": { + "type": "date" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.malware-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.file.type", + "threat.indicator.file.hash.md5", + "threat.indicator.file.hash.sha256", + "threat.indicator.file.hash.ssdeep", + "threat.indicator.file.hash.tlsh", + "threat.indicator.file.pe.imphash", + "threat.indicator.provider", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "related.hash", + "abusech.malware.signature", + "abusech.malware.virustotal.result", + "abusech.malware.virustotal.link" + ] + } + } + } + } + } + } +} + +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.malwarebazaar-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.malwarebazaar-*" + ], + "name": "logs-ti_abusech.malwarebazaar", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "malwarebazaar": { + "properties": { + "anonymous": { + "type": "long" + }, + "code_sign": { + "ignore_above": 1024, + "type": "keyword" + }, + "intelligence": { + "properties": { + "downloads": { + "type": "long" + }, + "mail": { + "properties": { + "Generic": { + "ignore_above": 1024, + "type": "keyword" + }, + "IT": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "uploads": { + "type": "long" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.malwarebazaar" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH MalwareBazaar" + } + } + }, + "indicator": { + "properties": { + "file": { + "properties": { + "elf": { + "properties": { + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "imphash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "last_seen": { + "type": "date" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "software": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.malwarebazaar-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.file.type", + "threat.indicator.file.name", + "threat.indicator.file.extension", + "threat.indicator.file.hash.sha1", + "threat.indicator.file.hash.md5", + "threat.indicator.file.hash.sha256", + "threat.indicator.file.hash.ssdeep", + "threat.indicator.file.hash.sha384", + "threat.indicator.file.hash.tlsh", + "threat.indicator.file.mime_type", + "threat.indicator.file.pe.imphash", + "threat.indicator.file.elf.telfhash", + "threat.indicator.file.x509.subject.common_name", + "threat.indicator.file.x509.issuer.common_name", + "threat.indicator.file.x509.public_key_algorithm", + "threat.indicator.file.x509.serial_number", + "threat.indicator.provider", + "threat.indicator.geo.country_iso_code", + "threat.software.alias", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "related.hash", + "abusech.malwarebazaar.tags", + "abusech.malwarebazaar.intelligence.mail.Generic", + "abusech.malwarebazaar.intelligence.mail.IT", + "abusech.malwarebazaar.code_sign" + ] + } + } + } + } + } + } +} + +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.url-*" + ], + "name": "logs-ti_abusech.url", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "url": { + "properties": { + "blacklists": { + "properties": { + "spamhaus_dbl": { + "ignore_above": 1024, + "type": "keyword" + }, + "surbl": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "larted": { + "type": "boolean" + }, + "reporter": { + "ignore_above": 1024, + "type": "keyword" + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "ignore_above": 1024, + "type": "keyword" + }, + "url_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "urlhaus_reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.url" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH URL" + } + } + }, + "indicator": { + "properties": { + "first_seen": { + "type": "date" + }, + "ip": { + "type": "ip" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "path": { + "ignore_above": 1024, + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.url-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.reference", + "threat.indicator.url.domain", + "threat.indicator.url.full", + "threat.indicator.url.extension", + "threat.indicator.url.original", + "threat.indicator.url.path", + "threat.indicator.url.scheme", + "threat.indicator.url.query", + "threat.indicator.provider", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "abusech.url.id", + "abusech.url.urlhaus_reference", + "abusech.url.url_status", + "abusech.url.threat", + "abusech.url.reporter", + "abusech.url.tags", + "abusech.url.blacklists.spamhaus_dbl", + "abusech.url.blacklists.surbl" + ] + } + } + } + } + } + } +} diff --git a/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_multiple/data.json b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_multiple/data.json new file mode 100644 index 0000000000000..cb46bec034cb8 --- /dev/null +++ b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_multiple/data.json @@ -0,0 +1,2567 @@ +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "RP0HlUQkToBRTlZeGAItbyWMx1E=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T11:29:47.677Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T11:29:47.677Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T11:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "a7f997be65f62fdbe5ec076f0fe207f7", + "d86e656455f985357df3063dff6637f7f3b95bb27d1769a6b88c7adecaf7763f", + "6144:Eiu4rKJqctSMeWml5SBm5bT6rhnMqvTRrbx50Elf03jhBtGuYEs0gw4N1c5b8Onl:vuI6QWm+6bTShnMIRUEKThB1sn5hOnl", + "T15194232F21ACD2E5F4379415A97680C8DE041E08695B5F2AD73B237AC5EF2F682C57" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "a7f997be65f62fdbe5ec076f0fe207f7", + "sha256": "d86e656455f985357df3063dff6637f7f3b95bb27d1769a6b88c7adecaf7763f", + "ssdeep": "6144:Eiu4rKJqctSMeWml5SBm5bT6rhnMqvTRrbx50Elf03jhBtGuYEs0gw4N1c5b8Onl:vuI6QWm+6bTShnMIRUEKThB1sn5hOnl", + "tlsh": "T15194232F21ACD2E5F4379415A97680C8DE041E08695B5F2AD73B237AC5EF2F682C57" + }, + "pe": { + }, + "size": 441803, + "type": "zip" + }, + "first_seen": "2022-06-02T11:29:44.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "C4ObxkoTZzcjmk1jFwGlRadzMnA=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T12:29:47.678Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/d3e2cf87eabf84ef929aaf8dad1431b3387f5a26de8ffb7a0c3c2a13f973c0ab/detection/f-d3e2cf8", + "percent": 41.94, + "result": "26 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T12:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T12:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "cce28cbfb3cb7ecdae0f5969476f3f09", + "d3e2cf87eabf84ef929aaf8dad1431b3387f5a26de8ffb7a0c3c2a13f973c0ab", + "24576:WEnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7q:WEnrkRDDzCFeGvMTM2/gY9vxv7o7q", + "T1F95533F3C00FA54679E42E57649F8B2996112DFC8A9C412ECA743397E4D782C869BC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "cce28cbfb3cb7ecdae0f5969476f3f09", + "sha256": "d3e2cf87eabf84ef929aaf8dad1431b3387f5a26de8ffb7a0c3c2a13f973c0ab", + "ssdeep": "24576:WEnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7q:WEnrkRDDzCFeGvMTM2/gY9vxv7o7q", + "tlsh": "T1F95533F3C00FA54679E42E57649F8B2996112DFC8A9C412ECA743397E4D782C869BC" + }, + "pe": { + }, + "size": 1361342, + "type": "zip" + }, + "first_seen": "2022-06-02T12:29:40.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "5hGL0ETQsk+B0L7ryVcQVwsYhOk=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.678Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/4880faee7a174bf9701c7356137b2fed8681525527deb2d1c8a1c7a6d0e7eaaa/detection/f-4880fae", + "percent": 39.34, + "result": "24 / 61" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "261b83754435cc988d8d37abe8b97f4c", + "4880faee7a174bf9701c7356137b2fed8681525527deb2d1c8a1c7a6d0e7eaaa", + "24576:O4nrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7V:O4nrkRDDzCFeGvMTM2/gY9vxv7o7V", + "T19D5533F3C00FA51A79D03A4668AF875D95112DAC8A9C412ECA74339BD9C7C2CD697C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "261b83754435cc988d8d37abe8b97f4c", + "sha256": "4880faee7a174bf9701c7356137b2fed8681525527deb2d1c8a1c7a6d0e7eaaa", + "ssdeep": "24576:O4nrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7V:O4nrkRDDzCFeGvMTM2/gY9vxv7o7V", + "tlsh": "T19D5533F3C00FA51A79D03A4668AF875D95112DAC8A9C412ECA74339BD9C7C2CD697C" + }, + "pe": { + }, + "size": 1361341, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:39.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "qq3AKvjp1c/FBtEoh10Vt+PsT14=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.678Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "354f8e74f6a070127fe6c5247c99b937", + "bcc53ec3c58f46b331550725ac1ea79070368c672584861027f13f08ff18402e", + "12:6ia5Wl1LCHBF5CRyPFJ+QIGZL5sR6Tl/WQPKlQHl2+ew5+qzL35BE3t5:i5WK4EFJzN5d14+ewN9C3n", + "T164017540AD6A9BF525086CF97D86390884AB61E850ABD19CFE4DDB44153E15083520" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "354f8e74f6a070127fe6c5247c99b937", + "sha256": "bcc53ec3c58f46b331550725ac1ea79070368c672584861027f13f08ff18402e", + "ssdeep": "12:6ia5Wl1LCHBF5CRyPFJ+QIGZL5sR6Tl/WQPKlQHl2+ew5+qzL35BE3t5:i5WK4EFJzN5d14+ewN9C3n", + "tlsh": "T164017540AD6A9BF525086CF97D86390884AB61E850ABD19CFE4DDB44153E15083520" + }, + "pe": { + }, + "size": 782, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:37.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "CNCiNUxTNHF5qyRWclltlrnxwhk=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.678Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/cce0876cfaf187e222cdfba3469ed75da67e2c43067750e36ac0bb3299964f6d/detection/f-cce0876", + "percent": 41.94, + "result": "26 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "ef633ad733a6c18a008150c34e708b2a", + "cce0876cfaf187e222cdfba3469ed75da67e2c43067750e36ac0bb3299964f6d", + "24576:dkiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbZ:OiaxnrkRDDzCFeGvMTM2/gY9vxv7o7d", + "T1675533F7C00FA50675D06943689F8B6E96112EAC8B9C412DCA343397E9C792C92DBC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "ef633ad733a6c18a008150c34e708b2a", + "sha256": "cce0876cfaf187e222cdfba3469ed75da67e2c43067750e36ac0bb3299964f6d", + "ssdeep": "24576:dkiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbZ:OiaxnrkRDDzCFeGvMTM2/gY9vxv7o7d", + "tlsh": "T1675533F7C00FA50675D06943689F8B6E96112EAC8B9C412DCA343397E9C792C92DBC" + }, + "pe": { + }, + "size": 1361341, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:35.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "Rk80kuvgnMegEB+1jhGlgLO5h5Y=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/377d56f1683ee27d9147bc2bb2c417926686abfee7705de96a032f982c9f6364/detection/f-377d56f", + "percent": 42.62, + "result": "26 / 61" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "24dda97b79673d8676c3cfc3c83e694c", + "377d56f1683ee27d9147bc2bb2c417926686abfee7705de96a032f982c9f6364", + "24576:CRnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7o:CnrkRDDzCFeGvMTM2/gY9vxv7o7o", + "T1C95533F3C00FA90679D06A57A09F872E96112DBC8B9C512ECA703357E5D7C2C9697C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "24dda97b79673d8676c3cfc3c83e694c", + "sha256": "377d56f1683ee27d9147bc2bb2c417926686abfee7705de96a032f982c9f6364", + "ssdeep": "24576:CRnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7o:CnrkRDDzCFeGvMTM2/gY9vxv7o7o", + "tlsh": "T1C95533F3C00FA90679D06A57A09F872E96112DBC8B9C512ECA703357E5D7C2C9697C" + }, + "pe": { + }, + "size": 1361346, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:30.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "oF2/6vlWcu7040SDtfZuBX4sXEo=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "375677c2333221471a9dbabb4cf100f8", + "7b8f4047dd83e8a9e9642a9ef1af05756ad29a15e45a2b7de0a1959976def4f6", + "48:Mfh7te/6TxaYWLcv2CfnQE2HVt51fo/Gjw:SJe/6Txa19CfnB2HVtTgD", + "T15731FAD01EDCA96960E677BB0635B53748ED382D4C031835F652CD7244B199C10293" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "375677c2333221471a9dbabb4cf100f8", + "sha256": "7b8f4047dd83e8a9e9642a9ef1af05756ad29a15e45a2b7de0a1959976def4f6", + "ssdeep": "48:Mfh7te/6TxaYWLcv2CfnQE2HVt51fo/Gjw:SJe/6Txa19CfnB2HVtTgD", + "tlsh": "T15731FAD01EDCA96960E677BB0635B53748ED382D4C031835F652CD7244B199C10293" + }, + "pe": { + }, + "size": 1666, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:30.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "mgUWSsWrUtqPZFUpBNhFU75TKyc=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "f086951b963255abf639d261ddc17d69", + "3c2a0cd048eccf7a3d61455db095d5900880fec9a06a3c8698a6f4ac0e30f9ea", + "12288:Q4n4CkVBDDYcoY7UDn8QUoMlZ6+syJsTXy8VAz6VerIFyZGvMPPQ457kWjfa2mQr:Q4nrkvPLK8Qtaw+sy0AdrIFeGvoPTM2z", + "T1ABF433E7C20ED45DB0A42A03FDB3C65E8A241CA41D0C412F96353282DDDBD2CA697C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "f086951b963255abf639d261ddc17d69", + "sha256": "3c2a0cd048eccf7a3d61455db095d5900880fec9a06a3c8698a6f4ac0e30f9ea", + "ssdeep": "12288:Q4n4CkVBDDYcoY7UDn8QUoMlZ6+syJsTXy8VAz6VerIFyZGvMPPQ457kWjfa2mQr:Q4nrkvPLK8Qtaw+sy0AdrIFeGvoPTM2z", + "tlsh": "T1ABF433E7C20ED45DB0A42A03FDB3C65E8A241CA41D0C412F96353282DDDBD2CA697C" + }, + "pe": { + }, + "size": 767547, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:30.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "auKnqhqoLKmnMsohKHQMvqvLSK4=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "c44b945dba0433b8c1ed8467ed109128", + "56e1313ad26fdf3f105959c76eb9b6ec1653285a2d2f900b6e8ca82d100ae666", + "12288:luVn4CkVBDDYcoY7UDn8QUoMlZ6+syJsTXy8VAz6VerIFyZGvMPPQv:luVnrkvPLK8Qtaw+sy0AdrIFeGvoPU", + "T1D9A423FBC40EA157F4D02E8A65EBCA9C053C2DAC0C594D249235308ACED953DBD96E" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "c44b945dba0433b8c1ed8467ed109128", + "sha256": "56e1313ad26fdf3f105959c76eb9b6ec1653285a2d2f900b6e8ca82d100ae666", + "ssdeep": "12288:luVn4CkVBDDYcoY7UDn8QUoMlZ6+syJsTXy8VAz6VerIFyZGvMPPQv:luVnrkvPLK8Qtaw+sy0AdrIFeGvoPU", + "tlsh": "T1D9A423FBC40EA157F4D02E8A65EBCA9C053C2DAC0C594D249235308ACED953DBD96E" + }, + "pe": { + }, + "size": 475136, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:29.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "Llc8xZPNZbUM6j5sAHAFCeyu+po=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/e1d9c3d1ec47342b333cb3d82f28167585377e1c7ff4f5743ae085ba4e4f5cf7/detection/f-e1d9c3d", + "percent": 32.69, + "result": "17 / 52" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "89c639a74da0b66661bcda4c632fc4b5", + "e1d9c3d1ec47342b333cb3d82f28167585377e1c7ff4f5743ae085ba4e4f5cf7", + "24576:TkiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbe:YiaxnrkRDDzCFeGvMTM2/gY9vxv7o7q", + "T18C5533F7C00FA50675D46947689F8B6E96112EAC8B9C412ECA343357E9C782C92DBC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "89c639a74da0b66661bcda4c632fc4b5", + "sha256": "e1d9c3d1ec47342b333cb3d82f28167585377e1c7ff4f5743ae085ba4e4f5cf7", + "ssdeep": "24576:TkiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbe:YiaxnrkRDDzCFeGvMTM2/gY9vxv7o7q", + "tlsh": "T18C5533F7C00FA50675D46947689F8B6E96112EAC8B9C412ECA343357E9C782C92DBC" + }, + "pe": { + }, + "size": 1361347, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:23.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "VbMLdKEoQI/Xli/LgjmvMOlGYZY=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "e8f9dc1ebc9c3836e630ea890f49062c", + "99b0048497cf99ac223f56fdc57e9c9da368474bfd3249333d20245617584a36", + "12288:ZrNSkSCzn4CawkkDYcjt2PwnnbziBHZy+syptTHysl8Zz6xW3rIBGrS35jhQgZUb:lNnSCznrawnPjt2PibziFI+syIZoSrI8", + "T1EAD423FBAD4FE145F4B63D56ACAC8B8C61147AF5070E8A20D82DB448454F66C29E7C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "e8f9dc1ebc9c3836e630ea890f49062c", + "sha256": "99b0048497cf99ac223f56fdc57e9c9da368474bfd3249333d20245617584a36", + "ssdeep": "12288:ZrNSkSCzn4CawkkDYcjt2PwnnbziBHZy+syptTHysl8Zz6xW3rIBGrS35jhQgZUb:lNnSCznrawnPjt2PibziFI+syIZoSrI8", + "tlsh": "T1EAD423FBAD4FE145F4B63D56ACAC8B8C61147AF5070E8A20D82DB448454F66C29E7C" + }, + "pe": { + }, + "size": 607710, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:21.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "/6DDSx9lUsUoJUF8QSZiQ/oMvmQ=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.681Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.681Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "96dd2f36a091a5ebb2fbc8a4521165ee", + "1e60c0e0b23ba3767698116522460ee55cc44c3f4dc9d295bf572bedd5ac0f65", + "1536:IN9xqKCppztoghURX5Ll1bYL1T+6XpcT9YpDFa+9:IN9xqfftLhoJbYE6XOT9R+9", + "T11D23D1FB616D7CF1772BEED66E013B1A97BEC1C6052D1118AA5D8B9E2444C284FD0B" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "96dd2f36a091a5ebb2fbc8a4521165ee", + "sha256": "1e60c0e0b23ba3767698116522460ee55cc44c3f4dc9d295bf572bedd5ac0f65", + "ssdeep": "1536:IN9xqKCppztoghURX5Ll1bYL1T+6XpcT9YpDFa+9:IN9xqfftLhoJbYE6XOT9R+9", + "tlsh": "T11D23D1FB616D7CF1772BEED66E013B1A97BEC1C6052D1118AA5D8B9E2444C284FD0B" + }, + "pe": { + }, + "size": 49326, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:20.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "d+KIrgaxYVhvb/sqhlb5AYOHQDo=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "b339f90894265cb97515daa470af07cf", + "d0bd2eb817f80077a36b975511e8229822e8c34977a6fcdf890c996e7ef824e7", + "96:CeAh/kdPbox9Xvn9jx77DWtozT1oImYAwjrTXTd4JBR4pxG+WP:CnMbox9/nXWtLImYAUTR4jRckP", + "T197916CFC910373F4642EF274EA4BEA722BE6E4F415EC1A43496A5250E23F2D1B2037" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "b339f90894265cb97515daa470af07cf", + "sha256": "d0bd2eb817f80077a36b975511e8229822e8c34977a6fcdf890c996e7ef824e7", + "ssdeep": "96:CeAh/kdPbox9Xvn9jx77DWtozT1oImYAwjrTXTd4JBR4pxG+WP:CnMbox9/nXWtLImYAUTR4jRckP", + "tlsh": "T197916CFC910373F4642EF274EA4BEA722BE6E4F415EC1A43496A5250E23F2D1B2037" + }, + "pe": { + }, + "size": 4240, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:20.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "bAPvrGKWj/ess46s3KwFqAJ8+tc=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "a977be9538079d04662cb855472280f0", + "b169429bc31d82019f106c1a4888bf0cb09cdd67223ab8ee11ad1cb22e5b33d8", + "48:JY1vl8uN9y+xhS/frD/yPkrceiEJ77ejwqu3GHmcjBMInNeAVOp4P1Y:JA8CyxvJiE17gwqcGGGmInNeAVOA1Y", + "T1E0514CE79E74FD4AD8E01B49383529032FD325EE050A405D7D77312856722B5D051B" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "a977be9538079d04662cb855472280f0", + "sha256": "b169429bc31d82019f106c1a4888bf0cb09cdd67223ab8ee11ad1cb22e5b33d8", + "ssdeep": "48:JY1vl8uN9y+xhS/frD/yPkrceiEJ77ejwqu3GHmcjBMInNeAVOp4P1Y:JA8CyxvJiE17gwqcGGGmInNeAVOA1Y", + "tlsh": "T1E0514CE79E74FD4AD8E01B49383529032FD325EE050A405D7D77312856722B5D051B" + }, + "pe": { + }, + "size": 2762, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:18.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "uM8A5Yr/gMJ4tPHb9XIABYC/mRk=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "ff8378ca6de4242367a38c559481b269", + "825c15ab9faf964fb5a904953dd2d37abbce9e140dbd4cc22e0cd37a3ea76ae4", + "24:d8sxTEAby02+ygbBSND09H6j/NljGCBm5fLrkHsu4MHlerNhBzGCt3Th9Nwn:dvT80FKDqHI/2P5fLrgJler1zGCt9Nw", + "T18F31D894CBF5B99B65302DBC0FA5AD508C641E5C3ABCC8348F6A905A69994D3814CD" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "ff8378ca6de4242367a38c559481b269", + "sha256": "825c15ab9faf964fb5a904953dd2d37abbce9e140dbd4cc22e0cd37a3ea76ae4", + "ssdeep": "24:d8sxTEAby02+ygbBSND09H6j/NljGCBm5fLrkHsu4MHlerNhBzGCt3Th9Nwn:dvT80FKDqHI/2P5fLrgJler1zGCt9Nw", + "tlsh": "T18F31D894CBF5B99B65302DBC0FA5AD508C641E5C3ABCC8348F6A905A69994D3814CD" + }, + "pe": { + }, + "size": 1665, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:16.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "YPTTIf8ctfvqnTo2W9OpoJD6n9Q=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "5dcb49bc49109e90f5c6b8e5597b80ca", + "51bbdb79175fe1a9bb2ba6055f80bdd35d8486781881fef5cfe8d28b86c5870d", + "48:dyin3B3LH5XfXaImL3esbl9HglyiqRuBrTgq:d53B9XfX8L1vgnqRW0q", + "T15431D836CB901B7FD26B160350A2A96527AF8C5B5B9F4C292816FC0AC354C634FA66" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "5dcb49bc49109e90f5c6b8e5597b80ca", + "sha256": "51bbdb79175fe1a9bb2ba6055f80bdd35d8486781881fef5cfe8d28b86c5870d", + "ssdeep": "48:dyin3B3LH5XfXaImL3esbl9HglyiqRuBrTgq:d53B9XfX8L1vgnqRW0q", + "tlsh": "T15431D836CB901B7FD26B160350A2A96527AF8C5B5B9F4C292816FC0AC354C634FA66" + }, + "pe": { + }, + "size": 1664, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:29:09.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "UJBUWYV6AtCidXCm1NBsWtAYWZI=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "72ec96611a0b5f493854a5dcdd1aa528", + "c5df0748e8b023886b12647c050a826a7b43374cdc9112124e55ed46a4f926d2", + "24:991g7c6kzftBeaOY3+1Zc0Iq3aGG9wpe8kZyLq39C7U:99evkbNv3iYXd5ILOCg", + "T1CA114437127EC8A9D93004342166AE26D1009941146099CBAB575D368C877C32F42B" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "72ec96611a0b5f493854a5dcdd1aa528", + "sha256": "c5df0748e8b023886b12647c050a826a7b43374cdc9112124e55ed46a4f926d2", + "ssdeep": "24:991g7c6kzftBeaOY3+1Zc0Iq3aGG9wpe8kZyLq39C7U:99evkbNv3iYXd5ILOCg", + "tlsh": "T1CA114437127EC8A9D93004342166AE26D1009941146099CBAB575D368C877C32F42B" + }, + "pe": { + }, + "size": 909, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:07.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "e1yn2nAO9PlprMEaPBhcjgg9lwE=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "9707127fb08e7956151dda4f502cf707", + "71f5f598623fefd1d6bad450da4cb736b3b2cfb9a62c8d867da8516641df73b3", + "12288:gwnSE7CkFiurKQXYFZlIo1aMrIw8ZoOajbxYE/:gqSORnXmHsbl6V3L/", + "T1ECB4233A9AECEAE05B6F8DD075B9B641B05E32E145F9533CC869C0AF87170E602857" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "9707127fb08e7956151dda4f502cf707", + "sha256": "71f5f598623fefd1d6bad450da4cb736b3b2cfb9a62c8d867da8516641df73b3", + "ssdeep": "12288:gwnSE7CkFiurKQXYFZlIo1aMrIw8ZoOajbxYE/:gqSORnXmHsbl6V3L/", + "tlsh": "T1ECB4233A9AECEAE05B6F8DD075B9B641B05E32E145F9533CC869C0AF87170E602857" + }, + "pe": { + }, + "size": 507323, + "type": "zip" + }, + "first_seen": "2022-06-02T13:28:27.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "e74l+UPbo6o0DotQc8Roo3OVcJQ=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/38262d6bbeb72bfe5a3baf36250ee80a6824c4d6e1079e4cfdc6869c065693df/detection/f-38262d6", + "percent": 27.42, + "result": "17 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "f1650fc9608337179d7424c87f1ee737", + "38262d6bbeb72bfe5a3baf36250ee80a6824c4d6e1079e4cfdc6869c065693df", + "24576:1EnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7P:1EnrkRDDzCFeGvMTM2/gY9vxv7o7P", + "T11F5533F3C00FA54679E42E57649F8B2996112DFC8A9C412ECA743397E4D782C869BC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "f1650fc9608337179d7424c87f1ee737", + "sha256": "38262d6bbeb72bfe5a3baf36250ee80a6824c4d6e1079e4cfdc6869c065693df", + "ssdeep": "24576:1EnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7P:1EnrkRDDzCFeGvMTM2/gY9vxv7o7P", + "tlsh": "T11F5533F3C00FA54679E42E57649F8B2996112DFC8A9C412ECA743397E4D782C869BC" + }, + "pe": { + }, + "size": 1361344, + "type": "zip" + }, + "first_seen": "2022-06-02T13:27:51.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "XIDmYG67Bs5j3njl7xYKAyH1emM=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.682Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/cfb001ca42b62b1ade9220f44bd6479aff6eeaaa108aa98a4b0169ea1dec8e86/detection/f-cfb001c", + "percent": 38.1, + "result": "24 / 63" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.682Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "970e0ba1981035359600b63b43b10bc0", + "cfb001ca42b62b1ade9220f44bd6479aff6eeaaa108aa98a4b0169ea1dec8e86", + "24576:MRnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7P:cnrkRDDzCFeGvMTM2/gY9vxv7o7P", + "T1025533F3C00FA90679D07A57A09F872E96112DB88B9C512ECA703357E5D7C2C9697C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "970e0ba1981035359600b63b43b10bc0", + "sha256": "cfb001ca42b62b1ade9220f44bd6479aff6eeaaa108aa98a4b0169ea1dec8e86", + "ssdeep": "24576:MRnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7P:cnrkRDDzCFeGvMTM2/gY9vxv7o7P", + "tlsh": "T1025533F3C00FA90679D07A57A09F872E96112DB88B9C512ECA703357E5D7C2C9697C" + }, + "pe": { + }, + "size": 1361347, + "type": "zip" + }, + "first_seen": "2022-06-02T13:27:50.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "TxxcH4E0aWG8D8rloVjU3cK+sy0=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.685Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/f1121e7b8419f84a7c8ad91acd9d4d804d78bb10a899cee1ab4f0b349097eb94/detection/f-f1121e7", + "percent": 43.55, + "result": "27 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.685Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "d04039c9b1f2d6f13a17962c6131e573", + "f1121e7b8419f84a7c8ad91acd9d4d804d78bb10a899cee1ab4f0b349097eb94", + "24576:ikiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbS:HiaxnrkRDDzCFeGvMTM2/gY9vxv7o7m", + "T17D5533F7C00FA50679D46947689F8B6E96112EAC8B9C412ECA343357E5C782C92DBC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "d04039c9b1f2d6f13a17962c6131e573", + "sha256": "f1121e7b8419f84a7c8ad91acd9d4d804d78bb10a899cee1ab4f0b349097eb94", + "ssdeep": "24576:ikiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbS:HiaxnrkRDDzCFeGvMTM2/gY9vxv7o7m", + "tlsh": "T17D5533F7C00FA50679D46947689F8B6E96112EAC8B9C412ECA343357E5C782C92DBC" + }, + "pe": { + }, + "size": 1361347, + "type": "zip" + }, + "first_seen": "2022-06-02T13:27:46.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "0j+BQ8HFrDQYe5kbXMc9ANSCjBY=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.685Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/a2b6f823f7ce67a0b5ac0a0561139693e526f6c5b4a2ba05d20fd9e467e9dacc/detection/f-a2b6f82", + "percent": 41.67, + "result": "25 / 60" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.685Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "2209a62733aa8fd802e60508ecce900a", + "a2b6f823f7ce67a0b5ac0a0561139693e526f6c5b4a2ba05d20fd9e467e9dacc", + "24576:hUQ2zgDnrawnPjt2PibziFI+syIZoSrI0r+xGgWdVnG45U3D9WHqyraYvb9mRhpt:CQm8nrawTGDIZoB0r+xkdciU5WHqgUjt", + "T19D5533FB4C4B9556B9F4AA43A88D8B3C9000E5EC574CA670D908C9FEE44B7B850DB8" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "2209a62733aa8fd802e60508ecce900a", + "sha256": "a2b6f823f7ce67a0b5ac0a0561139693e526f6c5b4a2ba05d20fd9e467e9dacc", + "ssdeep": "24576:hUQ2zgDnrawnPjt2PibziFI+syIZoSrI0r+xGgWdVnG45U3D9WHqyraYvb9mRhpt:CQm8nrawTGDIZoB0r+xkdciU5WHqgUjt", + "tlsh": "T19D5533FB4C4B9556B9F4AA43A88D8B3C9000E5EC574CA670D908C9FEE44B7B850DB8" + }, + "pe": { + }, + "size": 1361339, + "type": "zip" + }, + "first_seen": "2022-06-02T13:27:40.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "0iMNuOxitDAkMEozdSjgX9jeA+g=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.686Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/7cbf47ef916aa02a1b39cad40dfe71ea121d8d5b36d5a13fdec5977a8dcb4550/detection/f-7cbf47e", + "percent": 41.67, + "result": "25 / 60" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.686Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "03021a5d7811ffb12b28c3372af1e674", + "7cbf47ef916aa02a1b39cad40dfe71ea121d8d5b36d5a13fdec5977a8dcb4550", + "24576:LkiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbz:AiaxnrkRDDzCFeGvMTM2/gY9vxv7o7v", + "T1365533F7C00FA50679D46943689F876A96212DBC8B9C412ECA743397E5C782C929BC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "03021a5d7811ffb12b28c3372af1e674", + "sha256": "7cbf47ef916aa02a1b39cad40dfe71ea121d8d5b36d5a13fdec5977a8dcb4550", + "ssdeep": "24576:LkiaxnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIbz:AiaxnrkRDDzCFeGvMTM2/gY9vxv7o7v", + "tlsh": "T1365533F7C00FA50679D46943689F876A96212DBC8B9C412ECA743397E5C782C929BC" + }, + "pe": { + }, + "size": 1361341, + "type": "zip" + }, + "first_seen": "2022-06-02T13:27:38.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "/3dtJlkuhnqok29y8dY0+Q4ifHQ=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.686Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/d4ba36cfa7e4191199836b228f6d79bd74e86793bc183563b78591f508b066ed/detection/f-d4ba36c", + "percent": 41.94, + "result": "26 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.686Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "27e0088dde23b9e6fe6b7711b653da96", + "d4ba36cfa7e4191199836b228f6d79bd74e86793bc183563b78591f508b066ed", + "24576:2RjAnrKbP2UmQn0+synQfr4cdGv9P8a2oMkM0DqLpj5I9qe32L8rayvevBhIb7i:OAnrKaODnQEcdGvh8a2/gY9vxv7o7i", + "T1565533F3C00AE9067AE43A16A85E871D92106DA88BDC516ECB643757F6D3C1CA2D7C" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "27e0088dde23b9e6fe6b7711b653da96", + "sha256": "d4ba36cfa7e4191199836b228f6d79bd74e86793bc183563b78591f508b066ed", + "ssdeep": "24576:2RjAnrKbP2UmQn0+synQfr4cdGv9P8a2oMkM0DqLpj5I9qe32L8rayvevBhIb7i:OAnrKaODnQEcdGvh8a2/gY9vxv7o7i", + "tlsh": "T1565533F3C00AE9067AE43A16A85E871D92106DA88BDC516ECB643757F6D3C1CA2D7C" + }, + "pe": { + }, + "size": 1361337, + "type": "zip" + }, + "first_seen": "2022-06-02T13:27:38.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "j5JnUNNYnbyiFGlCGClPpRa72kc=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.686Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.686Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "70d1a2f0eb51b776885f945ebb26529e", + "1132eef3ff0d63e0895cfb727a78093396731bf381d6e6b5ece32769895cfc50", + "48:SA1Y/0a0Pcuj4Y/FXTMz9izueAvG5601Sn:SuY/KcujLXTMBeEG5Y", + "T181311AB0C227CD659FC6D2923B9AB450C45466911C38B1BE3AA1F20FC06002C56103" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "70d1a2f0eb51b776885f945ebb26529e", + "sha256": "1132eef3ff0d63e0895cfb727a78093396731bf381d6e6b5ece32769895cfc50", + "ssdeep": "48:SA1Y/0a0Pcuj4Y/FXTMz9izueAvG5601Sn:SuY/KcujLXTMBeEG5Y", + "tlsh": "T181311AB0C227CD659FC6D2923B9AB450C45466911C38B1BE3AA1F20FC06002C56103" + }, + "pe": { + }, + "size": 1665, + "type": "unknown" + }, + "first_seen": "2022-06-02T13:27:32.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "kDF3gd3Mn0AOywia9xgchqGAuUE=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.686Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/882d547a8820864c217970a2cfa90e8ae0430139dee3dd51024570df01e3c233/detection/f-882d547", + "percent": 24.19, + "result": "15 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.686Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "e43b16a442e7746df64df904688c821d", + "882d547a8820864c217970a2cfa90e8ae0430139dee3dd51024570df01e3c233", + "24576:5u+nrawnPjt2PibziFI+syIZoSrI0r+xGgWdVnG45U3D9WHqyraYvb9mRhpgtz:5BnrawTGDIZoB0r+xkdciU5WHqgUjc", + "T1075533FB4C4B9555F8F89E53AC9D8A2CD100A5EC574CE674DA08C4AEE80B37860DBC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "e43b16a442e7746df64df904688c821d", + "sha256": "882d547a8820864c217970a2cfa90e8ae0430139dee3dd51024570df01e3c233", + "ssdeep": "24576:5u+nrawnPjt2PibziFI+syIZoSrI0r+xGgWdVnG45U3D9WHqyraYvb9mRhpgtz:5BnrawTGDIZoB0r+xkdciU5WHqgUjc", + "tlsh": "T1075533FB4C4B9555F8F89E53AC9D8A2CD100A5EC574CE674DA08C4AEE80B37860DBC" + }, + "pe": { + }, + "size": 1361342, + "type": "zip" + }, + "first_seen": "2022-06-02T13:27:26.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "id": "PQGb8YxgAc57YSFEaYrO9A/YF5U=", + "index": ".ds-logs-ti_abusech.url-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:39:46.305Z", + "abusech": { + "url": { + "blacklists": { + "spamhaus_dbl": "not listed", + "surbl": "not listed" + }, + "id": "2221794", + "larted": true, + "tags": [ + "elf" + ], + "threat": "malware_download", + "url_status": "online" + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.url", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:39:46.305Z", + "dataset": "ti_abusech.url", + "ingested": "2022-06-02T13:39:46Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "forwarded", + "abusech-url" + ], + "threat": { + "indicator": { + "first_seen": "2022-06-02T13:22:04.000Z", + "ip": "149.57.201.137", + "provider": "tolisec", + "reference": "https://urlhaus.abuse.ch/url/2221794/", + "type": "url", + "url": { + "domain": "149.57.201.137", + "extension": "arm5", + "full": "http://149.57.201.137/razor/r4z0r.arm5", + "original": "http://149.57.201.137/razor/r4z0r.arm5", + "path": "/razor/r4z0r.arm5", + "scheme": "http" + } + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "id": "OSUKXqaqw3yp3MWwWGyb3qBB6jU=", + "index": ".ds-logs-ti_abusech.url-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:39:46.305Z", + "abusech": { + "url": { + "blacklists": { + "spamhaus_dbl": "not listed", + "surbl": "not listed" + }, + "id": "2221795", + "larted": true, + "tags": [ + "elf" + ], + "threat": "malware_download", + "url_status": "online" + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.url", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:39:46.305Z", + "dataset": "ti_abusech.url", + "ingested": "2022-06-02T13:39:46Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "forwarded", + "abusech-url" + ], + "threat": { + "indicator": { + "first_seen": "2022-06-02T13:22:04.000Z", + "ip": "149.57.201.137", + "provider": "tolisec", + "reference": "https://urlhaus.abuse.ch/url/2221795/", + "type": "url", + "url": { + "domain": "149.57.201.137", + "extension": "ppc", + "full": "http://149.57.201.137/razor/r4z0r.ppc", + "original": "http://149.57.201.137/razor/r4z0r.ppc", + "path": "/razor/r4z0r.ppc", + "scheme": "http" + } + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "id": "dX+wc559fHomjmPvAps1NIN+XaE=", + "index": ".ds-logs-ti_abusech.url-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:39:46.305Z", + "abusech": { + "url": { + "blacklists": { + "spamhaus_dbl": "not listed", + "surbl": "not listed" + }, + "id": "2221796", + "larted": true, + "tags": [ + "elf" + ], + "threat": "malware_download", + "url_status": "online" + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.url", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:39:46.305Z", + "dataset": "ti_abusech.url", + "ingested": "2022-06-02T13:39:46Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "forwarded", + "abusech-url" + ], + "threat": { + "indicator": { + "first_seen": "2022-06-02T13:22:04.000Z", + "ip": "149.57.201.137", + "provider": "tolisec", + "reference": "https://urlhaus.abuse.ch/url/2221796/", + "type": "url", + "url": { + "domain": "149.57.201.137", + "extension": "x86", + "full": "http://149.57.201.137/razor/r4z0r.x86", + "original": "http://149.57.201.137/razor/r4z0r.x86", + "path": "/razor/r4z0r.x86", + "scheme": "http" + } + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "id": "NwEdch4+R+FULfHDyBY42ZvKrnE=", + "index": ".ds-logs-ti_abusech.url-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:39:46.305Z", + "abusech": { + "url": { + "blacklists": { + "spamhaus_dbl": "not listed", + "surbl": "not listed" + }, + "id": "2221797", + "larted": true, + "tags": [ + "elf" + ], + "threat": "malware_download", + "url_status": "online" + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.url", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:39:46.305Z", + "dataset": "ti_abusech.url", + "ingested": "2022-06-02T13:39:46Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "forwarded", + "abusech-url" + ], + "threat": { + "indicator": { + "first_seen": "2022-06-02T13:22:04.000Z", + "ip": "149.57.201.137", + "provider": "tolisec", + "reference": "https://urlhaus.abuse.ch/url/2221797/", + "type": "url", + "url": { + "domain": "149.57.201.137", + "extension": "mpsl", + "full": "http://149.57.201.137/razor/r4z0r.mpsl", + "original": "http://149.57.201.137/razor/r4z0r.mpsl", + "path": "/razor/r4z0r.mpsl", + "scheme": "http" + } + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "id": "AauapLcuuEqfVg1eR7VkDAExl54=", + "index": ".ds-logs-ti_abusech.url-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:39:46.306Z", + "abusech": { + "url": { + "blacklists": { + "spamhaus_dbl": "not listed", + "surbl": "not listed" + }, + "id": "2221798", + "larted": true, + "tags": [ + "elf" + ], + "threat": "malware_download", + "url_status": "online" + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.url", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:39:46.306Z", + "dataset": "ti_abusech.url", + "ingested": "2022-06-02T13:39:46Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "forwarded", + "abusech-url" + ], + "threat": { + "indicator": { + "first_seen": "2022-06-02T13:22:04.000Z", + "ip": "149.57.201.137", + "provider": "tolisec", + "reference": "https://urlhaus.abuse.ch/url/2221798/", + "type": "url", + "url": { + "domain": "149.57.201.137", + "extension": "mips", + "full": "http://149.57.201.137/razor/r4z0r.mips", + "original": "http://149.57.201.137/razor/r4z0r.mips", + "path": "/razor/r4z0r.mips", + "scheme": "http" + } + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "id": "rcwqq/Te2Djx8sE4gX9HjeHDj1c=", + "index": ".ds-logs-ti_abusech.url-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:39:46.306Z", + "abusech": { + "url": { + "blacklists": { + "spamhaus_dbl": "not listed", + "surbl": "not listed" + }, + "id": "2221799", + "larted": true, + "tags": [ + "elf" + ], + "threat": "malware_download", + "url_status": "online" + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.url", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:39:46.306Z", + "dataset": "ti_abusech.url", + "ingested": "2022-06-02T13:39:46Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "forwarded", + "abusech-url" + ], + "threat": { + "indicator": { + "first_seen": "2022-06-02T13:22:04.000Z", + "ip": "149.57.201.137", + "provider": "tolisec", + "reference": "https://urlhaus.abuse.ch/url/2221799/", + "type": "url", + "url": { + "domain": "149.57.201.137", + "extension": "arm", + "full": "http://149.57.201.137/razor/r4z0r.arm", + "original": "http://149.57.201.137/razor/r4z0r.arm", + "path": "/razor/r4z0r.arm", + "scheme": "http" + } + } + } + } + } +} diff --git a/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_multiple/mappings.json b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_multiple/mappings.json new file mode 100644 index 0000000000000..e0837a100a9a0 --- /dev/null +++ b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_multiple/mappings.json @@ -0,0 +1,1599 @@ +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.malware-*" + ], + "name": "logs-ti_abusech.malware", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "malware": { + "properties": { + "signature": { + "ignore_above": 1024, + "type": "keyword" + }, + "virustotal": { + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "percent": { + "type": "float" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.malware" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH Malware" + } + } + }, + "indicator": { + "properties": { + "file": { + "properties": { + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "imphash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "first_seen": { + "type": "date" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.malware-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.file.type", + "threat.indicator.file.hash.md5", + "threat.indicator.file.hash.sha256", + "threat.indicator.file.hash.ssdeep", + "threat.indicator.file.hash.tlsh", + "threat.indicator.file.pe.imphash", + "threat.indicator.provider", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "related.hash", + "abusech.malware.signature", + "abusech.malware.virustotal.result", + "abusech.malware.virustotal.link" + ] + } + } + } + } + } + } +} + +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.malwarebazaar-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.malwarebazaar-*" + ], + "name": "logs-ti_abusech.malwarebazaar", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "malwarebazaar": { + "properties": { + "anonymous": { + "type": "long" + }, + "code_sign": { + "ignore_above": 1024, + "type": "keyword" + }, + "intelligence": { + "properties": { + "downloads": { + "type": "long" + }, + "mail": { + "properties": { + "Generic": { + "ignore_above": 1024, + "type": "keyword" + }, + "IT": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "uploads": { + "type": "long" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.malwarebazaar" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH MalwareBazaar" + } + } + }, + "indicator": { + "properties": { + "file": { + "properties": { + "elf": { + "properties": { + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "imphash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "last_seen": { + "type": "date" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "software": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.malwarebazaar-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.file.type", + "threat.indicator.file.name", + "threat.indicator.file.extension", + "threat.indicator.file.hash.sha1", + "threat.indicator.file.hash.md5", + "threat.indicator.file.hash.sha256", + "threat.indicator.file.hash.ssdeep", + "threat.indicator.file.hash.sha384", + "threat.indicator.file.hash.tlsh", + "threat.indicator.file.mime_type", + "threat.indicator.file.pe.imphash", + "threat.indicator.file.elf.telfhash", + "threat.indicator.file.x509.subject.common_name", + "threat.indicator.file.x509.issuer.common_name", + "threat.indicator.file.x509.public_key_algorithm", + "threat.indicator.file.x509.serial_number", + "threat.indicator.provider", + "threat.indicator.geo.country_iso_code", + "threat.software.alias", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "related.hash", + "abusech.malwarebazaar.tags", + "abusech.malwarebazaar.intelligence.mail.Generic", + "abusech.malwarebazaar.intelligence.mail.IT", + "abusech.malwarebazaar.code_sign" + ] + } + } + } + } + } + } +} + +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.url-*" + ], + "name": "logs-ti_abusech.url", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "url": { + "properties": { + "blacklists": { + "properties": { + "spamhaus_dbl": { + "ignore_above": 1024, + "type": "keyword" + }, + "surbl": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "larted": { + "type": "boolean" + }, + "reporter": { + "ignore_above": 1024, + "type": "keyword" + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "ignore_above": 1024, + "type": "keyword" + }, + "url_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "urlhaus_reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.url" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH URL" + } + } + }, + "indicator": { + "properties": { + "first_seen": { + "type": "date" + }, + "ip": { + "type": "ip" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "path": { + "ignore_above": 1024, + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.url-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.reference", + "threat.indicator.url.domain", + "threat.indicator.url.full", + "threat.indicator.url.extension", + "threat.indicator.url.original", + "threat.indicator.url.path", + "threat.indicator.url.scheme", + "threat.indicator.url.query", + "threat.indicator.provider", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "abusech.url.id", + "abusech.url.urlhaus_reference", + "abusech.url.url_status", + "abusech.url.threat", + "abusech.url.reporter", + "abusech.url.tags", + "abusech.url.blacklists.spamhaus_dbl", + "abusech.url.blacklists.surbl" + ] + } + } + } + } + } + } +} diff --git a/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_no_mappings/data.json b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_no_mappings/data.json new file mode 100644 index 0000000000000..dcd20e315a321 --- /dev/null +++ b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_no_mappings/data.json @@ -0,0 +1,171 @@ +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "RP0HlUQkToBRTlZeGAItbyWMx1E=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.677Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.677Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "a7f997be65f62fdbe5ec076f0fe207f7", + "d86e656455f985357df3063dff6637f7f3b95bb27d1769a6b88c7adecaf7763f", + "6144:Eiu4rKJqctSMeWml5SBm5bT6rhnMqvTRrbx50Elf03jhBtGuYEs0gw4N1c5b8Onl:vuI6QWm+6bTShnMIRUEKThB1sn5hOnl", + "T15194232F21ACD2E5F4379415A97680C8DE041E08695B5F2AD73B237AC5EF2F682C57" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha256": "sha256", + "md5": "md5", + "sha1": "sha1", + "sha224": "sha224", + "sha3-224": "sha3-224", + "sha3-256": "sha3-256", + "sha384": "sha384", + "sha3-384": "sha3-384", + "sha512": "sha512", + "sha3-512": "sha3-512", + "sha512/224": "sha512/224", + "sha512/256": "sha512/256", + "ssdeep": "ssdeep", + "tlsh": "tlsh", + "impfuzzy": "impfuzzy", + "imphash": "imphash", + "pehash": "pehash", + "vhash": "vhash" + }, + "pe": { + }, + "size": 441803, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:44.000Z", + "type": "file" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "C4ObxkoTZzcjmk1jFwGlRadzMnA=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.678Z", + "abusech": { + "malware": { + "virustotal": { + "link": "https://www.virustotal.com/gui/file/d3e2cf87eabf84ef929aaf8dad1431b3387f5a26de8ffb7a0c3c2a13f973c0ab/detection/f-d3e2cf8", + "percent": 41.94, + "result": "26 / 62" + } + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.678Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "cce28cbfb3cb7ecdae0f5969476f3f09", + "d3e2cf87eabf84ef929aaf8dad1431b3387f5a26de8ffb7a0c3c2a13f973c0ab", + "24576:WEnrkvPLK8Qtaw+sy0AdrIFeGvoPTM2oMkM0DqLpj5I9qe32L8rayvevBhIb7q:WEnrkRDDzCFeGvMTM2/gY9vxv7o7q", + "T1F95533F3C00FA54679E42E57649F8B2996112DFC8A9C412ECA743397E4D782C869BC" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "vhash": "vhash" + }, + "pe": { + }, + "size": 1361342, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:40.000Z", + "type": "file" + } + } + } + } +} diff --git a/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_single/data.json b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_single/data.json new file mode 100644 index 0000000000000..22bc6031595e8 --- /dev/null +++ b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_single/data.json @@ -0,0 +1,77 @@ +{ + "type": "doc", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "id": "RP0HlUQkToBRTlZeGAItbyWMx1E=", + "index": ".ds-logs-ti_abusech.malware-default-2022.06.02-000001", + "source": { + "@timestamp": "2022-06-02T13:29:47.677Z", + "abusech": { + "malware": { + } + }, + "agent": { + "ephemeral_id": "5c9f7693-8486-4634-a024-994faa6dee51", + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "name": "luke-VirtualBox", + "type": "filebeat", + "version": "8.2.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "default", + "type": "logs" + }, + "ecs": { + "version": "8.2.0" + }, + "elastic_agent": { + "id": "8eee41bf-442d-48c3-9cc7-41b072d29a9b", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "auth_metadata_missing", + "category": "threat", + "created": "2022-06-02T13:29:47.677Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-06-02T13:29:48Z", + "kind": "enrichment", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "a7f997be65f62fdbe5ec076f0fe207f7", + "d86e656455f985357df3063dff6637f7f3b95bb27d1769a6b88c7adecaf7763f", + "6144:Eiu4rKJqctSMeWml5SBm5bT6rhnMqvTRrbx50Elf03jhBtGuYEs0gw4N1c5b8Onl:vuI6QWm+6bTShnMIRUEKThB1sn5hOnl", + "T15194232F21ACD2E5F4379415A97680C8DE041E08695B5F2AD73B237AC5EF2F682C57" + ] + }, + "tags": [ + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "a7f997be65f62fdbe5ec076f0fe207f7", + "sha256": "d86e656455f985357df3063dff6637f7f3b95bb27d1769a6b88c7adecaf7763f", + "ssdeep": "6144:Eiu4rKJqctSMeWml5SBm5bT6rhnMqvTRrbx50Elf03jhBtGuYEs0gw4N1c5b8Onl:vuI6QWm+6bTShnMIRUEKThB1sn5hOnl", + "tlsh": "T15194232F21ACD2E5F4379415A97680C8DE041E08695B5F2AD73B237AC5EF2F682C57" + }, + "pe": { + }, + "size": 441803, + "type": "zip" + }, + "first_seen": "2022-06-02T13:29:44.000Z", + "type": "file" + } + } + } + } +} diff --git a/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_single/mappings.json b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_single/mappings.json new file mode 100644 index 0000000000000..e0837a100a9a0 --- /dev/null +++ b/x-pack/test/security_solution_cypress/es_archives/ti_indicators_data_single/mappings.json @@ -0,0 +1,1599 @@ +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.malware-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.malware-*" + ], + "name": "logs-ti_abusech.malware", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "malware": { + "properties": { + "signature": { + "ignore_above": 1024, + "type": "keyword" + }, + "virustotal": { + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "percent": { + "type": "float" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.malware" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH Malware" + } + } + }, + "indicator": { + "properties": { + "file": { + "properties": { + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "imphash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "first_seen": { + "type": "date" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.malware-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.file.type", + "threat.indicator.file.hash.md5", + "threat.indicator.file.hash.sha256", + "threat.indicator.file.hash.ssdeep", + "threat.indicator.file.hash.tlsh", + "threat.indicator.file.pe.imphash", + "threat.indicator.provider", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "related.hash", + "abusech.malware.signature", + "abusech.malware.virustotal.result", + "abusech.malware.virustotal.link" + ] + } + } + } + } + } + } +} + +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.malwarebazaar-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.malwarebazaar-*" + ], + "name": "logs-ti_abusech.malwarebazaar", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "malwarebazaar": { + "properties": { + "anonymous": { + "type": "long" + }, + "code_sign": { + "ignore_above": 1024, + "type": "keyword" + }, + "intelligence": { + "properties": { + "downloads": { + "type": "long" + }, + "mail": { + "properties": { + "Generic": { + "ignore_above": 1024, + "type": "keyword" + }, + "IT": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "uploads": { + "type": "long" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.malwarebazaar" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH MalwareBazaar" + } + } + }, + "indicator": { + "properties": { + "file": { + "properties": { + "elf": { + "properties": { + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "imphash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "last_seen": { + "type": "date" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "software": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.malwarebazaar-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.file.type", + "threat.indicator.file.name", + "threat.indicator.file.extension", + "threat.indicator.file.hash.sha1", + "threat.indicator.file.hash.md5", + "threat.indicator.file.hash.sha256", + "threat.indicator.file.hash.ssdeep", + "threat.indicator.file.hash.sha384", + "threat.indicator.file.hash.tlsh", + "threat.indicator.file.mime_type", + "threat.indicator.file.pe.imphash", + "threat.indicator.file.elf.telfhash", + "threat.indicator.file.x509.subject.common_name", + "threat.indicator.file.x509.issuer.common_name", + "threat.indicator.file.x509.public_key_algorithm", + "threat.indicator.file.x509.serial_number", + "threat.indicator.provider", + "threat.indicator.geo.country_iso_code", + "threat.software.alias", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "related.hash", + "abusech.malwarebazaar.tags", + "abusech.malwarebazaar.intelligence.mail.Generic", + "abusech.malwarebazaar.intelligence.mail.IT", + "abusech.malwarebazaar.code_sign" + ] + } + } + } + } + } + } +} + +{ + "type": "data_stream", + "value": { + "data_stream": "logs-ti_abusech.url-default", + "template": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "data_stream": { + "allow_custom_routing": false, + "hidden": false + }, + "index_patterns": [ + "logs-ti_abusech.url-*" + ], + "name": "logs-ti_abusech.url", + "priority": 200, + "template": { + "mappings": { + "_meta": { + "managed": true, + "managed_by": "fleet", + "package": { + "name": "ti_abusech" + } + }, + "date_detection": false, + "dynamic_templates": [ + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "abusech": { + "properties": { + "url": { + "properties": { + "blacklists": { + "properties": { + "spamhaus_dbl": { + "ignore_above": 1024, + "type": "keyword" + }, + "surbl": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "larted": { + "type": "boolean" + }, + "reporter": { + "ignore_above": 1024, + "type": "keyword" + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "ignore_above": 1024, + "type": "keyword" + }, + "url_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "urlhaus_reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "event": { + "properties": { + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "constant_keyword", + "value": "ti_abusech.url" + }, + "ingested": { + "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "type": "constant_keyword", + "value": "ti_abusech" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "input": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "offset": { + "type": "long" + } + } + }, + "message": { + "type": "match_only_text" + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "feed": { + "properties": { + "dashboard_id": { + "type": "constant_keyword", + "value": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6" + }, + "name": { + "type": "constant_keyword", + "value": "AbuseCH URL" + } + } + }, + "indicator": { + "properties": { + "first_seen": { + "type": "date" + }, + "ip": { + "type": "ip" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "path": { + "ignore_above": 1024, + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "default_pipeline": "logs-ti_abusech.url-1.3.1", + "final_pipeline": ".fleet_final_pipeline-1", + "lifecycle": { + "name": "logs" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "query": { + "default_field": [ + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "cloud.project.id", + "cloud.image.id", + "container.id", + "container.image.name", + "container.name", + "host.architecture", + "host.domain", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.os.build", + "host.os.codename", + "host.type", + "event.kind", + "event.category", + "event.type", + "event.original", + "threat.indicator.type", + "threat.indicator.reference", + "threat.indicator.url.domain", + "threat.indicator.url.full", + "threat.indicator.url.extension", + "threat.indicator.url.original", + "threat.indicator.url.path", + "threat.indicator.url.scheme", + "threat.indicator.url.query", + "threat.indicator.provider", + "input.type", + "log.flags", + "log.file.path", + "ecs.version", + "message", + "error.message", + "tags", + "abusech.url.id", + "abusech.url.urlhaus_reference", + "abusech.url.url_status", + "abusech.url.threat", + "abusech.url.reporter", + "abusech.url.tags", + "abusech.url.blacklists.spamhaus_dbl", + "abusech.url.blacklists.surbl" + ] + } + } + } + } + } + } +} diff --git a/x-pack/test/security_solution_cypress/pipelines/pipeline.ts b/x-pack/test/security_solution_cypress/pipelines/pipeline.ts new file mode 100644 index 0000000000000..61f383394c469 --- /dev/null +++ b/x-pack/test/security_solution_cypress/pipelines/pipeline.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface Pipeline { + name: string; + processors: Array>; + on_failure?: Array>; +} diff --git a/x-pack/test/security_solution_cypress/pipelines/ti_abusech_malware.ts b/x-pack/test/security_solution_cypress/pipelines/ti_abusech_malware.ts new file mode 100644 index 0000000000000..93a8ddf713f71 --- /dev/null +++ b/x-pack/test/security_solution_cypress/pipelines/ti_abusech_malware.ts @@ -0,0 +1,212 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Pipeline } from './pipeline'; + +export const tiAbusechMalware: Pipeline = { + name: 'logs-ti_abusech.malware-1.3.1', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.2.0', + }, + }, + { + set: { + field: 'event.kind', + value: 'enrichment', + }, + }, + { + set: { + field: 'event.category', + value: 'threat', + }, + }, + { + set: { + field: 'event.type', + value: 'indicator', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + }, + }, + { + json: { + field: 'event.original', + target_field: 'abusech.malware', + }, + }, + { + fingerprint: { + fields: ['abusech.malware.md5_hash', 'abusech.malware.sha256_hash'], + target_field: '_id', + }, + }, + { + date: { + field: 'abusech.malware.firstseen', + target_field: 'threat.indicator.first_seen', + formats: ['yyyy-MM-dd HH:mm:ss z', 'yyyy-MM-dd HH:mm:ss Z', 'yyyy-MM-dd HH:mm:ss'], + if: 'ctx.abusech?.malware?.firstseen != null', + }, + }, + { + set: { + field: 'threat.indicator.type', + value: 'file', + }, + }, + { + rename: { + field: 'abusech.malware.file_size', + target_field: 'threat.indicator.file.size', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malware.file_type', + target_field: 'threat.indicator.file.type', + ignore_missing: true, + }, + }, + { + remove: { + field: 'abusech.malware.urlhaus_download', + ignore_missing: true, + }, + }, + { + convert: { + field: 'threat.indicator.file.size', + type: 'long', + ignore_missing: true, + }, + }, + { + convert: { + field: 'abusech.malware.virustotal.percent', + type: 'float', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malware.md5_hash', + target_field: 'threat.indicator.file.hash.md5', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malware.sha256_hash', + target_field: 'threat.indicator.file.hash.sha256', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malware.imphash', + target_field: 'threat.indicator.file.pe.imphash', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malware.ssdeep', + target_field: 'threat.indicator.file.hash.ssdeep', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malware.tlsh', + target_field: 'threat.indicator.file.hash.tlsh', + ignore_missing: true, + }, + }, + { + append: { + field: 'related.hash', + value: '{{{threat.indicator.file.hash.md5}}}', + if: 'ctx?.threat?.indicator?.file?.hash?.md5 != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{{threat.indicator.file.hash.sha256}}}', + if: 'ctx?.threat?.indicator?.file?.hash?.sha256 != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{{threat.indicator.file.hash.ssdeep}}}', + if: 'ctx?.threat?.indicator?.file?.hash?.ssdeep != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{{threat.indicator.file.pe.imphash}}}', + if: 'ctx?.threat?.indicator?.file?.pe?.imphash != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{{threat.indicator.file.hash.tlsh}}}', + if: 'ctx?.threat?.indicator?.file?.hash?.tlsh != null', + }, + }, + { + set: { + field: 'threat.indicator.type', + value: 'unknown', + if: 'ctx?.threat?.indicator?.type == null', + }, + }, + { + script: { + lang: 'painless', + if: 'ctx?.abusech != null', + source: + 'void handleMap(Map map) {\n for (def x : map.values()) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\nmap.values().removeIf(v -> v == null);\n}\nvoid handleList(List list) {\n for (def x : list) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\n}\nhandleMap(ctx);\n', + }, + }, + { + remove: { + field: 'event.original', + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))", + ignore_failure: true, + ignore_missing: true, + }, + }, + { + remove: { + field: ['abusech.malware.firstseen', 'message'], + ignore_missing: true, + }, + }, + ], + on_failure: [ + { + set: { + field: 'error.message', + value: '{{ _ingest.on_failure_message }}', + }, + }, + ], +}; diff --git a/x-pack/test/security_solution_cypress/pipelines/ti_abusech_malware_bazaar.ts b/x-pack/test/security_solution_cypress/pipelines/ti_abusech_malware_bazaar.ts new file mode 100644 index 0000000000000..b3cc69e8c9730 --- /dev/null +++ b/x-pack/test/security_solution_cypress/pipelines/ti_abusech_malware_bazaar.ts @@ -0,0 +1,356 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Pipeline } from './pipeline'; + +export const tiAbusechMalwareBazaar: Pipeline = { + name: 'logs-ti_abusech.malwarebazaar-1.3.1', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.2.0', + }, + }, + { + set: { + field: 'event.kind', + value: 'enrichment', + }, + }, + { + set: { + field: 'event.category', + value: 'threat', + }, + }, + { + set: { + field: 'event.type', + value: 'indicator', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + }, + }, + { + json: { + field: 'event.original', + target_field: 'abusech.malwarebazaar', + }, + }, + { + fingerprint: { + fields: ['abusech.malwarebazaar.md5_hash', 'abusech.malwarebazaar.sha256_hash'], + target_field: '_id', + }, + }, + { + date: { + field: 'abusech.malwarebazaar.first_seen', + target_field: 'threat.indicator.first_seen', + formats: ['yyyy-MM-dd HH:mm:ss z', 'yyyy-MM-dd HH:mm:ss Z', 'yyyy-MM-dd HH:mm:ss'], + if: 'ctx.abusech?.malwarebazaar?.first_seen != null', + }, + }, + { + date: { + field: 'abusech.malwarebazaar.last_seen', + target_field: 'threat.indicator.last_seen', + formats: ['yyyy-MM-dd HH:mm:ss z', 'yyyy-MM-dd HH:mm:ss Z', 'yyyy-MM-dd HH:mm:ss'], + if: 'ctx.abusech?.malwarebazaar?.last_seen != null', + }, + }, + { + set: { + field: 'threat.indicator.type', + value: 'file', + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.file_name', + target_field: 'threat.indicator.file.name', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.file_type_mime', + target_field: 'threat.indicator.file.mime_type', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.reporter', + target_field: 'threat.indicator.provider', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.origin_country', + target_field: 'threat.indicator.geo.country_iso_code', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.signature', + target_field: 'threat.software.alias', + ignore_missing: true, + }, + }, + { + foreach: { + field: 'abusech.malwarebazaar.code_sign', + ignore_missing: true, + processor: { + rename: { + field: '_ingest._value.subject_cn', + target_field: 'threat.indicator.file.x509.subject.common_name', + }, + }, + }, + }, + { + foreach: { + field: 'abusech.malwarebazaar.code_sign', + ignore_missing: true, + processor: { + rename: { + field: '_ingest._value.issuer_cn', + target_field: 'threat.indicator.file.x509.issuer.common_name', + }, + }, + }, + }, + { + foreach: { + field: 'abusech.malwarebazaar.code_sign', + ignore_missing: true, + processor: { + rename: { + field: '_ingest._value.algorithm', + target_field: 'threat.indicator.file.x509.public_key_algorithm', + }, + }, + }, + }, + { + foreach: { + field: 'abusech.malwarebazaar.code_sign', + ignore_missing: true, + processor: { + rename: { + field: '_ingest._value.valid_from', + target_field: 'threat.indicator.file.x509.not_before', + }, + }, + }, + }, + { + foreach: { + field: 'abusech.malwarebazaar.code_sign', + ignore_missing: true, + processor: { + rename: { + field: '_ingest._value.valid_to', + target_field: 'threat.indicator.file.x509.not_after', + }, + }, + }, + }, + { + foreach: { + field: 'abusech.malwarebazaar.code_sign', + ignore_missing: true, + processor: { + rename: { + field: '_ingest._value.serial_number', + target_field: 'threat.indicator.file.x509.serial_number', + }, + }, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.file_size', + target_field: 'threat.indicator.file.size', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.file_type', + target_field: 'threat.indicator.file.extension', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.md5_hash', + target_field: 'threat.indicator.file.hash.md5', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.sha256_hash', + target_field: 'threat.indicator.file.hash.sha256', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.sha1_hash', + target_field: 'threat.indicator.file.hash.sha1', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.sha3_384_hash', + target_field: 'threat.indicator.file.hash.sha384', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.imphash', + target_field: 'threat.indicator.file.pe.imphash', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.ssdeep', + target_field: 'threat.indicator.file.hash.ssdeep', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.tlsh', + target_field: 'threat.indicator.file.hash.tlsh', + ignore_missing: true, + }, + }, + { + rename: { + field: 'abusech.malwarebazaar.telfhash', + target_field: 'threat.indicator.file.elf.telfhash', + ignore_missing: true, + }, + }, + { + append: { + field: 'related.hash', + value: '{{ threat.indicator.file.hash.md5 }}', + if: 'ctx?.threat?.indicator?.file?.hash?.md5 != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{ threat.indicator.file.hash.sha256 }}', + if: 'ctx?.threat?.indicator?.file?.hash?.sha256 != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{ threat.indicator.file.hash.ssdeep }}', + if: 'ctx?.threat?.indicator?.file?.hash?.ssdeep != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{ threat.indicator.file.pe.imphash }}', + if: 'ctx?.threat?.indicator?.file?.pe?.imphash != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{ threat.indicator.file.elf.telfhash }}', + if: 'ctx?.threat?.indicator?.file?.elf?.telfhash != null', + }, + }, + { + append: { + field: 'related.hash', + value: '{{ threat.indicator.file.hash.tlsh }}', + if: 'ctx?.threat?.indicator?.file?.hash?.tlsh != null', + }, + }, + { + convert: { + field: 'threat.indicator.file.size', + type: 'long', + ignore_missing: true, + }, + }, + { + convert: { + field: 'abusech.malwarebazaar.intelligence.downloads', + type: 'long', + ignore_missing: true, + }, + }, + { + convert: { + field: 'abusech.malwarebazaar.intelligence.uploads', + type: 'long', + ignore_missing: true, + }, + }, + { + set: { + field: 'threat.indicator.type', + value: 'unknown', + if: 'ctx?.threat?.indicator?.type == null', + }, + }, + { + script: { + lang: 'painless', + if: 'ctx?.abusech != null', + source: + 'void handleMap(Map map) {\n for (def x : map.values()) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\nmap.values().removeIf(v -> v == null);\n}\nvoid handleList(List list) {\n for (def x : list) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\n}\nhandleMap(ctx);\n', + }, + }, + { + remove: { + field: 'event.original', + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))", + ignore_failure: true, + ignore_missing: true, + }, + }, + { + remove: { + field: ['abusech.malwarebazaar.first_seen', 'abusech.malwarebazaar.last_seen', 'message'], + ignore_missing: true, + }, + }, + ], + on_failure: [ + { + set: { + field: 'error.message', + value: '{{ _ingest.on_failure_message }}', + }, + }, + ], +}; diff --git a/x-pack/test/security_solution_cypress/pipelines/ti_abusech_url.ts b/x-pack/test/security_solution_cypress/pipelines/ti_abusech_url.ts new file mode 100644 index 0000000000000..e05db6b8a4771 --- /dev/null +++ b/x-pack/test/security_solution_cypress/pipelines/ti_abusech_url.ts @@ -0,0 +1,151 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Pipeline } from './pipeline'; + +export const tiAbusechUrl: Pipeline = { + name: 'logs-ti_abusech.url-1.3.1', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.0.0', + }, + }, + { + set: { + field: 'event.kind', + value: 'enrichment', + }, + }, + { + set: { + field: 'event.category', + value: 'threat', + }, + }, + { + set: { + field: 'event.type', + value: 'indicator', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + }, + }, + { + json: { + field: 'event.original', + target_field: 'abusech.url', + }, + }, + { + fingerprint: { + fields: ['abusech.url.id'], + target_field: '_id', + }, + }, + { + set: { + field: 'threat.indicator.type', + value: 'url', + }, + }, + { + date: { + field: 'abusech.url.date_added', + target_field: 'threat.indicator.first_seen', + formats: ['yyyy-MM-dd HH:mm:ss z', 'yyyy-MM-dd HH:mm:ss Z'], + if: 'ctx.abusech?.url?.date_added != null', + }, + }, + { + uri_parts: { + field: 'abusech.url.url', + target_field: 'threat.indicator.url', + keep_original: true, + remove_if_successful: true, + }, + }, + { + set: { + field: 'threat.indicator.url.full', + value: '{{{threat.indicator.url.original}}}', + ignore_empty_value: true, + }, + }, + { + rename: { + field: 'abusech.url.urlhaus_reference', + target_field: 'threat.indicator.reference', + ignore_missing: true, + }, + }, + { + grok: { + field: 'abusech.url.host', + patterns: ['(?:%{IP:threat.indicator.ip}|%{GREEDYDATA:threat.indicator.url.domain})'], + ignore_failure: true, + }, + }, + { + rename: { + field: 'abusech.url.reporter', + target_field: 'threat.indicator.provider', + ignore_missing: true, + }, + }, + { + set: { + field: 'threat.indicator.type', + value: 'unknown', + if: 'ctx?.threat?.indicator?.type == null', + }, + }, + { + convert: { + field: 'abusech.url.larted', + type: 'boolean', + ignore_missing: true, + }, + }, + { + script: { + lang: 'painless', + if: 'ctx?.abusech != null', + source: + 'void handleMap(Map map) {\n for (def x : map.values()) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\nmap.values().removeIf(v -> v == null);\n}\nvoid handleList(List list) {\n for (def x : list) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\n}\nhandleMap(ctx);\n', + }, + }, + { + remove: { + field: 'event.original', + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))", + ignore_failure: true, + ignore_missing: true, + }, + }, + { + remove: { + field: ['abusech.url.date_added', 'abusech.url.url', 'abusech.url.host', 'message'], + ignore_missing: true, + }, + }, + ], + on_failure: [ + { + set: { + field: 'error.message', + value: '{{ _ingest.on_failure_message }}', + }, + }, + ], +}; diff --git a/x-pack/test/security_solution_cypress/runner.ts b/x-pack/test/security_solution_cypress/runner.ts index 049ef0de6b727..fb58d22a40cdc 100644 --- a/x-pack/test/security_solution_cypress/runner.ts +++ b/x-pack/test/security_solution_cypress/runner.ts @@ -7,14 +7,38 @@ import Url from 'url'; +import { TransportResult } from '@elastic/elasticsearch'; import { FtrProviderContext } from '../common/ftr_provider_context'; +import { tiAbusechMalware } from './pipelines/ti_abusech_malware'; +import { tiAbusechMalwareBazaar } from './pipelines/ti_abusech_malware_bazaar'; +import { tiAbusechUrl } from './pipelines/ti_abusech_url'; export type { FtrProviderContext } from '../common/ftr_provider_context'; export async function SecuritySolutionConfigurableCypressTestRunner({ getService, }: FtrProviderContext) { + const log = getService('log'); const config = getService('config'); + const es = getService('es'); + + const pipelines = [tiAbusechMalware, tiAbusechMalwareBazaar, tiAbusechUrl]; + + log.info('configure pipelines'); + + for (const pipeline of pipelines) { + const res: TransportResult = await es.transport.request({ + method: 'PUT', + path: `_ingest/pipeline/${pipeline.name}`, + body: { + processors: pipeline.processors, + on_failure: pipeline.on_failure, + }, + }); + + log.info(`PUT pipeline ${pipeline.name}: ${res.statusCode}`); + } + return { FORCE_COLOR: '1', BASE_URL: Url.format(config.get('servers.kibana')), From 35ee22bbc157c8547454862926156f8517fa2dca Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 10 Sep 2024 20:54:04 -0500 Subject: [PATCH 06/52] [ci] Update version tracking for 7.17.25 (#192477) --- versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.json b/versions.json index 7eb4e7ce64975..4055d0be06df2 100644 --- a/versions.json +++ b/versions.json @@ -14,7 +14,7 @@ "previousMinor": true }, { - "version": "7.17.24", + "version": "7.17.25", "branch": "7.17", "previousMajor": true } From bc9f45de863523814c3fa5293d359a0747a625f2 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:07:14 +1000 Subject: [PATCH 07/52] [api-docs] 2024-09-11 Daily api_docs build (#192538) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/827 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 12 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.devdocs.json | 100 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.devdocs.json | 5637 ++---- api_docs/controls.mdx | 4 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.devdocs.json | 20 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.devdocs.json | 4 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.devdocs.json | 8 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 4 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.devdocs.json | 83 +- api_docs/embeddable.mdx | 4 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.devdocs.json | 108 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.devdocs.json | 350 +- api_docs/kbn_alerts_ui_shared.mdx | 4 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- .../kbn_cloud_security_posture_common.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ent_management_content_insights_public.mdx | 2 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 8 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- .../kbn_elastic_assistant_common.devdocs.json | 856 +- api_docs/kbn_elastic_assistant_common.mdx | 4 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.devdocs.json | 15217 ++++++++++++++++ api_docs/kbn_esql_ast.mdx | 4 +- api_docs/kbn_esql_utils.devdocs.json | 81 + api_docs/kbn_esql_utils.mdx | 4 +- ..._esql_validation_autocomplete.devdocs.json | 6 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- .../kbn_presentation_publishing.devdocs.json | 34 +- api_docs/kbn_presentation_publishing.mdx | 4 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- api_docs/kbn_security_solution_common.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ion_exception_list_components.devdocs.json | 10 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.devdocs.json | 4 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.devdocs.json | 84 +- api_docs/kbn_unified_data_table.mdx | 4 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.devdocs.json | 99 +- api_docs/logs_explorer.mdx | 4 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 22 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- .../saved_objects_management.devdocs.json | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.devdocs.json | 164 +- api_docs/visualizations.mdx | 2 +- 752 files changed, 18882 insertions(+), 5507 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 9f0ed0b082969..24855090cad83 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 833b793009882..a6a842c64b459 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 3814ab0610796..033db7fdcec51 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index ebcaba8096060..89550b4c8ce8f 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 5ab4b023c6294..5005bd9f53069 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 328be95af925f..3e91c50aada15 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -6108,8 +6108,6 @@ "<{ serviceName: ", "StringC", "; }>; query: ", - "IntersectionC", - "<[", "TypeC", "<{ environment: ", "UnionC", @@ -6129,13 +6127,7 @@ "section": "def-common.NonEmptyStringBrand", "text": "NonEmptyStringBrand" }, - ">]>; }>, ", - "TypeC", - "<{ start: ", - "Type", - "; end: ", - "Type", - "; }>]>; }> | undefined; handler: ({}: ", + ">]>; }>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", " & { params: { path: { serviceName: string; }; query: { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", "Branded", @@ -6147,7 +6139,7 @@ "section": "def-common.NonEmptyStringBrand", "text": "NonEmptyStringBrand" }, - ">; } & { start: number; end: number; }; }; }) => Promise<{ metrics: { latency: number; throughput: number; failedTransactionRate: number; logRate: number; logErrorRate: number; }; serviceName: string; agentName: ", + ">; }; }; }) => Promise<{ metrics: { latency: number; throughput: number; failedTransactionRate: number; logRate: number; logErrorRate: number; }; serviceName: string; agentName: ", { "pluginId": "@kbn/elastic-agent-utils", "scope": "common", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index b9079fc465e98..5a98871616c80 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index ede376dfb01e7..62074dfd57176 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 9887985298e0d..51053380bb20a 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index ca0d878e90dd4..3267f7aae0b59 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 73679e70714cd..f5cf31954e28e 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.devdocs.json b/api_docs/cases.devdocs.json index 0fb73ff68ab4f..f52790e2615e0 100644 --- a/api_docs/cases.devdocs.json +++ b/api_docs/cases.devdocs.json @@ -345,7 +345,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); settings: { syncAlerts: boolean; }; owner: string; } & { assignees?: { uid: string; }[] | undefined; severity?: ", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; } & { name: string; })); settings: { syncAlerts: boolean; }; owner: string; } & { assignees?: { uid: string; }[] | undefined; severity?: ", { "pluginId": "cases", "scope": "common", @@ -557,7 +565,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); severity: ", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; } & { name: string; })); severity: ", { "pluginId": "cases", "scope": "common", @@ -1926,7 +1942,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); severity: ", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; } & { name: string; })); severity: ", { "pluginId": "cases", "scope": "common", @@ -2120,7 +2144,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); settings: { syncAlerts: boolean; }; owner: string; } & { assignees?: { uid: string; }[] | undefined; severity?: ", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; } & { name: string; })); settings: { syncAlerts: boolean; }; owner: string; } & { assignees?: { uid: string; }[] | undefined; severity?: ", { "pluginId": "cases", "scope": "common", @@ -2203,7 +2235,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); severity: ", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; } & { name: string; })); severity: ", { "pluginId": "cases", "scope": "common", @@ -2429,7 +2469,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); severity: ", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; } & { name: string; })); severity: ", { "pluginId": "cases", "scope": "common", @@ -2608,7 +2656,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; name: string; }; severity: ", + ".swimlane; fields: { caseId: string | null; } | null; name: string; } | { id: string; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; name: string; }; severity: ", { "pluginId": "cases", "scope": "common", @@ -2823,7 +2879,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; name: string; }; severity: ", + ".swimlane; fields: { caseId: string | null; } | null; name: string; } | { id: string; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; name: string; }; severity: ", { "pluginId": "cases", "scope": "common", @@ -3384,7 +3448,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); } & { assignees: { uid: string; }[]; description: string; status: string; severity: string; tags: string[]; title: string; settings: { syncAlerts: boolean; }; owner: string; } & { category?: string | null | undefined; customFields?: ({ key: string; type: ", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; } & { name: string; })); } & { assignees: { uid: string; }[]; description: string; status: string; severity: string; tags: string[]; title: string; settings: { syncAlerts: boolean; }; owner: string; } & { category?: string | null | undefined; customFields?: ({ key: string; type: ", "CustomFieldTypes", ".TEXT; value: string | null; } | { key: string; type: ", "CustomFieldTypes", @@ -3444,7 +3516,15 @@ "section": "def-common.ConnectorTypes", "text": "ConnectorTypes" }, - ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); }; } | { type: \"pushed\"; payload: { externalService: { connector_id: string; } & { connector_name: string; external_id: string; external_title: string; external_url: string; pushed_at: string; pushed_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; }; }; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; action: \"create\" | \"update\" | \"delete\" | \"add\" | \"push_to_service\"; }) & { comment_id: string | null; }) & { id: string; version: string; })[]; page: number; perPage: number; total: number; }" + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ConnectorTypes", + "text": "ConnectorTypes" + }, + ".theHive; fields: { tlp: number | null; } | null; } & { name: string; })); }; } | { type: \"pushed\"; payload: { externalService: { connector_id: string; } & { connector_name: string; external_id: string; external_title: string; external_url: string; pushed_at: string; pushed_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; }; }; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; action: \"create\" | \"update\" | \"delete\" | \"add\" | \"push_to_service\"; }) & { comment_id: string | null; }) & { id: string; version: string; })[]; page: number; perPage: number; total: number; }" ], "path": "x-pack/plugins/cases/common/types/api/user_action/v1.ts", "deprecated": false, diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 985304ad2062b..c52a9eaa37fcf 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index a01acd83417a8..b08b5a41d0929 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index a2edcf2cebb72..7b3fcbf4b0e3c 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index be85a6933e8a2..0c4c8df2deb7a 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index 1f7a827a8957c..2855653f79e0d 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 91fff71164390..e156dca38d884 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 8d5ccd73b42ac..df489ccf8223f 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 6aeeea9edba91..7675ecd3720c5 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index 1c247c2e45f8c..cd6fefca7b175 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.devdocs.json b/api_docs/controls.devdocs.json index fa81eb3778122..2ebcd4787c9ad 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -645,7 +645,7 @@ "section": "def-common.ControlGroupInput", "text": "ControlGroupInput" }, - ">, \"id\" | \"chainingSystem\" | \"ignoreParentSettings\" | \"controlStyle\" | \"panels\" | \"showApplySelections\">" + ">, \"id\" | \"chainingSystem\" | \"ignoreParentSettings\" | \"panels\" | \"controlStyle\" | \"showApplySelections\">" ], "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", "deprecated": false, @@ -806,13 +806,7 @@ "description": [], "signature": [ "(controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" - }, + "AddDataControlProps", ") => Promise<", { "pluginId": "embeddable", @@ -859,13 +853,7 @@ "label": "controlProps", "description": [], "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" - } + "AddDataControlProps" ], "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", "deprecated": false, @@ -884,13 +872,7 @@ "description": [], "signature": [ "(controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddOptionsListControlProps", - "text": "AddOptionsListControlProps" - }, + "AddOptionsListControlProps", ") => Promise<", { "pluginId": "embeddable", @@ -937,13 +919,7 @@ "label": "controlProps", "description": [], "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddOptionsListControlProps", - "text": "AddOptionsListControlProps" - } + "AddOptionsListControlProps" ], "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", "deprecated": false, @@ -962,13 +938,7 @@ "description": [], "signature": [ "(controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddRangeSliderControlProps", - "text": "AddRangeSliderControlProps" - }, + "AddRangeSliderControlProps", ") => Promise<", { "pluginId": "embeddable", @@ -1015,13 +985,7 @@ "label": "controlProps", "description": [], "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddRangeSliderControlProps", - "text": "AddRangeSliderControlProps" - } + "AddRangeSliderControlProps" ], "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", "deprecated": false, @@ -1278,31 +1242,13 @@ "<", "ControlInput", ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, + "ControlOutput", ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, + "ControlEmbeddable", "<", "ControlInput", ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, + "ControlOutput", ">, ", { "pluginId": "savedObjectsFinder", @@ -1359,31 +1305,13 @@ "<", "ControlInput", ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, + "ControlOutput", ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, + "ControlEmbeddable", "<", "ControlInput", ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, + "ControlOutput", ">, ", { "pluginId": "savedObjectsFinder", @@ -2108,3396 +2036,482 @@ } ], "initialIsOpen": false - }, + } + ], + "functions": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable", - "type": "Class", + "id": "def-public.LazyControlGroupRenderer", + "type": "Function", "tags": [], - "label": "OptionsListEmbeddable", + "label": "LazyControlGroupRenderer", "description": [], "signature": [ + "(props: ", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.OptionsListEmbeddable", - "text": "OptionsListEmbeddable" + "section": "def-public.ControlGroupRendererProps", + "text": "ControlGroupRendererProps" }, - " extends ", + ") => JSX.Element" + ], + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer_lazy.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.Embeddable", - "text": "Embeddable" + "parentPluginId": "controls", + "id": "def-public.LazyControlGroupRenderer.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRendererProps", + "text": "ControlGroupRendererProps" + } + ], + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer_lazy.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupCreationOptions", + "type": "Interface", + "tags": [], + "label": "ControlGroupCreationOptions", + "description": [], + "path": "src/plugins/controls/public/control_group/external_api/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupCreationOptions.initialState", + "type": "Object", + "tags": [], + "label": "initialState", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">> | undefined" + ], + "path": "src/plugins/controls/public/control_group/external_api/types.ts", + "deprecated": false, + "trackAdoption": false }, - "<", + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupCreationOptions.editorConfig", + "type": "Object", + "tags": [], + "label": "editorConfig", + "description": [], + "signature": [ + "ControlGroupEditorConfig", + " | undefined" + ], + "path": "src/plugins/controls/public/control_group/external_api/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupInput", + "type": "Interface", + "tags": [], + "label": "ControlGroupInput", + "description": [], + "signature": [ { "pluginId": "controls", "scope": "common", "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" + "section": "def-common.ControlGroupInput", + "text": "ControlGroupInput" }, - ", ", + " extends ", { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" + "pluginId": "embeddable", + "scope": "common", + "docId": "kibEmbeddablePluginApi", + "section": "def-common.EmbeddableInput", + "text": "EmbeddableInput" }, - ", any> implements ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.CanClearSelections", - "text": "CanClearSelections" - } + ",", + "ControlInput" ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.type", - "type": "string", + "id": "def-public.ControlGroupInput.chainingSystem", + "type": "CompoundType", "tags": [], - "label": "type", + "label": "chainingSystem", "description": [], "signature": [ - "\"optionsListControl\"" + "\"NONE\" | \"HIERARCHICAL\"" ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.deferEmbeddableLoad", - "type": "boolean", + "id": "def-public.ControlGroupInput.defaultControlWidth", + "type": "CompoundType", + "tags": [], + "label": "defaultControlWidth", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlWidth", + "text": "ControlWidth" + }, + " | undefined" + ], + "path": "src/plugins/controls/common/control_group/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupInput.defaultControlGrow", + "type": "CompoundType", + "tags": [], + "label": "defaultControlGrow", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/control_group/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupInput.controlStyle", + "type": "CompoundType", "tags": [], - "label": "deferEmbeddableLoad", + "label": "controlStyle", "description": [], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "signature": [ + "\"twoLine\" | \"oneLine\"" + ], + "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.parent", + "id": "def-public.ControlGroupInput.panels", "type": "Object", "tags": [], - "label": "parent", + "label": "panels", "description": [], "signature": [ { "pluginId": "controls", - "scope": "public", + "scope": "common", "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" + "section": "def-common.ControlsPanels", + "text": "ControlsPanels" } ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.select", - "type": "Function", + "id": "def-public.ControlGroupInput.showApplySelections", + "type": "CompoundType", "tags": [], - "label": "select", + "label": "showApplySelections", "description": [], "signature": [ - "(selector: (state: ", - "OptionsListReduxState", - ") => Selected, equalityFn?: ((previous: Selected, next: Selected) => boolean) | undefined) => Selected" + "boolean | undefined" ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.select.$1", - "type": "Function", - "tags": [], - "label": "selector", - "description": [], - "signature": [ - "(state: ReduxStateType) => Selected" - ], - "path": "src/plugins/presentation_util/public/redux_tools/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.select.$1.$1", - "type": "Uncategorized", - "tags": [], - "label": "state", - "description": [], - "signature": [ - "ReduxStateType" - ], - "path": "src/plugins/presentation_util/public/redux_tools/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.select.$2", - "type": "Function", - "tags": [], - "label": "equalityFn", - "description": [], - "signature": [ - "((previous: Selected, next: Selected) => boolean) | undefined" - ], - "path": "src/plugins/presentation_util/public/redux_tools/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupRendererProps", + "type": "Interface", + "tags": [], + "label": "ControlGroupRendererProps", + "description": [], + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.getState", + "id": "def-public.ControlGroupRendererProps.onApiAvailable", "type": "Function", "tags": [], - "label": "getState", - "description": [], - "signature": [ - "() => ", - "OptionsListReduxState" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.dispatch", - "type": "Object", - "tags": [], - "label": "dispatch", + "label": "onApiAvailable", "description": [], "signature": [ - "{ deselectOption: (payload: ", - "OptionsListSelection", - ") => void; setSearchString: (payload: string) => void; setAllowExpensiveQueries: (payload: boolean) => void; setInvalidSelectionWarningOpen: (payload: boolean) => void; setPopoverOpen: (payload: boolean) => void; setSort: (payload: Partial<", - "OptionsListSortingType", - ">) => void; selectExists: (payload: boolean) => void; selectOption: (payload: ", - "OptionsListSelection", - ") => void; replaceSelection: (payload: ", - "OptionsListSelection", - ") => void; clearSelections: (payload: unknown) => void; setExclude: (payload: boolean) => void; clearValidAndInvalidSelections: (payload: unknown) => void; setValidAndInvalidSelections: (payload: Pick<", - "OptionsListComponentState", - ", \"validSelections\" | \"invalidSelections\">) => void; setErrorMessage: (payload: string | undefined) => void; setLoading: (payload: boolean) => void; setField: (payload: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.FieldSpec", - "text": "FieldSpec" - }, - " | undefined) => void; updateQueryResults: (payload: Pick<", - "OptionsListComponentState", - ", \"validSelections\" | \"invalidSelections\" | \"availableOptions\" | \"totalCardinality\">) => void; publishFilters: (payload: ", + "(api: ", { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRendererApi", + "text": "ControlGroupRendererApi" }, - "[] | undefined) => void; setDataViewId: (payload: string | undefined) => void; setExplicitInputDataViewId: (payload: string) => void; }" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.onStateChange", - "type": "Function", - "tags": [], - "label": "onStateChange", - "description": [], - "signature": [ - "(listener: () => void) => ", - "Unsubscribe" + ") => void" ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false, - "returnComment": [], "children": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.onStateChange.$1", - "type": "Function", + "id": "def-public.ControlGroupRendererProps.onApiAvailable.$1", + "type": "CompoundType", "tags": [], - "label": "listener", + "label": "api", "description": [], "signature": [ - "() => void" + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRendererApi", + "text": "ControlGroupRendererApi" + } ], - "path": "node_modules/redux/index.d.ts", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false, - "returnComment": [], - "children": [] + "isRequired": true } - ] + ], + "returnComment": [] }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.Unnamed", + "id": "def-public.ControlGroupRendererProps.getCreationOptions", "type": "Function", "tags": [], - "label": "Constructor", + "label": "getCreationOptions", "description": [], "signature": [ - "any" + "((initialState: Partial<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, builder: { addDataControlFromField: (controlGroupState: Partial<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, controlState: ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.DefaultDataControlState", + "text": "DefaultDataControlState" + }, + ", controlId?: string | undefined) => Promise; addOptionsListControl: (controlGroupState: Partial<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, controlState: ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.OptionsListControlState", + "text": "OptionsListControlState" + }, + ", controlId?: string | undefined) => void; addRangeSliderControl: (controlGroupState: Partial<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, controlState: ", + "RangesliderControlState", + ", controlId?: string | undefined) => void; addTimeSliderControl: (controlGroupState: Partial<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, controlId?: string | undefined) => void; }) => Promise>) | undefined" ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.Unnamed.$1", + "id": "def-public.ControlGroupRendererProps.getCreationOptions.$1", "type": "Object", "tags": [], - "label": "reduxToolsPackage", + "label": "initialState", "description": [], "signature": [ + "Partial<", { - "pluginId": "presentationUtil", + "pluginId": "controls", "scope": "public", - "docId": "kibPresentationUtilPluginApi", - "section": "def-public.ReduxToolsPackage", - "text": "ReduxToolsPackage" - } + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>" ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false, "isRequired": true }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.Unnamed.$2", + "id": "def-public.ControlGroupRendererProps.getCreationOptions.$2", "type": "Object", "tags": [], - "label": "input", + "label": "builder", "description": [], "signature": [ + "{ addDataControlFromField: (controlGroupState: Partial<", { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - } - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.Unnamed.$3", - "type": "CompoundType", - "tags": [], - "label": "output", - "description": [], - "signature": [ + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, controlState: ", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - } - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.Unnamed.$4", - "type": "Object", - "tags": [], - "label": "parent", - "description": [], - "signature": [ + "section": "def-public.DefaultDataControlState", + "text": "DefaultDataControlState" + }, + ", controlId?: string | undefined) => Promise; addOptionsListControl: (controlGroupState: Partial<", { - "pluginId": "embeddable", + "pluginId": "controls", "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IContainer", - "text": "IContainer" + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" }, - "<{}, ", + "<", + "DefaultControlState", + ">>, controlState: ", { - "pluginId": "embeddable", + "pluginId": "controls", "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerInput", - "text": "ContainerInput" + "docId": "kibControlsPluginApi", + "section": "def-public.OptionsListControlState", + "text": "OptionsListControlState" }, - "<{}>, ", + ", controlId?: string | undefined) => void; addRangeSliderControl: (controlGroupState: Partial<", { - "pluginId": "embeddable", + "pluginId": "controls", "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerOutput", - "text": "ContainerOutput" + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" }, - "> | undefined" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.selectionsToFilters", - "type": "Function", - "tags": [], - "label": "selectionsToFilters", - "description": [], - "signature": [ - "(input: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">) => Promise<", - "ControlFilterOutput", - ">" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.selectionsToFilters.$1", - "type": "Object", - "tags": [], - "label": "input", - "description": [], - "signature": [ - "Partial<", + "<", + "DefaultControlState", + ">>, controlState: ", + "RangesliderControlState", + ", controlId?: string | undefined) => void; addTimeSliderControl: (controlGroupState: Partial<", { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.clearSelections", - "type": "Function", - "tags": [], - "label": "clearSelections", - "description": [], - "signature": [ - "() => void" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.reload", - "type": "Function", - "tags": [], - "label": "reload", - "description": [], - "signature": [ - "() => void" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.destroy", - "type": "Function", - "tags": [], - "label": "destroy", - "description": [], - "signature": [ - "() => void" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.render", - "type": "Function", - "tags": [], - "label": "render", - "description": [], - "signature": [ - "(node: HTMLElement) => void" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.render.$1", - "type": "Object", - "tags": [], - "label": "node", - "description": [], - "signature": [ - "HTMLElement" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddable.isChained", - "type": "Function", - "tags": [], - "label": "isChained", - "description": [], - "signature": [ - "() => boolean" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory", - "type": "Class", - "tags": [], - "label": "OptionsListEmbeddableFactory", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.OptionsListEmbeddableFactory", - "text": "OptionsListEmbeddableFactory" - }, - " implements ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableFactoryDefinition", - "text": "EmbeddableFactoryDefinition" - }, - "<", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableOutput", - "text": "EmbeddableOutput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IEmbeddable", - "text": "IEmbeddable" - }, - "<", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableOutput", - "text": "EmbeddableOutput" - }, - ", any>, ", - { - "pluginId": "savedObjectsFinder", - "scope": "common", - "docId": "kibSavedObjectsFinderPluginApi", - "section": "def-common.FinderAttributes", - "text": "FinderAttributes" - }, - ">,", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.IEditableControlFactory", - "text": "IEditableControlFactory" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.type", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.canCreateNew", - "type": "Function", - "tags": [], - "label": "canCreateNew", - "description": [], - "signature": [ - "() => boolean" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.Unnamed", - "type": "Function", - "tags": [], - "label": "Constructor", - "description": [], - "signature": [ - "any" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.create", - "type": "Function", - "tags": [], - "label": "create", - "description": [], - "signature": [ - "(initialInput: ", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ", parent?: ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IContainer", - "text": "IContainer" - }, - "<{}, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerInput", - "text": "ContainerInput" - }, - "<{}>, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerOutput", - "text": "ContainerOutput" - }, - "> | undefined) => Promise<", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.OptionsListEmbeddable", - "text": "OptionsListEmbeddable" - }, - ">" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.create.$1", - "type": "Object", - "tags": [], - "label": "initialInput", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - } - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.create.$2", - "type": "Object", - "tags": [], - "label": "parent", - "description": [], - "signature": [ - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IContainer", - "text": "IContainer" - }, - "<{}, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerInput", - "text": "ContainerInput" - }, - "<{}>, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerOutput", - "text": "ContainerOutput" - }, - "> | undefined" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.presaveTransformFunction", - "type": "Function", - "tags": [], - "label": "presaveTransformFunction", - "description": [], - "signature": [ - "(newInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">, embeddable?: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, - "> | undefined) => Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.presaveTransformFunction.$1", - "type": "Object", - "tags": [], - "label": "newInput", - "description": [], - "signature": [ - "Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.presaveTransformFunction.$2", - "type": "Object", - "tags": [], - "label": "embeddable", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, - "> | undefined" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.isFieldCompatible", - "type": "Function", - "tags": [], - "label": "isFieldCompatible", - "description": [], - "signature": [ - "(field: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - }, - ") => boolean" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.isFieldCompatible.$1", - "type": "Object", - "tags": [], - "label": "field", - "description": [], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - } - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.controlEditorOptionsComponent", - "type": "Function", - "tags": [], - "label": "controlEditorOptionsComponent", - "description": [], - "signature": [ - "({ initialInput, onChange, fieldType, }: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEditorProps", - "text": "ControlEditorProps" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">) => JSX.Element" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.controlEditorOptionsComponent.$1", - "type": "Object", - "tags": [], - "label": "__0", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEditorProps", - "text": "ControlEditorProps" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/options_list/components/options_list_editor_options.tsx", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.isEditable", - "type": "Function", - "tags": [], - "label": "isEditable", - "description": [], - "signature": [ - "() => Promise" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.getDisplayName", - "type": "Function", - "tags": [], - "label": "getDisplayName", - "description": [], - "signature": [ - "() => string" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.getIconType", - "type": "Function", - "tags": [], - "label": "getIconType", - "description": [], - "signature": [ - "() => string" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.getDescription", - "type": "Function", - "tags": [], - "label": "getDescription", - "description": [], - "signature": [ - "() => string" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.inject", - "type": "Function", - "tags": [], - "label": "inject", - "description": [], - "signature": [ - "(state: ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableStateWithType", - "text": "EmbeddableStateWithType" - }, - ", references: ", - { - "pluginId": "@kbn/core-saved-objects-common", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectReference", - "text": "SavedObjectReference" - }, - "[]) => ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableStateWithType", - "text": "EmbeddableStateWithType" - } - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.inject.$1", - "type": "Uncategorized", - "tags": [], - "label": "state", - "description": [], - "signature": [ - "P" - ], - "path": "src/plugins/kibana_utils/common/persistable_state/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.inject.$2", - "type": "Array", - "tags": [], - "label": "references", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-common", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectReference", - "text": "SavedObjectReference" - }, - "[]" - ], - "path": "src/plugins/kibana_utils/common/persistable_state/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.extract", - "type": "Function", - "tags": [], - "label": "extract", - "description": [], - "signature": [ - "(state: ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableStateWithType", - "text": "EmbeddableStateWithType" - }, - ") => { state: ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableStateWithType", - "text": "EmbeddableStateWithType" - }, - "; references: ", - { - "pluginId": "@kbn/core-saved-objects-common", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectReference", - "text": "SavedObjectReference" - }, - "[]; }" - ], - "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableFactory.extract.$1", - "type": "Uncategorized", - "tags": [], - "label": "state", - "description": [], - "signature": [ - "P" - ], - "path": "src/plugins/kibana_utils/common/persistable_state/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable", - "type": "Class", - "tags": [], - "label": "RangeSliderEmbeddable", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.RangeSliderEmbeddable", - "text": "RangeSliderEmbeddable" - }, - " extends ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.Embeddable", - "text": "Embeddable" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, - ", any> implements ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.CanClearSelections", - "text": "CanClearSelections" - } - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.type", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "\"rangeSliderControl\"" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.deferEmbeddableLoad", - "type": "boolean", - "tags": [], - "label": "deferEmbeddableLoad", - "description": [], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.parent", - "type": "Object", - "tags": [], - "label": "parent", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" - } - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.select", - "type": "Function", - "tags": [], - "label": "select", - "description": [], - "signature": [ - "(selector: (state: ", - "RangeSliderReduxState", - ") => Selected, equalityFn?: ((previous: Selected, next: Selected) => boolean) | undefined) => Selected" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.select.$1", - "type": "Function", - "tags": [], - "label": "selector", - "description": [], - "signature": [ - "(state: ReduxStateType) => Selected" - ], - "path": "src/plugins/presentation_util/public/redux_tools/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.select.$1.$1", - "type": "Uncategorized", - "tags": [], - "label": "state", - "description": [], - "signature": [ - "ReduxStateType" - ], - "path": "src/plugins/presentation_util/public/redux_tools/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.select.$2", - "type": "Function", - "tags": [], - "label": "equalityFn", - "description": [], - "signature": [ - "((previous: Selected, next: Selected) => boolean) | undefined" - ], - "path": "src/plugins/presentation_util/public/redux_tools/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.getState", - "type": "Function", - "tags": [], - "label": "getState", - "description": [], - "signature": [ - "() => ", - "RangeSliderReduxState" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.dispatch", - "type": "Object", - "tags": [], - "label": "dispatch", - "description": [], - "signature": [ - "{ setSelectedRange: (payload: ", - "RangeValue", - ") => void; setField: (payload: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.FieldSpec", - "text": "FieldSpec" - }, - " | undefined) => void; setDataViewId: (payload: string | undefined) => void; setErrorMessage: (payload: string | undefined) => void; setLoading: (payload: boolean) => void; setMinMax: (payload: { min?: number | undefined; max?: number | undefined; }) => void; publishFilters: (payload: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined) => void; setIsInvalid: (payload: boolean) => void; }" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.onStateChange", - "type": "Function", - "tags": [], - "label": "onStateChange", - "description": [], - "signature": [ - "(listener: () => void) => ", - "Unsubscribe" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.onStateChange.$1", - "type": "Function", - "tags": [], - "label": "listener", - "description": [], - "signature": [ - "() => void" - ], - "path": "node_modules/redux/index.d.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [] - } - ] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.Unnamed", - "type": "Function", - "tags": [], - "label": "Constructor", - "description": [], - "signature": [ - "any" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.Unnamed.$1", - "type": "Object", - "tags": [], - "label": "reduxToolsPackage", - "description": [], - "signature": [ - { - "pluginId": "presentationUtil", - "scope": "public", - "docId": "kibPresentationUtilPluginApi", - "section": "def-public.ReduxToolsPackage", - "text": "ReduxToolsPackage" - } - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.Unnamed.$2", - "type": "Object", - "tags": [], - "label": "input", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - } - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.Unnamed.$3", - "type": "CompoundType", - "tags": [], - "label": "output", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - } - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.Unnamed.$4", - "type": "Object", - "tags": [], - "label": "parent", - "description": [], - "signature": [ - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IContainer", - "text": "IContainer" - }, - "<{}, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerInput", - "text": "ContainerInput" - }, - "<{}>, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerOutput", - "text": "ContainerOutput" - }, - "> | undefined" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.selectionsToFilters", - "type": "Function", - "tags": [], - "label": "selectionsToFilters", - "description": [], - "signature": [ - "(input: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ">) => Promise<", - "ControlFilterOutput", - ">" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.selectionsToFilters.$1", - "type": "Object", - "tags": [], - "label": "input", - "description": [], - "signature": [ - "Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.clearSelections", - "type": "Function", - "tags": [], - "label": "clearSelections", - "description": [], - "signature": [ - "() => void" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.reload", - "type": "Function", - "tags": [], - "label": "reload", - "description": [], - "signature": [ - "() => Promise" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.destroy", - "type": "Function", - "tags": [], - "label": "destroy", - "description": [], - "signature": [ - "() => void" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.render", - "type": "Function", - "tags": [], - "label": "render", - "description": [], - "signature": [ - "(node: HTMLElement) => void" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.render.$1", - "type": "Object", - "tags": [], - "label": "node", - "description": [], - "signature": [ - "HTMLElement" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddable.isChained", - "type": "Function", - "tags": [], - "label": "isChained", - "description": [], - "signature": [ - "() => boolean" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory", - "type": "Class", - "tags": [], - "label": "RangeSliderEmbeddableFactory", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.RangeSliderEmbeddableFactory", - "text": "RangeSliderEmbeddableFactory" - }, - " implements ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableFactoryDefinition", - "text": "EmbeddableFactoryDefinition" - }, - "<", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableOutput", - "text": "EmbeddableOutput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IEmbeddable", - "text": "IEmbeddable" - }, - "<", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableOutput", - "text": "EmbeddableOutput" - }, - ", any>, ", - { - "pluginId": "savedObjectsFinder", - "scope": "common", - "docId": "kibSavedObjectsFinderPluginApi", - "section": "def-common.FinderAttributes", - "text": "FinderAttributes" - }, - ">,", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.IEditableControlFactory", - "text": "IEditableControlFactory" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.type", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.getDisplayName", - "type": "Function", - "tags": [], - "label": "getDisplayName", - "description": [], - "signature": [ - "() => string" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.getDescription", - "type": "Function", - "tags": [], - "label": "getDescription", - "description": [], - "signature": [ - "() => string" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.getIconType", - "type": "Function", - "tags": [], - "label": "getIconType", - "description": [], - "signature": [ - "() => string" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.canCreateNew", - "type": "Function", - "tags": [], - "label": "canCreateNew", - "description": [], - "signature": [ - "() => boolean" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.isEditable", - "type": "Function", - "tags": [], - "label": "isEditable", - "description": [], - "signature": [ - "() => Promise" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.controlEditorOptionsComponent", - "type": "Function", - "tags": [], - "label": "controlEditorOptionsComponent", - "description": [], - "signature": [ - "({ initialInput, onChange, setControlEditorValid, }: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEditorProps", - "text": "ControlEditorProps" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ">) => JSX.Element" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.controlEditorOptionsComponent.$1", - "type": "Object", - "tags": [], - "label": "__0", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEditorProps", - "text": "ControlEditorProps" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/range_slider/components/range_slider_editor_options.tsx", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.create", - "type": "Function", - "tags": [], - "label": "create", - "description": [], - "signature": [ - "(initialInput: ", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ", parent?: ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IContainer", - "text": "IContainer" - }, - "<{}, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerInput", - "text": "ContainerInput" - }, - "<{}>, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerOutput", - "text": "ContainerOutput" - }, - "> | undefined) => Promise<", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.RangeSliderEmbeddable", - "text": "RangeSliderEmbeddable" - }, - ">" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.create.$1", - "type": "Object", - "tags": [], - "label": "initialInput", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - } - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.create.$2", - "type": "Object", - "tags": [], - "label": "parent", - "description": [], - "signature": [ - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IContainer", - "text": "IContainer" - }, - "<{}, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerInput", - "text": "ContainerInput" - }, - "<{}>, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerOutput", - "text": "ContainerOutput" - }, - "> | undefined" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.presaveTransformFunction", - "type": "Function", - "tags": [], - "label": "presaveTransformFunction", - "description": [], - "signature": [ - "(newInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ">, embeddable?: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, - "> | undefined) => Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.presaveTransformFunction.$1", - "type": "Object", - "tags": [], - "label": "newInput", - "description": [], - "signature": [ - "Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.presaveTransformFunction.$2", - "type": "Object", - "tags": [], - "label": "embeddable", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, - "<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - ", ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" - }, - "> | undefined" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.isFieldCompatible", - "type": "Function", - "tags": [], - "label": "isFieldCompatible", - "description": [], - "signature": [ - "(field: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - }, - ") => boolean" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.isFieldCompatible.$1", - "type": "Object", - "tags": [], - "label": "field", - "description": [], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - } - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.inject", - "type": "Function", - "tags": [], - "label": "inject", - "description": [], - "signature": [ - "(state: ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableStateWithType", - "text": "EmbeddableStateWithType" - }, - ", references: ", - { - "pluginId": "@kbn/core-saved-objects-common", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectReference", - "text": "SavedObjectReference" - }, - "[]) => ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableStateWithType", - "text": "EmbeddableStateWithType" - } - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.inject.$1", - "type": "Uncategorized", - "tags": [], - "label": "state", - "description": [], - "signature": [ - "P" - ], - "path": "src/plugins/kibana_utils/common/persistable_state/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.inject.$2", - "type": "Array", - "tags": [], - "label": "references", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-common", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectReference", - "text": "SavedObjectReference" - }, - "[]" - ], - "path": "src/plugins/kibana_utils/common/persistable_state/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.extract", - "type": "Function", - "tags": [], - "label": "extract", - "description": [], - "signature": [ - "(state: ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableStateWithType", - "text": "EmbeddableStateWithType" - }, - ") => { state: ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableStateWithType", - "text": "EmbeddableStateWithType" - }, - "; references: ", - { - "pluginId": "@kbn/core-saved-objects-common", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectReference", - "text": "SavedObjectReference" - }, - "[]; }" - ], - "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable_factory.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableFactory.extract.$1", - "type": "Uncategorized", - "tags": [], - "label": "state", - "description": [], - "signature": [ - "P" - ], - "path": "src/plugins/kibana_utils/common/persistable_state/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ], - "initialIsOpen": false - } - ], - "functions": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRenderer", - "type": "Function", - "tags": [], - "label": "ControlGroupRenderer", - "description": [], - "signature": [ - "React.ForwardRefExoticComponent<", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupRendererProps", - "text": "ControlGroupRendererProps" - }, - " & React.RefAttributes<", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AwaitingControlGroupAPI", - "text": "AwaitingControlGroupAPI" - }, - ">>" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRenderer.$1", - "type": "Uncategorized", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P" - ], - "path": "node_modules/@types/react/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - } - ], - "interfaces": [ - { - "parentPluginId": "controls", - "id": "def-public.AddDataControlProps", - "type": "Interface", - "tags": [], - "label": "AddDataControlProps", - "description": [], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.AddDataControlProps.controlId", - "type": "string", - "tags": [], - "label": "controlId", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.AddDataControlProps.dataViewId", - "type": "string", - "tags": [], - "label": "dataViewId", - "description": [], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.AddDataControlProps.fieldName", - "type": "string", - "tags": [], - "label": "fieldName", - "description": [], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.AddDataControlProps.grow", - "type": "CompoundType", - "tags": [], - "label": "grow", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.AddDataControlProps.title", - "type": "string", - "tags": [], - "label": "title", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.AddDataControlProps.width", - "type": "CompoundType", - "tags": [], - "label": "width", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlWidth", - "text": "ControlWidth" - }, - " | undefined" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.CanClearSelections", - "type": "Interface", - "tags": [], - "label": "CanClearSelections", - "description": [], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.CanClearSelections.clearSelections", - "type": "Function", - "tags": [], - "label": "clearSelections", - "description": [], - "signature": [ - "() => void" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlEditorProps", - "type": "Interface", - "tags": [], - "label": "ControlEditorProps", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEditorProps", - "text": "ControlEditorProps" - }, - "" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlEditorProps.initialInput", - "type": "Object", - "tags": [], - "label": "initialInput", - "description": [], - "signature": [ - "Partial | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlEditorProps.fieldType", - "type": "string", - "tags": [], - "label": "fieldType", - "description": [], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlEditorProps.onChange", - "type": "Function", - "tags": [], - "label": "onChange", - "description": [], - "signature": [ - "(partial: Partial) => void" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlEditorProps.onChange.$1", - "type": "Object", - "tags": [], - "label": "partial", - "description": [], - "signature": [ - "Partial" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlEditorProps.setControlEditorValid", - "type": "Function", - "tags": [], - "label": "setControlEditorValid", - "description": [], - "signature": [ - "(isValid: boolean) => void" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlEditorProps.setControlEditorValid.$1", - "type": "boolean", - "tags": [], - "label": "isValid", - "description": [], - "signature": [ - "boolean" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlEmbeddable", - "type": "Interface", - "tags": [], - "label": "ControlEmbeddable", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, - " extends ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IEmbeddable", - "text": "IEmbeddable" - }, - "" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlEmbeddable.isChained", - "type": "Function", - "tags": [], - "label": "isChained", - "description": [], - "signature": [ - "(() => boolean) | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlEmbeddable.renderPrepend", - "type": "Function", - "tags": [], - "label": "renderPrepend", - "description": [], - "signature": [ - "(() => React.ReactNode) | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlEmbeddable.selectionsToFilters", - "type": "Function", - "tags": [], - "label": "selectionsToFilters", - "description": [], - "signature": [ - "((input: Partial) => Promise<", - "ControlGroupFilterOutput", - ">) | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlEmbeddable.selectionsToFilters.$1", - "type": "Object", - "tags": [], - "label": "input", - "description": [], - "signature": [ - "Partial" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupInput", - "type": "Interface", - "tags": [], - "label": "ControlGroupInput", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - " extends ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - ",", - "ControlInput" - ], - "path": "src/plugins/controls/common/control_group/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupInput.chainingSystem", - "type": "CompoundType", - "tags": [], - "label": "chainingSystem", - "description": [], - "signature": [ - "\"NONE\" | \"HIERARCHICAL\"" - ], - "path": "src/plugins/controls/common/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupInput.defaultControlWidth", - "type": "CompoundType", - "tags": [], - "label": "defaultControlWidth", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlWidth", - "text": "ControlWidth" - }, - " | undefined" - ], - "path": "src/plugins/controls/common/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupInput.defaultControlGrow", - "type": "CompoundType", - "tags": [], - "label": "defaultControlGrow", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/controls/common/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupInput.controlStyle", - "type": "CompoundType", - "tags": [], - "label": "controlStyle", - "description": [], - "signature": [ - "\"twoLine\" | \"oneLine\"" - ], - "path": "src/plugins/controls/common/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupInput.panels", - "type": "Object", - "tags": [], - "label": "panels", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlsPanels", - "text": "ControlsPanels" - } - ], - "path": "src/plugins/controls/common/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupInput.showApplySelections", - "type": "CompoundType", - "tags": [], - "label": "showApplySelections", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/controls/common/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps", - "type": "Interface", - "tags": [], - "label": "ControlGroupRendererProps", - "description": [], - "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps.filters", - "type": "Array", - "tags": [], - "label": "filters", - "description": [], - "signature": [ - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps.getCreationOptions", - "type": "Function", - "tags": [], - "label": "getCreationOptions", - "description": [], - "signature": [ - "((initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">, builder: { addDataControlFromField: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" - }, - ") => Promise; addOptionsListControl: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddOptionsListControlProps", - "text": "AddOptionsListControlProps" - }, - ") => void; addRangeSliderControl: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddRangeSliderControlProps", - "text": "AddRangeSliderControlProps" - }, - ") => void; addTimeSliderControl: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">) => void; }) => Promise<", - "ControlGroupCreationOptions", - ">) | undefined" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps.getCreationOptions.$1", - "type": "Object", - "tags": [], - "label": "initialInput", - "description": [], - "signature": [ - "Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps.getCreationOptions.$2", - "type": "Object", - "tags": [], - "label": "builder", - "description": [], - "signature": [ - "{ addDataControlFromField: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" - }, - ") => Promise; addOptionsListControl: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddOptionsListControlProps", - "text": "AddOptionsListControlProps" - }, - ") => void; addRangeSliderControl: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddRangeSliderControlProps", - "text": "AddRangeSliderControlProps" - }, - ") => void; addTimeSliderControl: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">) => void; }" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps.timeRange", - "type": "Object", - "tags": [], - "label": "timeRange", - "description": [], - "signature": [ - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps.query", - "type": "Object", - "tags": [], - "label": "query", - "description": [], - "signature": [ - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | undefined" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState", - "type": "Interface", - "tags": [], - "label": "ControlGroupRuntimeState", - "description": [], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState.chainingSystem", - "type": "CompoundType", - "tags": [], - "label": "chainingSystem", - "description": [], - "signature": [ - "\"NONE\" | \"HIERARCHICAL\"" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState.labelPosition", - "type": "CompoundType", - "tags": [], - "label": "labelPosition", - "description": [], - "signature": [ - "\"twoLine\" | \"oneLine\"" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState.autoApplySelections", - "type": "boolean", - "tags": [], - "label": "autoApplySelections", - "description": [], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState.ignoreParentSettings", - "type": "Object", - "tags": [], - "label": "ignoreParentSettings", - "description": [], - "signature": [ - "ParentIgnoreSettings", - " | undefined" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState.initialChildControlState", - "type": "Object", - "tags": [], - "label": "initialChildControlState", - "description": [], - "signature": [ - "ControlPanelsState", - "<", - "ControlPanelState", - ">" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRuntimeState.editorConfig", - "type": "Object", - "tags": [], - "label": "editorConfig", - "description": [ - "TODO: Handle the editor config, which is used with the control group renderer component" - ], - "signature": [ - "{ hideDataViewSelector?: boolean | undefined; hideWidthSettings?: boolean | undefined; hideAdditionalSettings?: boolean | undefined; } | undefined" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupSerializedState", - "type": "Interface", - "tags": [], - "label": "ControlGroupSerializedState", - "description": [], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupSerializedState.chainingSystem", - "type": "CompoundType", - "tags": [], - "label": "chainingSystem", - "description": [], - "signature": [ - "\"NONE\" | \"HIERARCHICAL\"" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupSerializedState.panelsJSON", - "type": "string", - "tags": [], - "label": "panelsJSON", - "description": [], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupSerializedState.ignoreParentSettingsJSON", - "type": "string", - "tags": [], - "label": "ignoreParentSettingsJSON", - "description": [], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupSerializedState.controlStyle", - "type": "CompoundType", - "tags": [], - "label": "controlStyle", - "description": [], - "signature": [ - "\"twoLine\" | \"oneLine\"" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupSerializedState.showApplySelections", - "type": "CompoundType", - "tags": [], - "label": "showApplySelections", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.DataControlFactory", - "type": "Interface", - "tags": [], - "label": "DataControlFactory", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.DataControlFactory", - "text": "DataControlFactory" - }, - " extends ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlFactory", - "text": "ControlFactory" - }, - "" - ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.DataControlFactory.isFieldCompatible", - "type": "Function", - "tags": [], - "label": "isFieldCompatible", - "description": [], - "signature": [ - "(field: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - }, - ") => boolean" - ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.DataControlFactory.isFieldCompatible.$1", - "type": "Object", - "tags": [], - "label": "field", - "description": [], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - } + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, controlId?: string | undefined) => void; }" ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -5507,91 +2521,99 @@ }, { "parentPluginId": "controls", - "id": "def-public.DataControlFactory.CustomOptionsComponent", - "type": "Function", + "id": "def-public.ControlGroupRendererProps.viewMode", + "type": "CompoundType", "tags": [], - "label": "CustomOptionsComponent", + "label": "viewMode", "description": [], "signature": [ - "React.FC<", - "CustomOptionsComponentProps", - "> | undefined" + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.ViewMode", + "text": "ViewMode" + }, + " | undefined" ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.DataControlServices", - "type": "Interface", - "tags": [], - "label": "DataControlServices", - "description": [], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "controls", - "id": "def-public.DataControlServices.core", - "type": "Object", + "id": "def-public.ControlGroupRendererProps.filters", + "type": "Array", "tags": [], - "label": "core", + "label": "filters", "description": [], "signature": [ { - "pluginId": "@kbn/core-lifecycle-browser", - "scope": "public", - "docId": "kibKbnCoreLifecycleBrowserPluginApi", - "section": "def-public.CoreStart", - "text": "CoreStart" - } + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined" ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.DataControlServices.data", + "id": "def-public.ControlGroupRendererProps.timeRange", "type": "Object", "tags": [], - "label": "data", + "label": "timeRange", "description": [], "signature": [ { - "pluginId": "data", - "scope": "public", - "docId": "kibDataPluginApi", - "section": "def-public.DataPublicPluginStart", - "text": "DataPublicPluginStart" - } + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined" ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.DataControlServices.dataViews", + "id": "def-public.ControlGroupRendererProps.query", "type": "Object", "tags": [], - "label": "dataViews", + "label": "query", "description": [], "signature": [ { - "pluginId": "dataViews", - "scope": "public", - "docId": "kibDataViewsPluginApi", - "section": "def-public.DataViewsServicePublic", - "text": "DataViewsServicePublic" - } + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | undefined" ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupRendererProps.dataLoading", + "type": "CompoundType", + "tags": [], + "label": "dataLoading", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer.tsx", "deprecated": false, "trackAdoption": false } @@ -5600,508 +2622,419 @@ }, { "parentPluginId": "controls", - "id": "def-public.DefaultDataControlState", + "id": "def-public.ControlGroupRuntimeState", "type": "Interface", "tags": [], - "label": "DefaultDataControlState", + "label": "ControlGroupRuntimeState", "description": [], "signature": [ { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.DefaultDataControlState", - "text": "DefaultDataControlState" + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" }, - " extends ", - "DefaultControlState" + "" ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "controls", - "id": "def-public.DefaultDataControlState.dataViewId", - "type": "string", - "tags": [], - "label": "dataViewId", - "description": [], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.DefaultDataControlState.fieldName", - "type": "string", + "id": "def-public.ControlGroupRuntimeState.chainingSystem", + "type": "CompoundType", "tags": [], - "label": "fieldName", + "label": "chainingSystem", "description": [], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "signature": [ + "\"NONE\" | \"HIERARCHICAL\"" + ], + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.DefaultDataControlState.title", - "type": "string", + "id": "def-public.ControlGroupRuntimeState.labelPosition", + "type": "CompoundType", "tags": [], - "label": "title", + "label": "labelPosition", "description": [], "signature": [ - "string | undefined" + "\"twoLine\" | \"oneLine\"" ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.IEditableControlFactory", - "type": "Interface", - "tags": [], - "label": "IEditableControlFactory", - "description": [ - "\nControl embeddable editor types" - ], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.IEditableControlFactory", - "text": "IEditableControlFactory" - }, - " extends Pick<", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableFactory", - "text": "EmbeddableFactory" - }, - "<", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableOutput", - "text": "EmbeddableOutput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IEmbeddable", - "text": "IEmbeddable" - }, - "<", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - ", ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableOutput", - "text": "EmbeddableOutput" - }, - ", any>, ", - { - "pluginId": "savedObjectsFinder", - "scope": "common", - "docId": "kibSavedObjectsFinderPluginApi", - "section": "def-common.FinderAttributes", - "text": "FinderAttributes" }, - ">, \"type\">" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ { "parentPluginId": "controls", - "id": "def-public.IEditableControlFactory.controlEditorOptionsComponent", - "type": "Function", + "id": "def-public.ControlGroupRuntimeState.autoApplySelections", + "type": "boolean", "tags": [], - "label": "controlEditorOptionsComponent", - "description": [], - "signature": [ - "((props: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEditorProps", - "text": "ControlEditorProps" - }, - ") => JSX.Element) | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.IEditableControlFactory.controlEditorOptionsComponent.$1", - "type": "Object", - "tags": [], - "label": "props", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEditorProps", - "text": "ControlEditorProps" - }, - "" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] + "label": "autoApplySelections", + "description": [], + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", + "deprecated": false, + "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.IEditableControlFactory.presaveTransformFunction", - "type": "Function", + "id": "def-public.ControlGroupRuntimeState.ignoreParentSettings", + "type": "Object", "tags": [], - "label": "presaveTransformFunction", + "label": "ignoreParentSettings", "description": [], "signature": [ - "((newState: Partial, embeddable?: ", { "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, - " | undefined) => Partial) | undefined" + " | undefined" ], - "path": "src/plugins/controls/public/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.IEditableControlFactory.presaveTransformFunction.$1", - "type": "Object", - "tags": [], - "label": "newState", - "description": [], - "signature": [ - "Partial" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "controls", - "id": "def-public.IEditableControlFactory.presaveTransformFunction.$2", - "type": "Object", - "tags": [], - "label": "embeddable", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" - }, - " | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] + "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.IEditableControlFactory.isFieldCompatible", - "type": "Function", + "id": "def-public.ControlGroupRuntimeState.initialChildControlState", + "type": "Object", "tags": [], - "label": "isFieldCompatible", + "label": "initialChildControlState", "description": [], "signature": [ - "((field: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - }, - ") => boolean) | undefined" + "ControlPanelsState", + "" ], - "path": "src/plugins/controls/public/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.IEditableControlFactory.isFieldCompatible.$1", - "type": "Object", - "tags": [], - "label": "field", - "description": [], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - } - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } + "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupRuntimeState.editorConfig", + "type": "Object", + "tags": [], + "label": "editorConfig", + "description": [], + "signature": [ + "ControlGroupEditorConfig", + " | undefined" ], - "returnComment": [] + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput", + "id": "def-public.ControlGroupSerializedState", "type": "Interface", "tags": [], - "label": "OptionsListEmbeddableInput", + "label": "ControlGroupSerializedState", "description": [], "signature": [ { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" + "section": "def-public.ControlGroupSerializedState", + "text": "ControlGroupSerializedState" }, - " extends ", - "DataControlInput" + " extends Pick<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">, \"chainingSystem\" | \"editorConfig\">" ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.searchTechnique", - "type": "CompoundType", + "id": "def-public.ControlGroupSerializedState.panelsJSON", + "type": "string", "tags": [], - "label": "searchTechnique", + "label": "panelsJSON", "description": [], - "signature": [ - "OptionsListSearchTechnique", - " | undefined" - ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.sort", - "type": "Object", + "id": "def-public.ControlGroupSerializedState.ignoreParentSettingsJSON", + "type": "string", "tags": [], - "label": "sort", + "label": "ignoreParentSettingsJSON", "description": [], - "signature": [ - "OptionsListSortingType", - " | undefined" - ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.selectedOptions", - "type": "Array", + "id": "def-public.ControlGroupSerializedState.controlStyle", + "type": "CompoundType", "tags": [], - "label": "selectedOptions", + "label": "controlStyle", "description": [], "signature": [ - "OptionsListSelection", - "[] | undefined" + "\"twoLine\" | \"oneLine\"" ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.existsSelected", + "id": "def-public.ControlGroupSerializedState.showApplySelections", "type": "CompoundType", "tags": [], - "label": "existsSelected", + "label": "showApplySelections", "description": [], "signature": [ "boolean | undefined" ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.DataControlFactory", + "type": "Interface", + "tags": [], + "label": "DataControlFactory", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.DataControlFactory", + "text": "DataControlFactory" }, + " extends ", + "ControlFactory", + "" + ], + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.runPastTimeout", - "type": "CompoundType", + "id": "def-public.DataControlFactory.isFieldCompatible", + "type": "Function", "tags": [], - "label": "runPastTimeout", + "label": "isFieldCompatible", "description": [], "signature": [ - "boolean | undefined" + "(field: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + }, + ") => boolean" ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-public.DataControlFactory.isFieldCompatible.$1", + "type": "Object", + "tags": [], + "label": "field", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + } + ], + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.singleSelect", - "type": "CompoundType", + "id": "def-public.DataControlFactory.CustomOptionsComponent", + "type": "Function", "tags": [], - "label": "singleSelect", + "label": "CustomOptionsComponent", "description": [], "signature": [ - "boolean | undefined" + "React.FC<", + "CustomOptionsComponentProps", + "> | undefined" ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, "trackAdoption": false - }, + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.DataControlServices", + "type": "Interface", + "tags": [], + "label": "DataControlServices", + "description": [], + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.hideActionBar", - "type": "CompoundType", + "id": "def-public.DataControlServices.core", + "type": "Object", "tags": [], - "label": "hideActionBar", + "label": "core", "description": [], "signature": [ - "boolean | undefined" + { + "pluginId": "@kbn/core-lifecycle-browser", + "scope": "public", + "docId": "kibKbnCoreLifecycleBrowserPluginApi", + "section": "def-public.CoreStart", + "text": "CoreStart" + } ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.hideExclude", - "type": "CompoundType", + "id": "def-public.DataControlServices.data", + "type": "Object", "tags": [], - "label": "hideExclude", + "label": "data", "description": [], "signature": [ - "boolean | undefined" + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataPluginApi", + "section": "def-public.DataPublicPluginStart", + "text": "DataPublicPluginStart" + } ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.hideExists", - "type": "CompoundType", + "id": "def-public.DataControlServices.dataViews", + "type": "Object", "tags": [], - "label": "hideExists", + "label": "dataViews", "description": [], "signature": [ - "boolean | undefined" + { + "pluginId": "dataViews", + "scope": "public", + "docId": "kibDataViewsPluginApi", + "section": "def-public.DataViewsServicePublic", + "text": "DataViewsServicePublic" + } ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.DefaultDataControlState", + "type": "Interface", + "tags": [], + "label": "DefaultDataControlState", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.DefaultDataControlState", + "text": "DefaultDataControlState" }, + " extends ", + "DefaultControlState" + ], + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.placeholder", + "id": "def-public.DefaultDataControlState.dataViewId", "type": "string", "tags": [], - "label": "placeholder", + "label": "dataViewId", "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.hideSort", - "type": "CompoundType", + "id": "def-public.DefaultDataControlState.fieldName", + "type": "string", "tags": [], - "label": "hideSort", + "label": "fieldName", "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.OptionsListEmbeddableInput.exclude", - "type": "CompoundType", + "id": "def-public.DefaultDataControlState.title", + "type": "string", "tags": [], - "label": "exclude", + "label": "title", "description": [], "signature": [ - "boolean | undefined" + "string | undefined" ], - "path": "src/plugins/controls/common/options_list/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, "trackAdoption": false } @@ -6110,251 +3043,167 @@ }, { "parentPluginId": "controls", - "id": "def-public.ParentIgnoreSettings", + "id": "def-public.OptionsListControlState", "type": "Interface", "tags": [], - "label": "ParentIgnoreSettings", + "label": "OptionsListControlState", "description": [], - "path": "src/plugins/controls/common/types.ts", + "signature": [ + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.OptionsListControlState", + "text": "OptionsListControlState" + }, + " extends ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.DefaultDataControlState", + "text": "DefaultDataControlState" + }, + ",", + "OptionsListDisplaySettings" + ], + "path": "src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "controls", - "id": "def-public.ParentIgnoreSettings.ignoreFilters", + "id": "def-public.OptionsListControlState.searchTechnique", "type": "CompoundType", "tags": [], - "label": "ignoreFilters", + "label": "searchTechnique", "description": [], "signature": [ - "boolean | undefined" + "OptionsListSearchTechnique", + " | undefined" ], - "path": "src/plugins/controls/common/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.ParentIgnoreSettings.ignoreQuery", - "type": "CompoundType", + "id": "def-public.OptionsListControlState.sort", + "type": "Object", "tags": [], - "label": "ignoreQuery", + "label": "sort", "description": [], "signature": [ - "boolean | undefined" + "OptionsListSortingType", + " | undefined" ], - "path": "src/plugins/controls/common/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.ParentIgnoreSettings.ignoreTimerange", - "type": "CompoundType", + "id": "def-public.OptionsListControlState.selectedOptions", + "type": "Array", "tags": [], - "label": "ignoreTimerange", + "label": "selectedOptions", "description": [], "signature": [ - "boolean | undefined" + "OptionsListSelection", + "[] | undefined" ], - "path": "src/plugins/controls/common/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.ParentIgnoreSettings.ignoreValidations", + "id": "def-public.OptionsListControlState.existsSelected", "type": "CompoundType", "tags": [], - "label": "ignoreValidations", + "label": "existsSelected", "description": [], "signature": [ "boolean | undefined" ], - "path": "src/plugins/controls/common/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableInput", - "type": "Interface", - "tags": [], - "label": "RangeSliderEmbeddableInput", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RangeSliderEmbeddableInput", - "text": "RangeSliderEmbeddableInput" - }, - " extends ", - "DataControlInput" - ], - "path": "src/plugins/controls/common/range_slider/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableInput.value", - "type": "Object", - "tags": [], - "label": "value", - "description": [], - "signature": [ - "RangeValue", - " | undefined" - ], - "path": "src/plugins/controls/common/range_slider/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "controls", - "id": "def-public.RangeSliderEmbeddableInput.step", - "type": "number", + "id": "def-public.OptionsListControlState.runPastTimeout", + "type": "CompoundType", "tags": [], - "label": "step", + "label": "runPastTimeout", "description": [], "signature": [ - "number | undefined" + "boolean | undefined" ], - "path": "src/plugins/controls/common/range_slider/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/types.ts", "deprecated": false, "trackAdoption": false - } - ], - "initialIsOpen": false - } - ], - "enums": [], - "misc": [ - { - "parentPluginId": "controls", - "id": "def-public.ACTION_DELETE_CONTROL", - "type": "string", - "tags": [], - "label": "ACTION_DELETE_CONTROL", - "description": [], - "signature": [ - "\"deleteControl\"" - ], - "path": "src/plugins/controls/public/control_group/actions/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ACTION_EDIT_CONTROL", - "type": "string", - "tags": [], - "label": "ACTION_EDIT_CONTROL", - "description": [], - "signature": [ - "\"editLegacyEmbeddableControl\"" - ], - "path": "src/plugins/controls/public/control_group/actions/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.AddOptionsListControlProps", - "type": "Type", - "tags": [], - "label": "AddOptionsListControlProps", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" - }, - " & Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" - }, - ">" - ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.AddRangeSliderControlProps", - "type": "Type", - "tags": [], - "label": "AddRangeSliderControlProps", - "description": [], - "signature": [ + }, { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" + "parentPluginId": "controls", + "id": "def-public.OptionsListControlState.singleSelect", + "type": "CompoundType", + "tags": [], + "label": "singleSelect", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/types.ts", + "deprecated": false, + "trackAdoption": false }, - " & { value?: ", - "RangeValue", - " | undefined; }" + { + "parentPluginId": "controls", + "id": "def-public.OptionsListControlState.exclude", + "type": "CompoundType", + "tags": [], + "label": "exclude", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/types.ts", + "deprecated": false, + "trackAdoption": false + } ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", - "deprecated": false, - "trackAdoption": false, "initialIsOpen": false - }, + } + ], + "enums": [], + "misc": [ { "parentPluginId": "controls", - "id": "def-public.AwaitingControlGroupAPI", - "type": "Type", + "id": "def-public.ACTION_DELETE_CONTROL", + "type": "string", "tags": [], - "label": "AwaitingControlGroupAPI", + "label": "ACTION_DELETE_CONTROL", "description": [], "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" - }, - " | null" + "\"deleteControl\"" ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_api.ts", + "path": "src/plugins/controls/public/control_group/actions/index.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "controls", - "id": "def-public.CommonControlOutput", - "type": "Type", + "id": "def-public.ACTION_EDIT_CONTROL", + "type": "string", "tags": [], - "label": "CommonControlOutput", + "label": "ACTION_EDIT_CONTROL", "description": [], "signature": [ - "ControlFilterOutput", - " & ", - "ControlTimesliceOutput", - " & { dataViewId?: string | undefined; }" + "\"editDataControl\"" ], - "path": "src/plugins/controls/public/types.ts", + "path": "src/plugins/controls/public/react_controls/actions/edit_control_action/edit_control_action.tsx", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -6376,83 +3225,260 @@ }, { "parentPluginId": "controls", - "id": "def-public.CONTROL_WIDTH_OPTIONS", - "type": "Array", - "tags": [], - "label": "CONTROL_WIDTH_OPTIONS", - "description": [], - "signature": [ - "{ id: string; 'data-test-subj': string; label: string; }[]" - ], - "path": "src/plugins/controls/public/control_group/editor/editor_constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlFactory", + "id": "def-public.ControlGroupApi", "type": "Type", "tags": [], - "label": "ControlFactory", + "label": "ControlGroupApi", "description": [], "signature": [ + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.PresentationContainer", + "text": "PresentationContainer" + }, + " & ", { "pluginId": "embeddable", "scope": "public", "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableFactory", - "text": "EmbeddableFactory" + "section": "def-public.DefaultEmbeddableApi", + "text": "DefaultEmbeddableApi" }, "<", - "ControlInput", - ", ", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" + "section": "def-public.ControlGroupSerializedState", + "text": "ControlGroupSerializedState" }, ", ", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.ControlEmbeddable", - "text": "ControlEmbeddable" + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesFilters", + "text": "PublishesFilters" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataViews", + "text": "PublishesDataViews" + }, + " & ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.HasSerializedChildState", + "text": "HasSerializedChildState" }, "<", - "ControlInput", - ", ", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.ControlOutput", - "text": "ControlOutput" + "section": "def-public.ControlPanelState", + "text": "ControlPanelState" + }, + "<", + "DefaultControlState", + ">> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasEditCapabilities", + "text": "HasEditCapabilities" }, - ">, ", + " & ", { - "pluginId": "savedObjectsFinder", + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataLoading", + "text": "PublishesDataLoading" + }, + " & Pick<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnsavedChanges", + "text": "PublishesUnsavedChanges" + }, + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, \"unsavedChanges\"> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTimeslice", + "text": "PublishesTimeslice" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasParentApi", + "text": "HasParentApi" + }, + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnifiedSearch", + "text": "PublishesUnifiedSearch" + }, + "> & ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.HasSaveNotification", + "text": "HasSaveNotification" + }, + " & ", + "PublishesReload", + "> & { allowExpensiveQueries$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; autoApplySelections$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; ignoreParentSettings$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "controls", "scope": "common", - "docId": "kibSavedObjectsFinderPluginApi", - "section": "def-common.FinderAttributes", - "text": "FinderAttributes" + "docId": "kibControlsPluginApi", + "section": "def-common.ParentIgnoreSettings", + "text": "ParentIgnoreSettings" + }, + " | undefined>; labelPosition: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + "ControlStyle", + ">; asyncResetUnsavedChanges: () => Promise; controlFetch$: (controlUuid: string) => ", + "Observable", + "<", + "ControlFetchContext", + ">; openAddDataControlFlyout: (options?: { controlStateTransform?: ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlStateTransform", + "text": "ControlStateTransform" + }, + "<", + "DefaultControlState", + "> | undefined; onSave?: (() => void) | undefined; } | undefined) => void; untilInitialized: () => Promise; getEditorConfig: () => ", + "ControlGroupEditorConfig", + " | undefined; getLastSavedControlState: (controlUuid: string) => object; setChainingSystem: (chainingSystem: ", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlGroupChainingSystem", + "text": "ControlGroupChainingSystem" + }, + ") => void; }" + ], + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupOutput", + "type": "Type", + "tags": [], + "label": "ControlGroupOutput", + "description": [], + "signature": [ + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.ContainerOutput", + "text": "ContainerOutput" }, - ">" + " & ", + "ControlFilterOutput", + " & ", + "ControlTimesliceOutput", + " & { dataViewIds: string[]; }" ], - "path": "src/plugins/controls/public/types.ts", + "path": "src/plugins/controls/public/control_group/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "controls", - "id": "def-public.ControlGroupApi", + "id": "def-public.ControlGroupRendererApi", "type": "Type", "tags": [], - "label": "ControlGroupApi", + "label": "ControlGroupRendererApi", "description": [], "signature": [ { @@ -6486,7 +3512,9 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - "> & ", + "<", + "DefaultControlState", + ">> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6511,8 +3539,16 @@ "text": "HasSerializedChildState" }, "<", - "ControlPanelState", - "> & ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlPanelState", + "text": "ControlPanelState" + }, + "<", + "DefaultControlState", + ">> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6536,7 +3572,17 @@ "section": "def-public.PublishesUnsavedChanges", "text": "PublishesUnsavedChanges" }, - ", \"unsavedChanges\"> & ", + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, \"unsavedChanges\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6544,6 +3590,14 @@ "section": "def-public.PublishesTimeslice", "text": "PublishesTimeslice" }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" + }, " & Partial<", { "pluginId": "@kbn/presentation-publishing", @@ -6570,7 +3624,7 @@ }, " & ", "PublishesReload", - "> & { asyncResetUnsavedChanges: () => Promise; autoApplySelections$: ", + "> & { allowExpensiveQueries$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6578,11 +3632,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; controlFetch$: (controlUuid: string) => ", - "Observable", - "<", - "ControlFetchContext", - ">; getLastSavedControlState: (controlUuid: string) => object; ignoreParentSettings$: ", + "; autoApplySelections$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6590,9 +3640,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "<", - "ParentIgnoreSettings", - " | undefined>; allowExpensiveQueries$: ", + "; ignoreParentSettings$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6600,15 +3648,15 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; untilInitialized: () => Promise; openAddDataControlFlyout: (settings?: { controlInputTransform?: ", + "<", { "pluginId": "controls", "scope": "common", "docId": "kibControlsPluginApi", - "section": "def-common.ControlInputTransform", - "text": "ControlInputTransform" + "section": "def-common.ParentIgnoreSettings", + "text": "ParentIgnoreSettings" }, - " | undefined; } | undefined) => void; labelPosition: ", + " | undefined>; labelPosition: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6618,207 +3666,190 @@ }, "<", "ControlStyle", - ">; }" - ], - "path": "src/plugins/controls/public/react_controls/control_group/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupAPI", - "type": "Type", - "tags": [], - "label": "ControlGroupAPI", - "description": [], - "signature": [ + ">; asyncResetUnsavedChanges: () => Promise; controlFetch$: (controlUuid: string) => ", + "Observable", + "<", + "ControlFetchContext", + ">; openAddDataControlFlyout: (options?: { controlStateTransform?: ", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" - } + "section": "def-public.ControlStateTransform", + "text": "ControlStateTransform" + }, + "<", + "DefaultControlState", + "> | undefined; onSave?: (() => void) | undefined; } | undefined) => void; untilInitialized: () => Promise; getEditorConfig: () => ", + "ControlGroupEditorConfig", + " | undefined; getLastSavedControlState: (controlUuid: string) => object; setChainingSystem: (chainingSystem: ", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlGroupChainingSystem", + "text": "ControlGroupChainingSystem" + }, + ") => void; } & { reload: () => void; updateInput: (input: Partial<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>) => void; getInput$: () => ", + "BehaviorSubject", + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>; }" ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_api.ts", + "path": "src/plugins/controls/public/control_group/external_api/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "controls", - "id": "def-public.ControlGroupInputBuilder", + "id": "def-public.ControlGroupStateBuilder", "type": "Type", "tags": [], - "label": "ControlGroupInputBuilder", + "label": "ControlGroupStateBuilder", "description": [], "signature": [ - "{ addDataControlFromField: (initialInput: Partial<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ">, controlProps: ", + "{ addDataControlFromField: (controlGroupState: Partial<", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" }, - ") => Promise; addOptionsListControl: (initialInput: Partial<", + "<", + "DefaultControlState", + ">>, controlState: ", { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" + "section": "def-public.DefaultDataControlState", + "text": "DefaultDataControlState" }, - ">, controlProps: ", + ", controlId?: string | undefined) => Promise; addOptionsListControl: (controlGroupState: Partial<", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.AddOptionsListControlProps", - "text": "AddOptionsListControlProps" + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" }, - ") => void; addRangeSliderControl: (initialInput: Partial<", + "<", + "DefaultControlState", + ">>, controlState: ", { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" + "section": "def-public.OptionsListControlState", + "text": "OptionsListControlState" }, - ">, controlProps: ", + ", controlId?: string | undefined) => void; addRangeSliderControl: (controlGroupState: Partial<", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.AddRangeSliderControlProps", - "text": "AddRangeSliderControlProps" + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" }, - ") => void; addTimeSliderControl: (initialInput: Partial<", + "<", + "DefaultControlState", + ">>, controlState: ", + "RangesliderControlState", + ", controlId?: string | undefined) => void; addTimeSliderControl: (controlGroupState: Partial<", { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" }, - ">) => void; }" + "<", + "DefaultControlState", + ">>, controlId?: string | undefined) => void; }" ], - "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "controls", - "id": "def-public.ControlGroupOutput", + "id": "def-public.ControlPanelState", "type": "Type", "tags": [], - "label": "ControlGroupOutput", + "label": "ControlPanelState", "description": [], "signature": [ - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerOutput", - "text": "ContainerOutput" - }, - " & ", - "ControlFilterOutput", - " & ", - "ControlTimesliceOutput", - " & { dataViewIds: string[]; }" + "State & { type: string; order: number; }" ], - "path": "src/plugins/controls/public/control_group/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "controls", - "id": "def-public.ControlInput", + "id": "def-public.ControlStateTransform", "type": "Type", "tags": [], - "label": "ControlInput", - "description": [], + "label": "ControlStateTransform", + "description": [ + "\n----------------------------------------------------------------\nControl group API\n----------------------------------------------------------------" + ], "signature": [ - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - " & { query?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | undefined; filters?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined; timeRange?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; timeslice?: ", - "TimeSlice", - " | undefined; controlStyle?: ", - "ControlStyle", - " | undefined; ignoreParentSettings?: ", - "ParentIgnoreSettings", - " | undefined; }" + "(newState: Partial, controlType: string) => Partial" ], - "path": "src/plugins/controls/common/types.ts", + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", "deprecated": false, "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.ControlOutput", - "type": "Type", - "tags": [], - "label": "ControlOutput", - "description": [], - "signature": [ + "returnComment": [], + "children": [ { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableOutput", - "text": "EmbeddableOutput" + "parentPluginId": "controls", + "id": "def-public.ControlStateTransform.$1", + "type": "Object", + "tags": [], + "label": "newState", + "description": [], + "signature": [ + "{ [P in keyof State]?: State[P] | undefined; }" + ], + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", + "deprecated": false, + "trackAdoption": false }, - " & ", - "ControlFilterOutput", - " & ", - "ControlTimesliceOutput", - " & { dataViewId?: string | undefined; }" + { + "parentPluginId": "controls", + "id": "def-public.ControlStateTransform.$2", + "type": "string", + "tags": [], + "label": "controlType", + "description": [], + "path": "src/plugins/controls/public/react_controls/control_group/types.ts", + "deprecated": false, + "trackAdoption": false + } ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, "initialIsOpen": false }, { @@ -6901,13 +3932,7 @@ " & ", "HasCustomPrepend", "> & ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.CanClearSelections", - "text": "CanClearSelections" - }, + "CanClearSelections", " & ", { "pluginId": "@kbn/presentation-publishing", @@ -6998,71 +4023,19 @@ "section": "def-public.PublishesDataViews", "text": "PublishesDataViews" }, - " & ", - "PublishesField", - " & ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesFilters", - "text": "PublishesFilters" - }, - " & { untilFiltersReady: () => Promise; }" - ], - "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.DataControlInput", - "type": "Type", - "tags": [], - "label": "DataControlInput", - "description": [], - "signature": [ - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.EmbeddableInput", - "text": "EmbeddableInput" - }, - " & { query?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | undefined; filters?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined; timeRange?: ", + " & ", + "PublishesField", + " & ", { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesFilters", + "text": "PublishesFilters" }, - " | undefined; timeslice?: ", - "TimeSlice", - " | undefined; controlStyle?: ", - "ControlStyle", - " | undefined; ignoreParentSettings?: ", - "ParentIgnoreSettings", - " | undefined; } & { fieldName: string; dataViewId: string; }" + " & { untilFiltersReady: () => Promise; }" ], - "path": "src/plugins/controls/common/types.ts", + "path": "src/plugins/controls/public/react_controls/controls/data_controls/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7142,13 +4115,7 @@ "text": "ControlGroupInput" }, ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" - }, + "AddDataControlProps", ") => Promise" ], "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", @@ -7186,13 +4153,7 @@ "label": "controlProps", "description": [], "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddDataControlProps", - "text": "AddDataControlProps" - } + "AddDataControlProps" ], "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", "deprecated": false, @@ -7219,13 +4180,7 @@ "text": "ControlGroupInput" }, ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddOptionsListControlProps", - "text": "AddOptionsListControlProps" - }, + "AddOptionsListControlProps", ") => void" ], "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", @@ -7263,13 +4218,7 @@ "label": "controlProps", "description": [], "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddOptionsListControlProps", - "text": "AddOptionsListControlProps" - } + "AddOptionsListControlProps" ], "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", "deprecated": false, @@ -7296,13 +4245,7 @@ "text": "ControlGroupInput" }, ">, controlProps: ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddRangeSliderControlProps", - "text": "AddRangeSliderControlProps" - }, + "AddRangeSliderControlProps", ") => void" ], "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", @@ -7340,13 +4283,7 @@ "label": "controlProps", "description": [], "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AddRangeSliderControlProps", - "text": "AddRangeSliderControlProps" - } + "AddRangeSliderControlProps" ], "path": "src/plugins/controls/public/control_group/external_api/control_group_input_builder.ts", "deprecated": false, @@ -7414,7 +4351,7 @@ "tags": [], "label": "controlGroupStateBuilder", "description": [], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -7434,7 +4371,9 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - ">, controlState: ", + "<", + "DefaultControlState", + ">>, controlState: ", { "pluginId": "controls", "scope": "public", @@ -7444,7 +4383,7 @@ }, ", controlId?: string | undefined) => Promise" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -7464,9 +4403,11 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - ">" + "<", + "DefaultControlState", + ">>" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -7487,7 +4428,7 @@ "text": "DefaultDataControlState" } ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -7502,7 +4443,7 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -7526,11 +4467,19 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - ">, controlState: ", - "OptionsListControlState", + "<", + "DefaultControlState", + ">>, controlState: ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.OptionsListControlState", + "text": "OptionsListControlState" + }, ", controlId?: string | undefined) => void" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -7550,9 +4499,11 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - ">" + "<", + "DefaultControlState", + ">>" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -7565,9 +4516,15 @@ "label": "controlState", "description": [], "signature": [ - "OptionsListControlState" + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.OptionsListControlState", + "text": "OptionsListControlState" + } ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -7582,7 +4539,7 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -7606,11 +4563,13 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - ">, controlState: ", + "<", + "DefaultControlState", + ">>, controlState: ", "RangesliderControlState", ", controlId?: string | undefined) => void" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -7630,9 +4589,11 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - ">" + "<", + "DefaultControlState", + ">>" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -7647,7 +4608,7 @@ "signature": [ "RangesliderControlState" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -7662,7 +4623,7 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -7686,9 +4647,11 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - ">, controlId?: string | undefined) => void" + "<", + "DefaultControlState", + ">>, controlId?: string | undefined) => void" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -7708,9 +4671,11 @@ "section": "def-public.ControlGroupRuntimeState", "text": "ControlGroupRuntimeState" }, - ">" + "<", + "DefaultControlState", + ">>" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -7725,7 +4690,7 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/controls/public/react_controls/control_group/control_group_state_builder.ts", + "path": "src/plugins/controls/public/react_controls/control_group/utils/control_group_state_builder.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -7790,130 +4755,6 @@ "common": { "classes": [], "functions": [ - { - "parentPluginId": "controls", - "id": "def-common.controlGroupInputToRawControlGroupAttributes", - "type": "Function", - "tags": [], - "label": "controlGroupInputToRawControlGroupAttributes", - "description": [], - "signature": [ - "(controlGroupInput: Omit<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ", \"id\">) => ", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RawControlGroupAttributes", - "text": "RawControlGroupAttributes" - } - ], - "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-common.controlGroupInputToRawControlGroupAttributes.$1", - "type": "Object", - "tags": [], - "label": "controlGroupInput", - "description": [], - "signature": [ - "Omit<", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" - }, - ", \"id\">" - ], - "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-common.generateNewControlIds", - "type": "Function", - "tags": [], - "label": "generateNewControlIds", - "description": [], - "signature": [ - "(controlGroupInput?: ", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.PersistableControlGroupInput", - "text": "PersistableControlGroupInput" - }, - " | undefined) => { panels: ", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlsPanels", - "text": "ControlsPanels" - }, - "; chainingSystem: ", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupChainingSystem", - "text": "ControlGroupChainingSystem" - }, - "; ignoreParentSettings?: ", - "ParentIgnoreSettings", - " | undefined; controlStyle: ", - "ControlStyle", - "; showApplySelections?: boolean | undefined; } | undefined" - ], - "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-common.generateNewControlIds.$1", - "type": "Object", - "tags": [], - "label": "controlGroupInput", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.PersistableControlGroupInput", - "text": "PersistableControlGroupInput" - }, - " | undefined" - ], - "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "controls", "id": "def-common.getDefaultControlGroupInput", @@ -8737,6 +5578,76 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "controls", + "id": "def-common.ParentIgnoreSettings", + "type": "Interface", + "tags": [], + "label": "ParentIgnoreSettings", + "description": [], + "path": "src/plugins/controls/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-common.ParentIgnoreSettings.ignoreFilters", + "type": "CompoundType", + "tags": [], + "label": "ignoreFilters", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-common.ParentIgnoreSettings.ignoreQuery", + "type": "CompoundType", + "tags": [], + "label": "ignoreQuery", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-common.ParentIgnoreSettings.ignoreTimerange", + "type": "CompoundType", + "tags": [], + "label": "ignoreTimerange", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-common.ParentIgnoreSettings.ignoreValidations", + "type": "CompoundType", + "tags": [], + "label": "ignoreValidations", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "controls", "id": "def-common.RangeSliderEmbeddableInput", @@ -8904,7 +5815,13 @@ " | undefined; controlStyle?: ", "ControlStyle", " | undefined; ignoreParentSettings?: ", - "ParentIgnoreSettings", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ParentIgnoreSettings", + "text": "ParentIgnoreSettings" + }, " | undefined; }" ], "path": "src/plugins/controls/common/types.ts", @@ -9014,10 +5931,14 @@ "text": "ControlGroupChainingSystem" }, "; ignoreParentSettings?: ", - "ParentIgnoreSettings", - " | undefined; controlStyle: ", - "ControlStyle", - "; panels: ", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ParentIgnoreSettings", + "text": "ParentIgnoreSettings" + }, + " | undefined; panels: ", { "pluginId": "controls", "scope": "common", @@ -9025,6 +5946,8 @@ "section": "def-common.ControlsPanels", "text": "ControlsPanels" }, + "; controlStyle: ", + "ControlStyle", "; showApplySelections?: boolean | undefined; }" ], "path": "src/plugins/controls/common/control_group/types.ts", @@ -9042,7 +5965,7 @@ "\nOnly parts of the Control Group Input should be persisted" ], "signature": [ - "(\"chainingSystem\" | \"ignoreParentSettings\" | \"controlStyle\" | \"panels\" | \"showApplySelections\")[]" + "(\"chainingSystem\" | \"ignoreParentSettings\" | \"panels\" | \"controlStyle\" | \"showApplySelections\")[]" ], "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, @@ -9122,7 +6045,13 @@ "text": "SerializableRecord" }, "; ignoreParentSettings: ", - "ParentIgnoreSettings", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ParentIgnoreSettings", + "text": "ParentIgnoreSettings" + }, " & ", { "pluginId": "@kbn/utility-types", diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 3957759aebf68..5843e8b140100 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 394 | 0 | 385 | 28 | +| 259 | 0 | 254 | 30 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 7f4ecba6e52a6..599b9ec9af532 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json index 805e3041563a0..23ca05faf9553 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -959,15 +959,25 @@ "section": "def-common.SerializableRecord", "text": "SerializableRecord" }, - ")[] | undefined; controlGroupInput?: ", + ")[] | undefined; controlGroupState?: (Partial<", { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.SerializableControlGroupInput", - "text": "SerializableControlGroupInput" + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">> & ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" }, - " | undefined; }" + ") | undefined; }" ], "path": "src/plugins/dashboard/public/dashboard_container/types.ts", "deprecated": false, diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index f942a39e13038..47162fe5df7ed 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 0b8bc0021b048..721256871c9ad 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 25eab2540379a..9d77d50b3d137 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -9614,7 +9614,7 @@ }, "; history: ", "SearchRequest", - ">[]; setField: >[]; setOverwriteDataViewType: (overwriteType: string | false | undefined) => void; setField: void; removeField: >[]; setField: >[]; setOverwriteDataViewType: (overwriteType: string | false | undefined) => void; setField: void; removeField: >[]; setField: >[]; setOverwriteDataViewType: (overwriteType: string | false | undefined) => void; setField: void; removeField: | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/data/types.ts#:~:text=fieldFormats), [data_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/data/data_service.ts#:~:text=fieldFormats) | - | | | [dashboard_grid_item.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx#:~:text=EmbeddablePanel), [dashboard_grid_item.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx#:~:text=EmbeddablePanel) | - | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/plugin.tsx#:~:text=registerEmbeddableFactory) | - | -| | [migrate_dashboard_input.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts#:~:text=getEmbeddableFactory), [migrate_dashboard_input.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts#:~:text=getEmbeddableFactory), [create_dashboard.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts#:~:text=getEmbeddableFactory), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=getEmbeddableFactory), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=getEmbeddableFactory), [dashboard_renderer.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx#:~:text=getEmbeddableFactory), [embeddable.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory)+ 9 more | - | +| | [migrate_dashboard_input.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts#:~:text=getEmbeddableFactory), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=getEmbeddableFactory), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=getEmbeddableFactory), [dashboard_renderer.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx#:~:text=getEmbeddableFactory), [embeddable.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [migrate_dashboard_input.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts#:~:text=getEmbeddableFactory), [migrate_dashboard_input.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts#:~:text=getEmbeddableFactory)+ 2 more | - | | | [embeddable.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts#:~:text=getEmbeddableFactories), [embeddable.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts#:~:text=getEmbeddableFactories) | - | | | [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 6f7bdf9383c72..f9eaae88d42de 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 5d1881c8ce775..40c5a4fa80dd1 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 9c39eea570a4b..189d6f6fd1e2c 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index d462cd012d017..12037a475cdda 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 8c6fe60db0c5a..df18c266a8bc6 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 426c2953fc92f..f4e73bc9eb4bc 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 05351345a6735..1ef34b685c47f 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index c4ac65a8b4ca6..5fd493a81847e 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -5724,6 +5724,37 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "embeddable", + "id": "def-public.Embeddable.setDisabledActionIds", + "type": "Function", + "tags": [], + "label": "setDisabledActionIds", + "description": [], + "signature": [ + "(ids: string[] | undefined) => void" + ], + "path": "src/plugins/embeddable/public/lib/embeddables/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "embeddable", + "id": "def-public.Embeddable.setDisabledActionIds.$1", + "type": "Array", + "tags": [], + "label": "ids", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "embeddable", "id": "def-public.Embeddable.unlinkFromLibrary", @@ -9753,6 +9784,22 @@ "path": "src/plugins/embeddable/public/lib/containers/i_container.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "embeddable", + "id": "def-public.EmbeddableContainerSettings.untilContainerInitialized", + "type": "Function", + "tags": [], + "label": "untilContainerInitialized", + "description": [], + "signature": [ + "(() => Promise) | undefined" + ], + "path": "src/plugins/embeddable/public/lib/containers/i_container.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false @@ -10275,7 +10322,7 @@ "section": "def-public.ContainerOutput", "text": "ContainerOutput" }, - "> | undefined) => Promise | undefined) => Promise<", { "pluginId": "embeddable", "scope": "public", @@ -10283,7 +10330,7 @@ "section": "def-public.ErrorEmbeddable", "text": "ErrorEmbeddable" }, - ">" + " | TEmbeddable>" ], "path": "src/plugins/embeddable/public/lib/embeddables/embeddable_factory.ts", "deprecated": false, @@ -10396,7 +10443,7 @@ "section": "def-public.ContainerOutput", "text": "ContainerOutput" }, - "> | undefined) => Promise | undefined) => Promise<", { "pluginId": "embeddable", "scope": "public", @@ -10404,7 +10451,7 @@ "section": "def-public.ErrorEmbeddable", "text": "ErrorEmbeddable" }, - " | undefined>" + " | TEmbeddable | undefined>" ], "path": "src/plugins/embeddable/public/lib/embeddables/embeddable_factory.ts", "deprecated": false, @@ -14855,14 +14902,6 @@ "plugin": "dashboard", "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts" }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts" - }, { "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx" @@ -14899,26 +14938,6 @@ "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts" }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts" - }, { "plugin": "dashboard", "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts" diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 55e133eae709a..ffe539cb3cb1a 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 572 | 1 | 462 | 9 | +| 575 | 1 | 465 | 9 | ## Client diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 8d4b296df26bc..e80f0ec89335b 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index c84f4ce7206ae..75b081c73e7fc 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 74de8c563db10..686c9e6b8fe2f 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 98f2a40d00195..45943b46ee136 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 04c2a8b294ac1..0f1a0b7a92995 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 519d118df6550..d0a63797083bc 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index baf88b5510d4b..7f07821475fd7 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 4388bc9425e49..5c8f86abd6a6c 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 88cdd46726828..f5ff93cb65784 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index d8b1fca31c74f..a870085e0efaa 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 4234b30502832..683162dc055d8 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 1d5979590ba17..23750a173be15 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 74d0b4100b0f8..321c79ede411d 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index f71f5e107908d..03c332ba4e12e 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 338bfa92898e2..05d2610986b27 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index cca2a919c6bd4..7bd90a695906a 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 7a32d73577842..0f191f8528808 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 924473cbf90f6..b0f617faea5b2 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 88a9bb62ae4c1..63f01dde86187 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 92bea522025cd..3f788fb742614 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 8920091fe188b..a12fe79110feb 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 39698e2e52c23..c0b17def4bda0 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index a3d261b62aefb..7e213af22d8be 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index b1d06d6bb4171..c75fb012b1879 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 1e27b6346dd97..b34ea2b8ba3e7 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 05e8225f3ebeb..f0db4e5fb7076 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index ca481718384ba..99f4356034507 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 780c325f6c809..95f4cd1420e47 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index f25f13202b8bb..3660d11b560cb 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 6811c80dcea19..008f13c234732 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 15a927517d28a..a7996dec4f4db 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 278d6e7ac4199..3b02d6f477b2c 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 50514d52df283..f5feff40fa517 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 89d987f33c909..ebed9e4741aa1 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 232339a4f050a..7f3ec5061a455 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index ee5fa34a52952..d9f1ef02cf86f 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 54ad0db21552d..36f0ac8f8ad32 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 3fa9f893bb9e6..dd094dbec0ff0 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 57656de783f06..e83ef6ac1b988 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index 29fb688ff8106..86a6c02292b78 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 411e22d5903b2..3873f0ce6a6d1 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index feec1c6550d83..b6d5aad68bf49 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 98a9256554e7f..e7ed8d3d0db40 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.devdocs.json b/api_docs/integration_assistant.devdocs.json index f1b88ed3bc69f..e951ca8bcfc20 100644 --- a/api_docs/integration_assistant.devdocs.json +++ b/api_docs/integration_assistant.devdocs.json @@ -184,7 +184,7 @@ "label": "AnalyzeLogsRequestBody", "description": [], "signature": [ - "{ connectorId: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }" + "{ connectorId: string; packageName: string; dataStreamName: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts", "deprecated": false, @@ -199,7 +199,15 @@ "label": "AnalyzeLogsResponse", "description": [], "signature": [ - "{ results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; }" + "{ results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[] | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts", "deprecated": false, @@ -257,7 +265,7 @@ "label": "CategorizationRequestBody", "description": [], "signature": [ - "{ connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; currentPipeline: { processors: ", + "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -439,7 +447,15 @@ "label": "EcsMappingRequestBody", "description": [], "signature": [ - "{ connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; }" + "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; additionalProcessors?: ", + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[] | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/ecs/ecs_route.ts", "deprecated": false, @@ -656,7 +672,7 @@ "label": "RelatedRequestBody", "description": [], "signature": [ - "{ connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; currentPipeline: { processors: ", + "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -737,7 +753,7 @@ "label": "AnalyzeLogsRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ logSamples: Zod.ZodArray; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }>" + "Zod.ZodObject<{ packageName: Zod.ZodString; dataStreamName: Zod.ZodString; logSamples: Zod.ZodArray; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; dataStreamName: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; dataStreamName: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts", "deprecated": false, @@ -752,7 +768,39 @@ "label": "AnalyzeLogsResponse", "description": [], "signature": [ - "Zod.ZodObject<{ results: Zod.ZodObject<{ samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; parsedSamples: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }, { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }>; }, \"strip\", Zod.ZodTypeAny, { results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; }, { results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; }>" + "Zod.ZodObject<{ results: Zod.ZodObject<{ samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; parsedSamples: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }, { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }>; additionalProcessors: Zod.ZodOptional, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[] | undefined; }, { results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[] | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts", "deprecated": false, @@ -942,7 +990,7 @@ "label": "CategorizationRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ packageName: Zod.ZodString; dataStreamName: Zod.ZodString; rawSamples: Zod.ZodArray; currentPipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; currentPipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; currentPipeline: { processors: ", + "[] | undefined; }>; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1022,7 +1070,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; currentPipeline: { processors: ", + "[] | undefined; }; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1448,7 +1496,39 @@ "label": "EcsMappingRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ packageName: Zod.ZodString; dataStreamName: Zod.ZodString; rawSamples: Zod.ZodArray; mapping: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>>; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; }>" + "Zod.ZodObject<{ packageName: Zod.ZodString; dataStreamName: Zod.ZodString; rawSamples: Zod.ZodArray; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; mapping: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>>; additionalProcessors: Zod.ZodOptional, \"many\">>; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; additionalProcessors?: ", + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[] | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; additionalProcessors?: ", + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[] | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/ecs/ecs_route.ts", "deprecated": false, @@ -1874,7 +1954,7 @@ "label": "RelatedRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ packageName: Zod.ZodString; dataStreamName: Zod.ZodString; rawSamples: Zod.ZodArray; currentPipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; currentPipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; currentPipeline: { processors: ", + "[] | undefined; }>; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1954,7 +2034,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; dataStreamName: string; currentPipeline: { processors: ", + "[] | undefined; }; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 6bb0c558b5ccf..6349cd9f80fa8 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index f3fb201caec71..01e6d23b4188a 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index ad8bb4a6392a2..4bdb9c86aa722 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 3066bffadce24..7faddb21ae3b6 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 13aa012a09aa8..c05e1087a66ce 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index ec891cce08afd..a2dc3477c613b 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index c8e600a4e11a0..757140692ac4b 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index d07c5d201158c..59b3541b4edf7 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index f96db55bbde74..866543e618463 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 5ec3b751b9bbc..ceff3aef43750 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index 55bac785e0303..b9d6f19d514ce 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 85eb3781fd400..05cfbf43e286e 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 2230f3ca9f17b..493c68b14061f 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 3ee4290efaf51..e0f04f331b23e 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index d2e481710fdd0..5a5f326fbb268 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index d8621e08a3699..d4055da83b06d 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -3117,17 +3117,82 @@ " extends Pick<", { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.ControlGroupInput", - "text": "ControlGroupInput" + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" }, - ", \"timeRange\" | \"query\" | \"filters\" | \"chainingSystem\">" + "<", + "DefaultControlState", + ">, \"chainingSystem\">" ], "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.FilterGroupProps.query", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.FilterGroupProps.filters", + "type": "Array", + "tags": [], + "label": "filters", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.FilterGroupProps.timeRange", + "type": "Object", + "tags": [], + "label": "timeRange", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/alerts-ui-shared", "id": "def-public.FilterGroupProps.spaceId", @@ -3334,8 +3399,8 @@ "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" + "section": "def-public.ControlGroupRendererApi", + "text": "ControlGroupRendererApi" }, " | undefined) => void) | undefined" ], @@ -3346,7 +3411,7 @@ { "parentPluginId": "@kbn/alerts-ui-shared", "id": "def-public.FilterGroupProps.onInit.$1", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "controlGroupHandler", "description": [], @@ -3355,8 +3420,8 @@ "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" + "section": "def-public.ControlGroupRendererApi", + "text": "ControlGroupRendererApi" }, " | undefined" ], @@ -3394,7 +3459,7 @@ "\nThe control embeddable renderer" ], "signature": [ - "React.ForwardRefExoticComponent<", + "(props: ", { "pluginId": "controls", "scope": "public", @@ -3402,15 +3467,7 @@ "section": "def-public.ControlGroupRendererProps", "text": "ControlGroupRendererProps" }, - " & React.RefAttributes<", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.AwaitingControlGroupAPI", - "text": "AwaitingControlGroupAPI" - }, - ">>" + ") => JSX.Element" ], "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", "deprecated": false, @@ -3420,14 +3477,20 @@ { "parentPluginId": "@kbn/alerts-ui-shared", "id": "def-public.FilterGroupProps.ControlGroupRenderer.$1", - "type": "Uncategorized", + "type": "Object", "tags": [], "label": "props", "description": [], "signature": [ - "P" + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRendererProps", + "text": "ControlGroupRendererProps" + } ], - "path": "node_modules/@types/react/index.d.ts", + "path": "src/plugins/controls/public/control_group/external_api/control_group_renderer_lazy.tsx", "deprecated": false, "trackAdoption": false } @@ -5789,10 +5852,10 @@ "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.AddOptionsListControlProps", - "text": "AddOptionsListControlProps" + "section": "def-public.OptionsListControlState", + "text": "OptionsListControlState" }, - ", \"dataViewId\" | \"controlId\"> & { persist?: boolean | undefined; }" + ", \"dataViewId\"> & { persist?: boolean | undefined; }" ], "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", "deprecated": false, @@ -5807,13 +5870,238 @@ "label": "FilterGroupHandler", "description": [], "signature": [ + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.PresentationContainer", + "text": "PresentationContainer" + }, + " & ", + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.DefaultEmbeddableApi", + "text": "DefaultEmbeddableApi" + }, + "<", { "pluginId": "controls", "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" - } + "section": "def-public.ControlGroupSerializedState", + "text": "ControlGroupSerializedState" + }, + ", ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesFilters", + "text": "PublishesFilters" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataViews", + "text": "PublishesDataViews" + }, + " & ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.HasSerializedChildState", + "text": "HasSerializedChildState" + }, + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlPanelState", + "text": "ControlPanelState" + }, + "<", + "DefaultControlState", + ">> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasEditCapabilities", + "text": "HasEditCapabilities" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataLoading", + "text": "PublishesDataLoading" + }, + " & Pick<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnsavedChanges", + "text": "PublishesUnsavedChanges" + }, + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>, \"unsavedChanges\"> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTimeslice", + "text": "PublishesTimeslice" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasParentApi", + "text": "HasParentApi" + }, + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnifiedSearch", + "text": "PublishesUnifiedSearch" + }, + "> & ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.HasSaveNotification", + "text": "HasSaveNotification" + }, + " & ", + "PublishesReload", + "> & { allowExpensiveQueries$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; autoApplySelections$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; ignoreParentSettings$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ParentIgnoreSettings", + "text": "ParentIgnoreSettings" + }, + " | undefined>; labelPosition: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + "ControlStyle", + ">; asyncResetUnsavedChanges: () => Promise; controlFetch$: (controlUuid: string) => ", + "Observable", + "<", + "ControlFetchContext", + ">; openAddDataControlFlyout: (options?: { controlStateTransform?: ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlStateTransform", + "text": "ControlStateTransform" + }, + "<", + "DefaultControlState", + "> | undefined; onSave?: (() => void) | undefined; } | undefined) => void; untilInitialized: () => Promise; getEditorConfig: () => ", + "ControlGroupEditorConfig", + " | undefined; getLastSavedControlState: (controlUuid: string) => object; setChainingSystem: (chainingSystem: ", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlGroupChainingSystem", + "text": "ControlGroupChainingSystem" + }, + ") => void; } & { reload: () => void; updateInput: (input: Partial<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>) => void; getInput$: () => ", + "BehaviorSubject", + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRuntimeState", + "text": "ControlGroupRuntimeState" + }, + "<", + "DefaultControlState", + ">>; }" ], "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", "deprecated": false, @@ -5831,10 +6119,10 @@ "{ [x: string]: Pick<", { "pluginId": "controls", - "scope": "common", + "scope": "public", "docId": "kibControlsPluginApi", - "section": "def-common.OptionsListEmbeddableInput", - "text": "OptionsListEmbeddableInput" + "section": "def-public.OptionsListControlState", + "text": "OptionsListControlState" }, ", \"selectedOptions\" | \"title\" | \"fieldName\" | \"existsSelected\" | \"exclude\">; }" ], diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 7362978ebeb9a..1dff10df5472e 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 300 | 0 | 283 | 8 | +| 303 | 0 | 287 | 8 | ## Client diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 846f09987a97e..6afc06b6b0658 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 68f3bff29f0aa..69bf8229e117e 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 5caf5b62377d3..cb48088284475 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 7da6a1b35eaa5..97d45d29e05a9 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 18962368d6903..21976a658d557 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 6c2da342b88ea..5245d5d114552 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index a9c51f3879b86..1330ad11d1376 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index e70d8b706614f..68f277d3e4906 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 13f279ae89d4c..ce50e617a8440 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 6a64887ffb7bc..d0896b0d29914 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 16e6dee22640e..26605c70f5830 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index d86552edf5b25..0cd97b8adaff3 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index bbf9f6e216c19..cd9909704ab86 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 613f08afa44f6..c23c5429b00d2 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 0024cf0916a3c..63c4ab8d31573 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 91df1f48037f2..98488202a83da 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 9e7658a67a052..348c531d153d1 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index a183fba9e5d4f..964563951c00e 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index c91ee27353ff7..ebe1db5bca416 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 0505c4ee5fa8a..e8786adbdcf07 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index ddd8844e92d7e..eda4dcd94a645 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 5b39835cbd43c..06f2eedd3cdb7 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index f2df6e8839519..961b04113cacd 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index abe8d53f1d08d..d3ab69c4ac537 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 2a9f3189cb84f..438df658e9924 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index d0e100a1e149b..a04354d7d3d0f 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 3686ef774e7d8..45610348ea208 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 511b7b4ba537d..157b0a45ca0b5 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 1aa4e70398b42..eb84223c240e1 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index d43225d51a519..d207eb021e7ed 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index cfe6cbd9d49c2..4f522fe4b49e7 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 5977510683129..ee0f88652389a 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 55c9b20fc082b..aa67f9fcc554e 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index f8f4811e17193..905797efc9158 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 1bd273a8ddf86..310573b8e8f81 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 6638ce967d605..080d557be8474 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 1a7c7c463920d..56412090773bc 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index f0a322670df99..24bc47c3801b1 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 0f3b585959454..e08f4e095c6bd 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index a5f4fa6d97d09..2553ce20eaa1c 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index e7020a9796cbe..d8bb47ff0cb33 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 4dff5eb25bb50..e20dafb41a3a9 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index aed90744961f2..0606b0538921b 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 19389d8b0d6c2..cf709aeae748f 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 4db9a3a51bc25..7cabebce73535 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index b5b1c1ad14e95..71b689be8a3dc 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 6237d36366e22..d2c1c5fa3e6b5 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 1204aec929dcf..da695c8f8a5ec 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 18f10285f3b3f..a3cffdf1d1ee2 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 939fd60781d83..76c5ff8a479d2 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index 8e8bd0e4aeb0b..046c4b9f5cefc 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 219ba45d8185e..cc556d673faa6 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index d305ef128d5ba..4605180e455bb 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index e2af3b9eacc66..7da54f78f7ad3 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index ef665831c9cd2..b0e79c60a0f65 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 8565d61b4493b..390c1ee48757a 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 0cfc2aee9fc3d..d34a500a01e25 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 7f19d0af0aef8..e1c6219b24d46 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 2f87a8f74f43a..86e67643b307f 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 6bf97ce607714..2ac5d7604d52e 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 0648567ea50fd..55570816c5e3a 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 07d60fc58e914..2e53ee7ed732a 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index 220fe37ed627a..e246bc494d1aa 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 15887c3125709..66b2a10592a10 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index 4c7d16698bc01..2a72f96e664e6 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 75e3f924c971e..4370f71f7269e 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index e6886620a4047..418d8993c6441 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index ab30d7ca94060..95d204d37aa8b 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 01c116760ad03..e583666f8717a 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index ad33fe28d46ec..da7922d100b21 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index 259673b32012a..fa80f277f039f 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 8f32eaef1e8a9..44fae0cc586ca 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index bd6e4aef06024..f4f4fe27acf84 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 107de83cb7ea4..c8c4b0f64f44e 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index d94a697970500..f3f6b1eac5d95 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index 944a8cc9e1f39..c4641e7592f27 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 4392e40460ee9..95171fc3dc84a 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index a5fab792019bf..74c1d61a2cff6 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index 0d94027a92b94..67d62bb9da191 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index ca450f3194ffc..83e36d12c652b 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 6f410cb24d996..cc8224eb6d231 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index 7c8c62da304b4..7097898c180ea 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 5bba7fc53e07a..9f18805206dd5 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 7551a72162031..53dd9cc6369cd 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index 237ef6d4d0b0b..b398624bfbd11 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index 7c35bb823a21b..7c5e4da66fb02 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index c78c2e6a6b68c..c1b5c69e55d08 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 1455076758a6d..848130cf38e6c 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index ebce40f111756..dc356f89e2ef7 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 14621982aae07..ca01d4a33ddf6 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index b49ec0910288c..1c84328c2c275 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index af03a69ef898d..80f8f5f2226d6 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index 6366768433a8b..5d043baabfb2f 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 43b38bdc7c047..1a4e85c515d15 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 8a905a9e0e874..781e276c5dac0 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 021ae25c3c971..82df57923195d 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index a7d3bda404387..1a95518ae42e3 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index fcb047c3337fe..6b1a34f9232ee 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index bade86dd25f19..e8708bc3acd26 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index da730a9e4ef69..0f4e24986238f 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 2ead816b4e5d1..909cf0bacbc61 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index f0a4f62ea116d..f112828ca4c4c 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index d2b68b0cc0f2a..e4ce9904ed257 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index bd99d170c7ac6..6b2122d72f708 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 2d8b10fc232af..da0270f10bc1c 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index e3d84ebaba20f..40ec05005f78c 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 2a46d7e2f745d..0dd338e9b89f1 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index 3d5bb3881a3d9..4a295e78a9fd2 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index b79e31caf2bca..48e2d69cbc9fd 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 01841b9878f04..73795b0c85ff8 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index f5353818d6344..c769027fbb6b1 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 04bc596aadb0e..642396d2160ae 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4530,6 +4530,10 @@ "plugin": "reporting", "path": "x-pack/plugins/reporting/server/routes/internal/deprecations/deprecations.ts" }, + { + "plugin": "reporting", + "path": "x-pack/plugins/reporting/server/routes/internal/diagnostic/browser.ts" + }, { "plugin": "reporting", "path": "x-pack/plugins/reporting/server/routes/internal/management/jobs.ts" @@ -7184,10 +7188,6 @@ "plugin": "painlessLab", "path": "x-pack/plugins/painless_lab/server/routes/api/execute.ts" }, - { - "plugin": "reporting", - "path": "x-pack/plugins/reporting/server/routes/internal/diagnostic/browser.ts" - }, { "plugin": "reporting", "path": "x-pack/plugins/reporting/server/routes/internal/generate/csv_searchsource_immediate.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index c2065002d88c5..760ef4bf8652b 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 2f9e754ea4237..8879bd03d7ff1 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 796f5b643b9cb..14b0a93140f87 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index be46da808f0e7..2826bdc599ee6 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index 7f08edd3828ea..b1c07e3925abe 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index bf30afbf79a49..26451e38ad119 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index b5025b2e2fe2c..a95cc54dbab5c 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index eae501fe24f31..3a696feb36144 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index d176ae67febd1..1ca545780c94f 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index fdbfa48d7ecee..ee24b452b1125 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 799a4dcc21997..6c9a5c71dd214 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 829cedeba977f..d2fd5730ab5cc 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index c2d19c4e0681a..fc54dcc2d1432 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index a444dff176be4..3a54345ef1cc7 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 532310b00c726..5b0ae5b0fb06f 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index ca7a2def156e5..15f218b139c61 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 25bda6c14c331..d22d807e08be9 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 0bbcdb72b9b39..ec4b8db93e193 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index f2fe2b1db242f..17e63aa4c4706 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index e9767ab28968d..28316c292aaea 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index a68a5c87ac1ec..55c6946163da4 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index 1db5afe8df578..5347e17a96d8f 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 3f06f88ac1bc2..53a5b01d69638 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index 3bfc4d82e2c70..521097303f2ab 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index 10aff84c72460..3e4c81d88fdb0 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index a333d19e6b51f..f3e5a56532427 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 38082ee137ae3..ba759295987e3 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 5f38560f72e65..7263fa426b564 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index d5e8d108aab86..a55e2e6fc9953 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 938838606340f..c64e47544fdd3 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index f925c8646ef94..850a43717791b 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index fa21e114bc157..4a0abcc89bd34 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 5890a985f2c7c..dbb687feab20c 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index dd5c7363205ed..d140266cd2f56 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index a40594c46ed17..bba2de7e6650b 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 59b42ed430d7d..5b633624d6083 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index bed43dd74c504..6e5ca681eeaac 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index c501bae3cb0c4..ca4d172c2a470 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index bc1b82a659be3..3a105c218fdc0 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index a5ed21b721c4f..e9ccaeb7d943c 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 0f8e5247615e2..4490c653159f4 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index e7f44bf3dcdd1..0f228542cfaf1 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 1221604910f0f..4003a8a32db1b 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index f292da44c446a..b2689c57b34c3 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 3ae3b6289d410..9f30d8d7d5505 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index eea5ba05970ff..377afcc802e78 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index d9cb13984f252..12dc800b1c90f 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 7ea4ceb50510f..0b6294af12c29 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 9db5c589ab5b6..190d288bef963 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index e49645982fcdd..8faafa1926599 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 0257b13c9168e..2338b601b233f 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index af9ed04a87b82..8a63edac29290 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 3c8641102bba6..7dee816c95327 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 678f9c7ef19d2..9fe3dba2eb0a8 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index 8d55e01e969ce..ebe9c4fce69dd 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index fa6b96558e998..e32a3ab04ee63 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 619c6351fbc68..a30d711841126 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 62d2718ebc507..a26e579189d3d 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 98ce133c48077..82ed26c2dcd65 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 6b01a754eac7f..93ed325abca3f 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 11ebc9f206e0b..ebba4ab955d9d 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 784530e31217a..b919737cde1f6 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 47c9e0ba1f1bc..0cf82ec4a01fc 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index 4bd8b4e496c2a..be5ff48e22240 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 88685a618d191..2128b18b6684e 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 662a3a76da8c1..c405dd63bf439 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 18a25ff484df4..a14d8b4ae3db8 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 38cec98ed4c35..4824a03092627 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index d136b8969bfd8..d2341b46d7304 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 3e8fe9982dd05..3b36bb7af131b 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index f0781eca25242..737396799b83f 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 347d493d355f6..74551b6a648d9 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index d6bbc2f78f670..e5f89c1db638d 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 33b8b5400a108..746af2a397e9a 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 0a4480fdfec8d..b57560f587b6d 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index aa305fe43b857..19376a2e3a706 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index ffd65b5221915..b90735973b296 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index e040197f3661b..7d08088d55258 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 01c5e447d0331..996bf5a73b3ff 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index adba88872c3c7..a15f7d313efe5 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 1a3aa2cfa58b7..b15c3b503014e 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index bd6f9bf5d2316..42ceb22039153 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 19fd0e7616da6..0afddd2ee22f4 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 8ad84e0d31df1..6737d23628408 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 9862043c1a0a8..033c5461c8764 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index c987af7c04b2d..61022bcd3e2bb 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 28c5acbd27b7f..6f02d4b683567 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 297d4c6957d75..36facc4718cdb 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index 86510f4f0cf20..82f3e864d513b 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 27c5542789762..a611d2aebe46f 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index 4af0da0eee429..f690f8752a334 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index 4043412cf1f4d..b0525a9873c15 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index 58463b45aaa87..fbf9b6d4d9a31 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 4cae86c9dea7a..54a784df068c6 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index a975a2cec732c..5b8305db99452 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 9ce9c8e6ec43b..c32699c31195d 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 3cbbc1c40a641..1fc5807f95031 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 6c6b54277e658..d0a41eeebd89c 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 2f8c94bf42d97..a7366a3667b42 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index bfc36a7b628e3..820f1678ac60e 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 15cd2b929b661..8474ed5756616 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 27468bda1df56..ac33e785c6fe6 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 89a1ca0e4a82a..a14d96067c108 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 8a9bb9e37932b..8a5091455fd4b 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 51bbe4bab5961..02f7434ac3384 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 0fe2b7edc9ea4..c9e388d16dab9 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 392db37da3766..9a0ba12a699a3 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index e36f1691923a0..63e200712b82e 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 719ad2f3d9f1c..50ef39571861d 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 8baabd6494be4..998cb58f9117d 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index cfce6ae80fd66..7bbe622f6caa4 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 25746768a8d0a..b4b5a4aee56bc 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index dcbaf6a46e4d4..49ac49daea755 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index 8187aa9b6576a..b8a5f4a964753 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index d85e017697c82..d196148d77f00 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 6f5905e9695f0..5b5d5cc4f3e79 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index c5ed9bb393081..1fd3e0b3718e1 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index bbb8629ee41a6..1905a3053dfd9 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index eae151893791a..b4bf9ff4eb075 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index a7e98a0ca0037..933a13423fe98 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 8d1c83c29792d..c369071ab2ef2 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 577cc5e8f25be..94d07c81e1617 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index acd79fedd2eb2..500dce059c12f 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index c0f8a5676a7aa..11e07557e49ff 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index f60ff8b62b1ea..af2047304aed0 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 7c078292e524f..23bc86b4f984e 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 6a5e5a0655f4a..c8e7b12c6db0f 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 6a861e1ff8191..b98d46a08452f 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index adc08af040728..7d6e538038907 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 556d2be8c3a4f..fe0c27160eca4 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index cace08c6e4b93..be42a2c1059e1 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index c4b6f2d779098..a6c888a9dc96a 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index f38ff7b6512cb..78259b983d381 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index b4da49b038131..a4415f36afe93 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 53129e2471571..61cfe1a25a7cd 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index ba7d2f012bd1d..ef0e5af9b1c25 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 4ec9fed678a10..0f30d082029db 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 7092fccecf236..ffefa42f69035 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.devdocs.json b/api_docs/kbn_elastic_assistant_common.devdocs.json index b30a7523fd7fd..2fc5def8c52ae 100644 --- a/api_docs/kbn_elastic_assistant_common.devdocs.json +++ b/api_docs/kbn_elastic_assistant_common.devdocs.json @@ -1131,6 +1131,81 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseCreateProps", + "type": "Type", + "tags": [], + "label": "BaseCreateProps", + "description": [], + "signature": [ + "{ name: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseDefaultableFields", + "type": "Type", + "tags": [], + "label": "BaseDefaultableFields", + "description": [], + "signature": [ + "{ namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseRequiredFields", + "type": "Type", + "tags": [], + "label": "BaseRequiredFields", + "description": [], + "signature": [ + "{ name: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseResponseProps", + "type": "Type", + "tags": [], + "label": "BaseResponseProps", + "description": [], + "signature": [ + "{ namespace: string; name: string; users: { id?: string | undefined; name?: string | undefined; }[]; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseUpdateProps", + "type": "Type", + "tags": [], + "label": "BaseUpdateProps", + "description": [], + "signature": [ + "{ namespace?: string | undefined; name?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.BulkActionBase", @@ -1522,9 +1597,9 @@ "label": "CreateKnowledgeBaseEntryRequestBody", "description": [], "signature": [ - "{ text: string; metadata: { source: string; required: boolean; kbResource: string; }; }" + "{ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1537,9 +1612,9 @@ "label": "CreateKnowledgeBaseEntryRequestBodyInput", "description": [], "signature": [ - "{ text: string; metadata: { source: string; required: boolean; kbResource: string; }; }" + "{ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1552,9 +1627,9 @@ "label": "CreateKnowledgeBaseEntryResponse", "description": [], "signature": [ - "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" + "{ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1659,7 +1734,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1674,7 +1749,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1687,9 +1762,9 @@ "label": "DeleteKnowledgeBaseEntryResponse", "description": [], "signature": [ - "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" + "{ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1739,6 +1814,111 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntry", + "type": "Type", + "tags": [], + "label": "DocumentEntry", + "description": [], + "signature": [ + "{ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryCreateFields", + "type": "Type", + "tags": [], + "label": "DocumentEntryCreateFields", + "description": [], + "signature": [ + "{ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryOptionalFields", + "type": "Type", + "tags": [], + "label": "DocumentEntryOptionalFields", + "description": [], + "signature": [ + "{ required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryRequiredFields", + "type": "Type", + "tags": [], + "label": "DocumentEntryRequiredFields", + "description": [], + "signature": [ + "{ source: string; type: \"document\"; text: string; kbResource: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryResponseFields", + "type": "Type", + "tags": [], + "label": "DocumentEntryResponseFields", + "description": [], + "signature": [ + "{ source: string; type: \"document\"; text: string; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryType", + "type": "Type", + "tags": [], + "label": "DocumentEntryType", + "description": [], + "signature": [ + "\"document\"" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryUpdateFields", + "type": "Type", + "tags": [], + "label": "DocumentEntryUpdateFields", + "description": [], + "signature": [ + "{ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.ELASTIC_AI_ASSISTANT_ANONYMIZATION_FIELDS_URL", @@ -2229,7 +2409,7 @@ "signature": [ "{ per_page: number; page: number; sort_field?: \"title\" | \"created_at\" | \"updated_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; filter?: string | undefined; fields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2244,7 +2424,7 @@ "signature": [ "{ per_page?: number | undefined; page?: number | undefined; sort_field?: \"title\" | \"created_at\" | \"updated_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; filter?: string | undefined; fields?: unknown; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2257,9 +2437,9 @@ "label": "FindKnowledgeBaseEntriesResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; data: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; }" + "{ page: number; perPage: number; total: number; data: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2274,7 +2454,7 @@ "signature": [ "\"title\" | \"updated_at\" | \"created_at\" | \"is_default\"" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2289,7 +2469,7 @@ "signature": [ "{ title: \"title\"; updated_at: \"updated_at\"; created_at: \"created_at\"; is_default: \"is_default\"; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2416,6 +2596,128 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntry", + "type": "Type", + "tags": [], + "label": "IndexEntry", + "description": [], + "signature": [ + "{ id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryCreateFields", + "type": "Type", + "tags": [], + "label": "IndexEntryCreateFields", + "description": [], + "signature": [ + "{ type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryOptionalFields", + "type": "Type", + "tags": [], + "label": "IndexEntryOptionalFields", + "description": [], + "signature": [ + "{ inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryRequiredFields", + "type": "Type", + "tags": [], + "label": "IndexEntryRequiredFields", + "description": [], + "signature": [ + "{ type: \"index\"; index: string; description: string; field: string; queryDescription: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryResponseFields", + "type": "Type", + "tags": [], + "label": "IndexEntryResponseFields", + "description": [], + "signature": [ + "{ type: \"index\"; index: string; description: string; field: string; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryType", + "type": "Type", + "tags": [], + "label": "IndexEntryType", + "description": [], + "signature": [ + "\"index\"" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryUpdateFields", + "type": "Type", + "tags": [], + "label": "IndexEntryUpdateFields", + "description": [], + "signature": [ + "{ type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.InputSchema", + "type": "Type", + "tags": [], + "label": "InputSchema", + "description": [ + "\nArray of objects defining the input schema, allowing the LLM to extract structured data to be used in retrieval" + ], + "signature": [ + "{ description: string; fieldName: string; fieldType: string; }[]" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.INTERNAL_API_ACCESS", @@ -2441,7 +2743,7 @@ "signature": [ "{ ids?: string[] | undefined; query?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2456,7 +2758,7 @@ "signature": [ "\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2471,7 +2773,7 @@ "signature": [ "{ id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2484,9 +2786,9 @@ "label": "KnowledgeBaseEntryBulkCrudActionResponse", "description": [], "signature": [ - "{ attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }" + "{ attributes: { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2499,9 +2801,9 @@ "label": "KnowledgeBaseEntryBulkCrudActionResults", "description": [], "signature": [ - "{ created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }" + "{ created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2516,7 +2818,7 @@ "signature": [ "{ total: number; succeeded: number; failed: number; skipped: number; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2529,9 +2831,9 @@ "label": "KnowledgeBaseEntryCreateProps", "description": [], "signature": [ - "{ text: string; metadata: { source: string; required: boolean; kbResource: string; }; }" + "{ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2546,7 +2848,7 @@ "signature": [ "{ id: string; name?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2561,7 +2863,7 @@ "signature": [ "{ error: string; message: string; statusCode: number; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2574,9 +2876,9 @@ "label": "KnowledgeBaseEntryResponse", "description": [], "signature": [ - "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" + "{ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2589,9 +2891,9 @@ "label": "KnowledgeBaseEntryUpdateProps", "description": [], "signature": [ - "{ id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" + "{ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2684,12 +2986,12 @@ "tags": [], "label": "Metadata", "description": [ - "\nMetadata about an Knowledge Base Entry" + "\nMetadata about a Knowledge Base Entry" ], "signature": [ "{ source: string; required: boolean; kbResource: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2736,7 +3038,7 @@ "signature": [ "{ message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2794,9 +3096,9 @@ "label": "PerformKnowledgeBaseEntryBulkActionRequestBody", "description": [], "signature": [ - "{ create?: { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }[] | undefined; update?: { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[] | undefined; delete?: { ids?: string[] | undefined; query?: string | undefined; } | undefined; }" + "{ create?: ({ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[] | undefined; update?: ({ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[] | undefined; delete?: { ids?: string[] | undefined; query?: string | undefined; } | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2809,9 +3111,9 @@ "label": "PerformKnowledgeBaseEntryBulkActionRequestBodyInput", "description": [], "signature": [ - "{ create?: { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }[] | undefined; update?: { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[] | undefined; delete?: { ids?: string[] | undefined; query?: string | undefined; } | undefined; }" + "{ create?: ({ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[] | undefined; update?: ({ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[] | undefined; delete?: { ids?: string[] | undefined; query?: string | undefined; } | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2824,9 +3126,9 @@ "label": "PerformKnowledgeBaseEntryBulkActionResponse", "description": [], "signature": [ - "{ attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }" + "{ attributes: { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3038,7 +3340,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3053,7 +3355,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3066,9 +3368,9 @@ "label": "ReadKnowledgeBaseEntryResponse", "description": [], "signature": [ - "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" + "{ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3135,6 +3437,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ResponseFields", + "type": "Type", + "tags": [], + "label": "ResponseFields", + "description": [], + "signature": [ + "{ id: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.RootContext", @@ -3150,6 +3467,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.SharedResponseProps", + "type": "Type", + "tags": [], + "label": "SharedResponseProps", + "description": [], + "signature": [ + "{ id: string; namespace: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.SortOrder", @@ -3280,9 +3612,9 @@ "label": "UpdateKnowledgeBaseEntryRequestBody", "description": [], "signature": [ - "{ id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" + "{ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3295,9 +3627,9 @@ "label": "UpdateKnowledgeBaseEntryRequestBodyInput", "description": [], "signature": [ - "{ id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" + "{ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3312,7 +3644,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3327,7 +3659,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3340,9 +3672,9 @@ "label": "UpdateKnowledgeBaseEntryResponse", "description": [], "signature": [ - "{ id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }" + "{ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3393,7 +3725,7 @@ "signature": [ "{ modelId: string; tokens: {} & { [k: string]: number; }; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3700,6 +4032,81 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseCreateProps", + "type": "Object", + "tags": [], + "label": "BaseCreateProps", + "description": [], + "signature": [ + "Zod.ZodObject; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, \"strip\", Zod.ZodTypeAny, { name: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }, { name: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseDefaultableFields", + "type": "Object", + "tags": [], + "label": "BaseDefaultableFields", + "description": [], + "signature": [ + "Zod.ZodObject<{ namespace: Zod.ZodOptional; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }, { namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseRequiredFields", + "type": "Object", + "tags": [], + "label": "BaseRequiredFields", + "description": [], + "signature": [ + "Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseResponseProps", + "type": "Object", + "tags": [], + "label": "BaseResponseProps", + "description": [], + "signature": [ + "Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, \"strip\", Zod.ZodTypeAny, { namespace: string; name: string; users: { id?: string | undefined; name?: string | undefined; }[]; }, { namespace: string; name: string; users: { id?: string | undefined; name?: string | undefined; }[]; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.BaseUpdateProps", + "type": "Object", + "tags": [], + "label": "BaseUpdateProps", + "description": [], + "signature": [ + "Zod.ZodObject<{ name: Zod.ZodOptional; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, \"strip\", Zod.ZodTypeAny, { namespace?: string | undefined; name?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }, { namespace?: string | undefined; name?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.BulkActionBase", @@ -4053,9 +4460,9 @@ "label": "CreateKnowledgeBaseEntryRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ metadata: Zod.ZodObject<{ kbResource: Zod.ZodString; source: Zod.ZodString; required: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { source: string; required: boolean; kbResource: string; }, { source: string; required: boolean; kbResource: string; }>; text: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }>, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }>, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4068,9 +4475,9 @@ "label": "CreateKnowledgeBaseEntryResponse", "description": [], "signature": [ - "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4162,7 +4569,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4175,9 +4582,9 @@ "label": "DeleteKnowledgeBaseEntryResponse", "description": [], "signature": [ - "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4212,6 +4619,111 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntry", + "type": "Object", + "tags": [], + "label": "DocumentEntry", + "description": [], + "signature": [ + "Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryCreateFields", + "type": "Object", + "tags": [], + "label": "DocumentEntryCreateFields", + "description": [], + "signature": [ + "Zod.ZodObject; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }>, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryOptionalFields", + "type": "Object", + "tags": [], + "label": "DocumentEntryOptionalFields", + "description": [], + "signature": [ + "Zod.ZodObject<{ required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryRequiredFields", + "type": "Object", + "tags": [], + "label": "DocumentEntryRequiredFields", + "description": [], + "signature": [ + "Zod.ZodObject<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; kbResource: string; }, { source: string; type: \"document\"; text: string; kbResource: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryResponseFields", + "type": "Object", + "tags": [], + "label": "DocumentEntryResponseFields", + "description": [], + "signature": [ + "Zod.ZodObject; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryType", + "type": "Object", + "tags": [], + "label": "DocumentEntryType", + "description": [], + "signature": [ + "Zod.ZodLiteral<\"document\">" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.DocumentEntryUpdateFields", + "type": "Object", + "tags": [], + "label": "DocumentEntryUpdateFields", + "description": [], + "signature": [ + "Zod.ZodObject; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, Zod.objectUtil.extendShape; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }>, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.ErrorSchema", @@ -4342,7 +4854,7 @@ "signature": [ "Zod.ZodObject<{ fields: Zod.ZodOptional, string[], unknown>>; filter: Zod.ZodOptional; sort_field: Zod.ZodOptional>; sort_order: Zod.ZodOptional>; page: Zod.ZodDefault>; per_page: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { per_page: number; page: number; sort_field?: \"title\" | \"created_at\" | \"updated_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; filter?: string | undefined; fields?: string[] | undefined; }, { per_page?: number | undefined; page?: number | undefined; sort_field?: \"title\" | \"created_at\" | \"updated_at\" | \"is_default\" | undefined; sort_order?: \"asc\" | \"desc\" | undefined; filter?: string | undefined; fields?: unknown; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4355,9 +4867,9 @@ "label": "FindKnowledgeBaseEntriesResponse", "description": [], "signature": [ - "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; }>" + "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; }, { page: number; perPage: number; total: number; data: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4372,7 +4884,7 @@ "signature": [ "Zod.ZodEnum<[\"created_at\", \"is_default\", \"title\", \"updated_at\"]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4387,7 +4899,7 @@ "signature": [ "{ title: \"title\"; updated_at: \"updated_at\"; created_at: \"created_at\"; is_default: \"is_default\"; }" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4497,6 +5009,126 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntry", + "type": "Object", + "tags": [], + "label": "IndexEntry", + "description": [], + "signature": [ + "Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryCreateFields", + "type": "Object", + "tags": [], + "label": "IndexEntryCreateFields", + "description": [], + "signature": [ + "Zod.ZodObject; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }>, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryOptionalFields", + "type": "Object", + "tags": [], + "label": "IndexEntryOptionalFields", + "description": [], + "signature": [ + "Zod.ZodObject<{ inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryRequiredFields", + "type": "Object", + "tags": [], + "label": "IndexEntryRequiredFields", + "description": [], + "signature": [ + "Zod.ZodObject<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"index\"; index: string; description: string; field: string; queryDescription: string; }, { type: \"index\"; index: string; description: string; field: string; queryDescription: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryResponseFields", + "type": "Object", + "tags": [], + "label": "IndexEntryResponseFields", + "description": [], + "signature": [ + "Zod.ZodObject; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; index: string; description: string; field: string; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; index: string; description: string; field: string; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryType", + "type": "Object", + "tags": [], + "label": "IndexEntryType", + "description": [], + "signature": [ + "Zod.ZodLiteral<\"index\">" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.IndexEntryUpdateFields", + "type": "Object", + "tags": [], + "label": "IndexEntryUpdateFields", + "description": [], + "signature": [ + "Zod.ZodObject; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, Zod.objectUtil.extendShape; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }>, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.InputSchema", + "type": "Object", + "tags": [], + "label": "InputSchema", + "description": [], + "signature": [ + "Zod.ZodArray, \"many\">" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.KnowledgeBaseEntryBulkActionBase", @@ -4507,7 +5139,7 @@ "signature": [ "Zod.ZodObject<{ query: Zod.ZodOptional; ids: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { ids?: string[] | undefined; query?: string | undefined; }, { ids?: string[] | undefined; query?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4522,7 +5154,7 @@ "signature": [ "Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4537,7 +5169,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodString; name: Zod.ZodOptional; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4550,9 +5182,9 @@ "label": "KnowledgeBaseEntryBulkCrudActionResponse", "description": [], "signature": [ - "Zod.ZodObject<{ success: Zod.ZodOptional; statusCode: Zod.ZodOptional; message: Zod.ZodOptional; knowledgeBaseEntriesCount: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">; created: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; knowledgeBaseEntries: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }>" + "Zod.ZodObject<{ success: Zod.ZodOptional; statusCode: Zod.ZodOptional; message: Zod.ZodOptional; knowledgeBaseEntriesCount: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">; created: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; knowledgeBaseEntries: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }, { attributes: { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4565,9 +5197,9 @@ "label": "KnowledgeBaseEntryBulkCrudActionResults", "description": [], "signature": [ - "Zod.ZodObject<{ updated: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">; created: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>" + "Zod.ZodObject<{ updated: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">; created: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4582,7 +5214,7 @@ "signature": [ "Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4595,9 +5227,9 @@ "label": "KnowledgeBaseEntryCreateProps", "description": [], "signature": [ - "Zod.ZodObject<{ metadata: Zod.ZodObject<{ kbResource: Zod.ZodString; source: Zod.ZodString; required: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { source: string; required: boolean; kbResource: string; }, { source: string; required: boolean; kbResource: string; }>; text: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }>, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }>, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4612,7 +5244,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodString; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4627,7 +5259,7 @@ "signature": [ "Zod.ZodObject<{ statusCode: Zod.ZodNumber; error: Zod.ZodString; message: Zod.ZodString; }, \"strict\", Zod.ZodTypeAny, { error: string; message: string; statusCode: number; }, { error: string; message: string; statusCode: number; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4640,9 +5272,9 @@ "label": "KnowledgeBaseEntryResponse", "description": [], "signature": [ - "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4655,9 +5287,9 @@ "label": "KnowledgeBaseEntryUpdateProps", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodString; metadata: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, Zod.objectUtil.extendShape; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }>, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, Zod.objectUtil.extendShape; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }>, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4747,7 +5379,7 @@ "signature": [ "Zod.ZodObject<{ kbResource: Zod.ZodString; source: Zod.ZodString; required: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { source: string; required: boolean; kbResource: string; }, { source: string; required: boolean; kbResource: string; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4792,7 +5424,7 @@ "signature": [ "Zod.ZodObject<{ message: Zod.ZodString; statusCode: Zod.ZodNumber; err_code: Zod.ZodOptional; knowledgeBaseEntries: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4835,9 +5467,9 @@ "label": "PerformKnowledgeBaseEntryBulkActionRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ delete: Zod.ZodOptional; ids: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { ids?: string[] | undefined; query?: string | undefined; }, { ids?: string[] | undefined; query?: string | undefined; }>>; create: Zod.ZodOptional; text: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }, { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }>, \"many\">>; update: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { create?: { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }[] | undefined; update?: { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[] | undefined; delete?: { ids?: string[] | undefined; query?: string | undefined; } | undefined; }, { create?: { text: string; metadata: { source: string; required: boolean; kbResource: string; }; }[] | undefined; update?: { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[] | undefined; delete?: { ids?: string[] | undefined; query?: string | undefined; } | undefined; }>" + "Zod.ZodObject<{ delete: Zod.ZodOptional; ids: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { ids?: string[] | undefined; query?: string | undefined; }, { ids?: string[] | undefined; query?: string | undefined; }>>; create: Zod.ZodOptional; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }>, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }>, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">>; update: Zod.ZodOptional; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, Zod.objectUtil.extendShape; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }>, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, Zod.objectUtil.extendShape; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }>, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { create?: ({ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[] | undefined; update?: ({ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[] | undefined; delete?: { ids?: string[] | undefined; query?: string | undefined; } | undefined; }, { create?: ({ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[] | undefined; update?: ({ source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[] | undefined; delete?: { ids?: string[] | undefined; query?: string | undefined; } | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4850,9 +5482,9 @@ "label": "PerformKnowledgeBaseEntryBulkActionResponse", "description": [], "signature": [ - "Zod.ZodObject<{ success: Zod.ZodOptional; statusCode: Zod.ZodOptional; message: Zod.ZodOptional; knowledgeBaseEntriesCount: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">; created: Zod.ZodArray; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; knowledgeBaseEntries: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; updated: { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }>" + "Zod.ZodObject<{ success: Zod.ZodOptional; statusCode: Zod.ZodOptional; message: Zod.ZodOptional; knowledgeBaseEntriesCount: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">; created: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; knowledgeBaseEntries: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }, { attributes: { results: { created: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; updated: ({ source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; } | { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; })[]; skipped: { id: string; skip_reason: \"KNOWLEDGE_BASE_ENTRY_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; statusCode: number; knowledgeBaseEntries: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; message?: string | undefined; success?: boolean | undefined; statusCode?: number | undefined; knowledgeBaseEntriesCount?: number | undefined; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5017,7 +5649,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5030,9 +5662,9 @@ "label": "ReadKnowledgeBaseEntryResponse", "description": [], "signature": [ - "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5082,6 +5714,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ResponseFields", + "type": "Object", + "tags": [], + "label": "ResponseFields", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; }, { id: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.RootContext", @@ -5097,6 +5744,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.SharedResponseProps", + "type": "Object", + "tags": [], + "label": "SharedResponseProps", + "description": [], + "signature": [ + "Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; }, { id: string; namespace: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.SortOrder", @@ -5195,9 +5857,9 @@ "label": "UpdateKnowledgeBaseEntryRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodString; metadata: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, Zod.objectUtil.extendShape; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }>, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; type: \"document\"; text: string; name: string; kbResource: string; namespace?: string | undefined; required?: boolean | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; namespace: Zod.ZodOptional>; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>>; }, Zod.objectUtil.extendShape; users: Zod.ZodOptional; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">>; }>, { type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }>, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { type: \"index\"; name: string; index: string; description: string; field: string; queryDescription: string; namespace?: string | undefined; users?: { id?: string | undefined; name?: string | undefined; }[] | undefined; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5212,7 +5874,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5225,9 +5887,9 @@ "label": "UpdateKnowledgeBaseEntryResponse", "description": [], "signature": [ - "Zod.ZodObject<{ timestamp: Zod.ZodOptional; id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; metadata: Zod.ZodOptional>; namespace: Zod.ZodString; text: Zod.ZodString; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }, { id: string; namespace: string; text: string; createdAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; updatedAt?: string | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; metadata?: { source: string; required: boolean; kbResource: string; } | undefined; }>" + "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"document\">; kbResource: Zod.ZodString; source: Zod.ZodString; text: Zod.ZodString; }, { required: Zod.ZodOptional; vector: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>>; }>>, \"strip\", Zod.ZodTypeAny, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }, { source: string; id: string; type: \"document\"; namespace: string; text: string; name: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; users: { id?: string | undefined; name?: string | undefined; }[]; kbResource: string; required?: boolean | undefined; vector?: { modelId: string; tokens: {} & { [k: string]: number; }; } | undefined; }>, Zod.ZodObject; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; }>, { id: Zod.ZodString; createdAt: Zod.ZodString; createdBy: Zod.ZodString; updatedAt: Zod.ZodString; updatedBy: Zod.ZodString; }>, Zod.objectUtil.extendShape<{ type: Zod.ZodLiteral<\"index\">; index: Zod.ZodString; field: Zod.ZodString; description: Zod.ZodString; queryDescription: Zod.ZodString; }, { inputSchema: Zod.ZodOptional, \"many\">>; outputFields: Zod.ZodOptional>; }>>, \"strip\", Zod.ZodTypeAny, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }, { id: string; type: \"index\"; namespace: string; name: string; index: string; description: string; createdBy: string; updatedBy: string; createdAt: string; updatedAt: string; field: string; users: { id?: string | undefined; name?: string | undefined; }[]; queryDescription: string; inputSchema?: { description: string; fieldName: string; fieldType: string; }[] | undefined; outputFields?: string[] | undefined; }>]>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5272,7 +5934,7 @@ "signature": [ "Zod.ZodObject<{ modelId: Zod.ZodString; tokens: Zod.ZodObject<{}, \"strip\", Zod.ZodNumber, Zod.objectOutputType<{}, Zod.ZodNumber, \"strip\">, Zod.objectInputType<{}, Zod.ZodNumber, \"strip\">>; }, \"strip\", Zod.ZodTypeAny, { modelId: string; tokens: {} & { [k: string]: number; }; }, { modelId: string; tokens: {} & { [k: string]: number; }; }>" ], - "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts", + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 926a58dc24348..77eb398b16666 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 346 | 0 | 320 | 0 | +| 390 | 0 | 363 | 0 | ## Common diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 1b380895acaa1..1d8fed15a2613 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index b5b6cc57b7378..3f317ea9addbf 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 980df42d3b408..973dcdc341178 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 9a5136d072691..f5a84a34c94fc 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 6913c620d12ad..873a2efec19d0 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 8b5b18f3d8c3a..32b759b160104 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 657e337487da1..ad71385cfad14 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index 45b4f757885a6..365993fe49b14 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -18,6 +18,15223 @@ }, "common": { "classes": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter", + "type": "Class", + "tags": [], + "label": "BasicPrettyPrinter", + "description": [], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.print", + "type": "Function", + "tags": [], + "label": "print", + "description": [], + "signature": [ + "(query: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAst", + "text": "ESQLAst" + }, + ", opts?: ", + "BasicPrettyPrinterOptions", + " | undefined) => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.print.$1", + "type": "Array", + "tags": [], + "label": "query", + "description": [ + "ES|QL query AST to print." + ], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAst", + "text": "ESQLAst" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.print.$2", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + "BasicPrettyPrinterOptions", + " | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "A single-line string representation of the query." + ] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.multiline", + "type": "Function", + "tags": [], + "label": "multiline", + "description": [ + "\nPrint a query with each command on a separate line. It is also possible to\nspecify a tabbing option for the pipe character.\n" + ], + "signature": [ + "(query: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAst", + "text": "ESQLAst" + }, + ", opts?: ", + "BasicPrettyPrinterMultilineOptions", + " | undefined) => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.multiline.$1", + "type": "Array", + "tags": [], + "label": "query", + "description": [ + "ES|QL query AST to print." + ], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAst", + "text": "ESQLAst" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.multiline.$2", + "type": "Object", + "tags": [], + "label": "opts", + "description": [ + "Options for pretty-printing." + ], + "signature": [ + "BasicPrettyPrinterMultilineOptions", + " | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "A multi-line string representation of the query." + ] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.command", + "type": "Function", + "tags": [], + "label": "command", + "description": [], + "signature": [ + "(command: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstCommand", + "text": "ESQLAstCommand" + }, + ", opts?: ", + "BasicPrettyPrinterOptions", + " | undefined) => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.command.$1", + "type": "CompoundType", + "tags": [], + "label": "command", + "description": [ + "ES|QL command AST node to print." + ], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstCommand", + "text": "ESQLAstCommand" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.command.$2", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + "BasicPrettyPrinterOptions", + " | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "Prints a single-line string representation of the command." + ] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.expression", + "type": "Function", + "tags": [], + "label": "expression", + "description": [], + "signature": [ + "(expression: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ", opts?: ", + "BasicPrettyPrinterOptions", + " | undefined) => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.expression.$1", + "type": "CompoundType", + "tags": [], + "label": "expression", + "description": [ + "ES|QL expression AST node to print." + ], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.expression.$2", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + "BasicPrettyPrinterOptions", + " | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "Prints a single-line string representation of the expression." + ] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.opts", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + "{ multiline: boolean; pipeTab: string; lowercase: boolean; lowercaseCommands: boolean; lowercaseOptions: boolean; lowercaseFunctions: boolean; lowercaseKeywords: boolean; }" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + "BasicPrettyPrinterOptions" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.keyword", + "type": "Function", + "tags": [], + "label": "keyword", + "description": [], + "signature": [ + "(word: string) => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.keyword.$1", + "type": "string", + "tags": [], + "label": "word", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.visitor", + "type": "Object", + "tags": [], + "label": "visitor", + "description": [], + "signature": [ + "Visitor", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; } & { visitFunctionCallExpression: (ctx: ", + "FunctionCallExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; } & { visitFunctionCallExpression: (ctx: ", + "FunctionCallExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitCommandOption: (ctx: ", + "CommandOptionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; } & { visitFunctionCallExpression: (ctx: ", + "FunctionCallExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; } & { visitFunctionCallExpression: (ctx: ", + "FunctionCallExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitCommand: (ctx: ", + "CommandVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + "ESQLList", + ">) => string; } & { visitFunctionCallExpression: (ctx: ", + "FunctionCallExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ">) => string; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">) => string; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; }, ", + "SharedData", + ">) => string; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">) => string; } & { ...; }, ", + "SharedData", + ">) => string; } & { ...; }, ", + "SharedData", + ">) => string; } & { ...; } & { ...; }, ", + "SharedData", + ">) => string; } & { ...; } & { ...; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstCommand", + "text": "ESQLAstCommand" + }, + ">) => string; } & { ...; }, ", + "SharedData", + ">" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.print", + "type": "Function", + "tags": [], + "label": "print", + "description": [], + "signature": [ + "(query: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAst", + "text": "ESQLAst" + }, + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.print.$1", + "type": "Array", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAst", + "text": "ESQLAst" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.printCommand", + "type": "Function", + "tags": [], + "label": "printCommand", + "description": [], + "signature": [ + "(command: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstCommand", + "text": "ESQLAstCommand" + }, + ") => any" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.printCommand.$1", + "type": "CompoundType", + "tags": [], + "label": "command", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstCommand", + "text": "ESQLAstCommand" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.printExpression", + "type": "Function", + "tags": [], + "label": "printExpression", + "description": [], + "signature": [ + "(expression: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.printExpression.$1", + "type": "CompoundType", + "tags": [], + "label": "expression", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.ESQLErrorListener", diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index e8fedd62e16ac..d4c42e035aa65 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 152 | 1 | 120 | 15 | +| 177 | 1 | 139 | 31 | ## Common diff --git a/api_docs/kbn_esql_utils.devdocs.json b/api_docs/kbn_esql_utils.devdocs.json index ba29fb24e23fd..d66c6fa269059 100644 --- a/api_docs/kbn_esql_utils.devdocs.json +++ b/api_docs/kbn_esql_utils.devdocs.json @@ -1325,6 +1325,87 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-utils", + "id": "def-common.isQueryWrappedByPipes", + "type": "Function", + "tags": [], + "label": "isQueryWrappedByPipes", + "description": [], + "signature": [ + "(query: string) => boolean" + ], + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-utils", + "id": "def-common.isQueryWrappedByPipes.$1", + "type": "string", + "tags": [], + "label": "query", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-utils", + "id": "def-common.prettifyQuery", + "type": "Function", + "tags": [], + "label": "prettifyQuery", + "description": [], + "signature": [ + "(query: string, isWrapped: boolean) => string" + ], + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-utils", + "id": "def-common.prettifyQuery.$1", + "type": "string", + "tags": [], + "label": "query", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-utils", + "id": "def-common.prettifyQuery.$2", + "type": "boolean", + "tags": [], + "label": "isWrapped", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-utils", "id": "def-common.removeDropCommandsFromESQLQuery", diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 59afb9edf1160..9235e57ac58dc 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 68 | 0 | 64 | 0 | +| 73 | 0 | 69 | 0 | ## Common diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 0595f437977c1..15ba63572e521 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -39,7 +39,7 @@ }, ", parameterDefinition: { name: string; type: ", "FunctionParameterType", - "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; literalOptions?: string[] | undefined; literalSuggestions?: string[] | undefined; }, references: ", + "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }, references: ", "ReferenceMaps", ", parentCommand: string | undefined) => boolean | undefined" ], @@ -78,7 +78,7 @@ "signature": [ "{ name: string; type: ", "FunctionParameterType", - "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; literalOptions?: string[] | undefined; literalSuggestions?: string[] | undefined; }" + "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }" ], "path": "packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts", "deprecated": false, @@ -3401,7 +3401,7 @@ "signature": [ "{ params: { name: string; type: ", "FunctionParameterType", - "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; literalOptions?: string[] | undefined; literalSuggestions?: string[] | undefined; }[]; minParams?: number | undefined; returnType: ", + "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }[]; minParams?: number | undefined; returnType: ", "FunctionReturnType", "; }[]" ], diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index a5f6b0b083fa8..53b8ab6a3832c 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 599033c5f2a97..7663b09dc4c92 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index b206b4dde852f..d0b12e11ee223 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index c8eef3f386ae6..e43a65dfc0e54 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 20afed3886aa9..9f1e371419bb6 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 995a227a68bea..9d37e58b67e9a 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index c84cea7d384da..b6630e9b0808e 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index e62b50d6f16fe..96d3ef084ac0c 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index ebf52fce4cc32..eef41fd9ea38d 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 672e77d91b671..0e951af619be6 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 552cc568bea95..ab901a2dccce6 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index 4b71c5f46421b..2487a72cea7e0 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 1acb80a21bf35..e6b5a3b1f8539 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 2ce3b22d0d301..da5cc88b2c90b 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index c70ae88582673..9339bd996a93d 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 0ebd398c1bced..9f94765c920ac 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index a98a511ce02f2..59e33dfaf3433 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 2c32778e6c96d..5e5de1534ca47 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index c1ab6ad1695af..1c1c66089188c 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 0fa7d16378f1d..860bb1429be8b 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 0e0a88dfcb9f0..feabb8071438c 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 197a57e4312a1..bbccde50f61ce 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 490152257e709..6d95d65e4de73 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 467a0681a5860..fd12670855f12 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index 37dfcb480c035..97f999e06d3e3 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index b28b064c4ba64..e0cc97c599200 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 6aab165c1cecc..6d2dcbc4394ca 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 86bc56bd4ec50..5aa7aa0f00f34 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 1340fdd9d735e..f96e289249798 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 4b8667d2ba57f..ae081fd14b869 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 7c5ac61798e43..038dd7142d69b 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 9de828d73c79e..27773267cc643 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 57c8d1c72d958..0c69697afa2b5 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 2c3b6fd5043db..e8fa5427988b2 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 7b354a3482291..f75d8390d940c 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 38d70204d748e..bb0d2053f97c7 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 3abc43053d882..1850c89a59daf 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index bbe5e656c696a..78e5d00152573 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 49d12772ab7cd..2cf2390b71b4d 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index f2b8f71108aa0..4f8b64560b5f0 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 5d38446f7284e..2aa22c95fab44 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 85ec6b3fb1b6c..39ae47cb4393c 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index e096878351ced..0439dce056875 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 65f739f34e0c3..2964cc2236af2 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index f465239319d71..22077564eb635 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 52eb33d73518e..a9b233746f131 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index 271518bcb63e4..d6ba4384023e6 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index c97c6dc1dabfd..22d995149baf7 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 456a2a8bbbb7f..dda0eec1760d8 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 45289f77acfd9..2b68e8edd9b31 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 6276a5517554b..ae6d387a4e6b9 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index dd2dbb0ba0849..6f347712c52ea 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 4987e1aacf061..af43360b3beb4 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 6cedb22423532..3f12e45898be5 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 041568e3a628a..c41b26dfcf725 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 2303511e63f58..7a4762a80c458 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index 47e0bb5e1863a..709a87329a8ee 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 1ecc7009734da..f677bbbb79129 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 98830c28a632e..bc14dbbb0c9d1 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index efe2c83404bc1..e57aa0c4230e6 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 03c9cb006a9b9..fef57aae5a7c9 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 653741a98083f..d23fd567ead92 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 65d95bb6b1bbc..79417b27985cf 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index d10fa1bcc8104..b73235ed97274 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 4a4e15a61802f..a306d295a0d00 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 0741b3318d7fd..613f529b12d9f 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index 9c441109a7b4b..b70e3edc81afa 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index c6fd8ff55681d..1d6f45efe239f 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index eab3d43b93f3f..3528210d2495f 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index dfd2a528613cd..cbfc23205a869 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index f00c3ab05dc58..2ae5dbbe63de8 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 2cf14dfe268b0..ea816b8fc1872 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index ad8af53af5e53..4a3d9c4bb6445 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index 0d37bef630594..0e75c085f1425 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 112fad6405695..71f72b07dcd22 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index f15fa0d574794..45f6603a41bef 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 4f449e15da43f..fce7edf186061 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index 654b278795d6d..b0846ca2cf432 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index d1711768e8747..cb9258ef222bb 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 6c6aa55d8cf8c..c244e94a619e3 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 0f22cf8f9acfd..98ea0204ca7c0 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index f0db3157a9732..29dc2c3d6c536 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 8215efda09851..dba766d4690c5 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 57c0ef1416145..a7f478d07ba1b 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 8c397bafe1809..ddd1de6314117 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 9d19d1d6fb1b5..46035ffd315f5 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index a38dd3d4a8dbe..823dd351fa205 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 851831db54816..2ec12f7f34f21 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 78b2f8cb8fce9..f9ba239c2cba6 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 82b3e92c699f8..e3808a9f149ff 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 8248d88e30808..3b682b017ab6d 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index a89c97f201c1c..015a14e231fe1 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 12cc53ea4e023..0fb1cde3bd873 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index d73e080ba08c6..e1b97b070e053 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 36fc5557aea5e..8ce2fdecda378 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index d8819cf205c01..691d987cadd0a 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 2241ff0ced8f3..282a9de6f268d 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index b5bebe49007d5..72bccadff94a0 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 3abbda170722a..5f4efe9277750 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index fb8bcef48a25b..911bb33a53568 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index c393854e2ba27..eeca08987c373 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index a2f5e5f0b0bbd..96ef346167f9e 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.devdocs.json b/api_docs/kbn_presentation_publishing.devdocs.json index 14d724b3408b0..e634c29d675f5 100644 --- a/api_docs/kbn_presentation_publishing.devdocs.json +++ b/api_docs/kbn_presentation_publishing.devdocs.json @@ -4447,6 +4447,38 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesDisabledActionIds.setDisabledActionIds", + "type": "Function", + "tags": [], + "label": "setDisabledActionIds", + "description": [], + "signature": [ + "(ids: string[] | undefined) => void" + ], + "path": "packages/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesDisabledActionIds.setDisabledActionIds.$1", + "type": "Array", + "tags": [], + "label": "ids", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, { "parentPluginId": "@kbn/presentation-publishing", "id": "def-public.PublishesDisabledActionIds.getAllTriggersDisabled", @@ -7857,7 +7889,7 @@ "label": "ViewMode", "description": [], "signature": [ - "\"edit\" | \"view\" | \"preview\" | \"print\"" + "\"edit\" | \"view\" | \"print\" | \"preview\"" ], "path": "packages/presentation/presentation_publishing/interfaces/publishes_view_mode.ts", "deprecated": false, diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 4f12966bd1d7a..58f78ea73efb1 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 216 | 0 | 181 | 6 | +| 218 | 0 | 183 | 6 | ## Client diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 65b2816327464..a2923217c2d74 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 65659e686c2bf..e985a7545c790 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 3abf5d9745dd6..48dc483b1704e 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 0e60c05aa06f3..a791bd8b2eb89 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 34d3bc2abaa10..f0e97adb1db0a 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 45136cd935d3a..b5be6c6439abe 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index efcc8fab5b911..1956d8a324342 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index d6bebe556f9e0..491afe6174136 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 20f64f63de588..a1d41b00b2570 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 308a18da4c222..3c4117a306bcf 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index f768b8cf64748..552afa33c3f79 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 63c6e1d443cc3..29b68b3130743 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 2a0d8b0f935b1..13281b90b02fe 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index cdfc5d3b93796..ef6c27bab755e 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 7f8fece522d18..0f1548b13a686 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 91a4f7b3f4dab..18ed2ec867542 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 78312764c23cc..adbb03892ab9d 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 5de565f4ee8ad..dc7e863c32b83 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index ff94eab4127fe..70119876e3f96 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 461653a6ec27a..44a92bfec8ea6 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 6a02cbd019b7e..e12b3126d4cb6 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index fb0802274b6a4..ae2d17b1f3c42 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index eb2e3f3602c87..d381b955bd7d8 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 7cbaeda969ebe..bc5f5bfcb2076 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index c6b19558e560e..db924d7c23b8b 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 90890f5edb9a2..d6e183d318411 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index cbf0540526cbf..7f5cd761aa23e 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 2da7eeece1450..6da263108cb67 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index f44f72b88a698..1649e19e0f9e2 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 43de58d529ad2..7bc8133a3692d 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 3f95a7d101096..fc9f07b486cef 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 7f039b2a37730..a1234177ed7fb 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 50795ed01aebd..7db91bf4aa269 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 7043188ea7f37..9b9132ca53dc1 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index ac50485651831..a432e4ee0a5a4 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index 707f4933a0ff4..0a7dc3a7fcb34 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 53d5288060946..fce8cb9728aee 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 5772c99c60d6f..894ccf68c036b 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index a418e8cf4b45a..6496bb726f6ed 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 82dabd01eda3e..0bd3342251fc2 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 9d919d218c3f6..0d78251da8635 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 253e0a1c5922f..05689d95c66f9 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 91c0f64cd18b1..59631ee8eb734 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index fd374d94d8292..a09396c23b6d9 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 44ab8cce32af3..21c53ff7e5db7 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index cd6c60cdb39c5..90a1de0b828df 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 84d7f161b796f..b9e1931a3b7de 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 4653bcc5e3d8a..d8cb7a016b322 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 86ae945870599..3bb0976421b6e 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 65d87d57ebc0a..d307440e04e0e 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_common.mdx b/api_docs/kbn_security_solution_common.mdx index 19f8a0653f26a..9bc2e092f4a59 100644 --- a/api_docs/kbn_security_solution_common.mdx +++ b/api_docs/kbn_security_solution_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-common title: "@kbn/security-solution-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-common plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-common'] --- import kbnSecuritySolutionCommonObj from './kbn_security_solution_common.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 7d09ac3457752..489cfd1fa02b9 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 08a63e74b4ecc..080a524bbc9dd 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 5febcf2963d81..2e471eac37a7e 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index e6a3f82df5227..c4f5bd19ab9c6 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index 02e2fbb86a18c..b21fa523bf8e7 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index 49932ec66b4f2..a9c515db7212f 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 0bfc28550f7ac..8464aff0fd63f 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 2e03b6a4b6f2c..28c96dfad9133 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 668f9a35e469b..aefe5052bcb99 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 505a1998fc5b5..3f719bce0c4c5 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.devdocs.json b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json index e64f8a5bed160..30e53edc6256b 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.devdocs.json +++ b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json @@ -851,7 +851,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"view\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -865,7 +865,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"view\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -1004,7 +1004,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"view\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, @@ -1018,7 +1018,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"view\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, @@ -1144,7 +1144,7 @@ "label": "showValueListModal", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\"" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"stop\" | \"main\" | \"path\" | \"form\" | React.ComponentType | \"line\" | \"rect\" | \"code\" | \"ruby\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"base\" | \"s\" | \"legend\" | \"canvas\" | \"svg\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"select\" | \"view\" | \"output\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 0e2dd78144585..1ecdfe7612534 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 2beb0870f4744..bf37c598ad9dd 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 6e15ec1a57827..9581088b7a95a 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 9b8cae667bbfe..54744d48c4535 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 26ab7af00c59b..8ef4342a6228a 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 16b43445686d9..45393712d7f94 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index fe2297db4418c..fcb4c917e7731 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 12c029b10dd24..b742c65091e90 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 38962258eb7c1..0f10f8a5586b4 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index d25960c648a7b..8786185fc46be 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 21e4e6c7c3ca2..896a62b87bf93 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 63cc3f0e2e54b..5e84835ae87f9 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 7ec025c07508d..deee7dea73f95 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index b5a1e7eac0d98..b9cabedba5191 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index 55842f18279b3..31332cb549070 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index fa971f533e26a..5c8fd9630cc2e 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index d67e53e488364..2fa23575ff8bc 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index b861cd2112c09..7af875ae2299e 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index a90a2a0ae523d..e9d602c995112 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 193229b223657..41c0b61e7e03d 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 45bc6ba0a9170..611ec5c5d2019 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index b0cfa8d9c7426..a3bb80aed4b99 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 8713bfaa5255e..417952b7d798c 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index b95f29257616c..2806d928ca5b7 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index 0497d1f59ad35..d50b87a0b4e34 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index bc9c2d3746673..63cf1e71fe1ef 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index c250f288f8fb2..dd54f6a54f0fb 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index dfac78d10236f..8ce28c355c15f 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index f54fc6035bb2b..777c0a36c1d5c 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 16036038ff7ea..650761322474f 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index bbbb840234dd5..c328873757c0d 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 6b0146df67f2e..a4428537457bd 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index 2f1d385e179cd..bc04f6bfd0674 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index 5670f5a2a4f0f..51bc5ac01916c 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index aea80e4c8b3cb..c7ad3e3fc656e 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 600958ada767c..e159ec69ec07b 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 3f4ca5eb6e707..4ad1db3ca3ff4 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index c7cc708f806f9..184ffd0a1a14e 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 4ea320b9ce679..5fb61c3694b90 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index b39ba415e1a64..af59e7fa57e51 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index fd6e9a56c0dfc..ff3d76a21c2cf 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 1615353ccfba8..616da46698b8c 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index 78d4f218cd1e2..d845e8a56aaf0 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 2e0f848a2e414..e8239908e460a 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 4804e806979b5..cdb2de320bb1a 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 4ee1a9f31b056..6e38f236b6811 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 4076ae2af59c5..0fb26d5008678 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index 55e3611e04e81..d431956f6a96d 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index d8a0b5b4b48ee..3a33ec0e69e17 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 2826ab6910535..7ade0c73fbeb6 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 2b304f8d5d3e6..13d73882e7abe 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index ba868e2df624a..8cb3925a8a8c0 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 9e9c28fc8ae9c..f7fd2d502e3db 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index f5a40f52053e2..ca28e0353eb3c 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 98bb8a7e0377a..5427894535a89 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index 74c43382b8be5..b421e8ba965d5 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 982b18aa68c34..81908e7da178d 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 9a9c686a5f87d..24d46844fc74c 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 90462326430f7..86e817bbfbe56 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 8c05816888981..3a8a8bc414685 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 688ab4414f580..5bc9c91fde8a3 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index a74580ff87df8..13732826c2690 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 116a4c0a45c4d..05799817a7d6e 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index bd3689b40a8a5..7e436f97fb2d2 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 5d9bc3b206833..6241acafca71f 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index cff807b7d7747..f7a6b00c04fd5 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 5eb920e593013..9e76ad93a1248 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 8883f1ac5d513..8f7d523e36139 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 737bb615b1c54..5fcdcb4b414db 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 070bd6bd9a7ec..6cf7e3b53ec33 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index a8a3127d5a11c..899346c757531 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 56c5def584b7b..20b5b596a9fca 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index ec49a1eab25c2..33aad56446b3b 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 915fc9c1ac76a..34e1ba73dabaa 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.devdocs.json b/api_docs/kbn_test_eui_helpers.devdocs.json index b3e5d25ccc414..6568ffb5f6f98 100644 --- a/api_docs/kbn_test_eui_helpers.devdocs.json +++ b/api_docs/kbn_test_eui_helpers.devdocs.json @@ -470,7 +470,7 @@ "\nOpens the popover for the date picker" ], "signature": [ - "() => void" + "() => Promise" ], "path": "packages/kbn-test-eui-helpers/src/rtl_helpers.tsx", "deprecated": false, @@ -522,7 +522,7 @@ "\nActivates the refresh button" ], "signature": [ - "() => void" + "() => Promise" ], "path": "packages/kbn-test-eui-helpers/src/rtl_helpers.tsx", "deprecated": false, diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 6d8dc2a24f3c3..71427d385baa4 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 8a62dc61a5a21..d526d5d11962e 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 0de0b334f2662..18d316ac27571 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index b61d7e8e4b6db..0f4de353c7a49 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 04a0d91a2a368..d26191ebd6af4 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 7d4b2ee698b5d..0b97495313ad2 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 37e9083afc336..aa913ce110823 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 83a31de212fb8..7d46d12a4a75e 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index f8455da9508c6..4d83b67ec28e6 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 12ed76494b4b4..200f93a00b2f1 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index 89d25aaadaa24..c621110228276 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 36ca87fd29fc8..e47b5375287d0 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 21b86a79b3c1a..430f34f7c1393 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index 56bc7ce7ff781..6ed6026730b6d 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -508,7 +508,7 @@ "label": "UnifiedDataTable", "description": [], "signature": [ - "({ ariaLabelledBy, columns, columnsMeta, showColumnTokens, configHeaderRowHeight, headerRowHeightState, onUpdateHeaderRowHeight, controlColumnIds, rowAdditionalLeadingControls, dataView, loadingState, onFilter, onResize, onSetColumns, onSort, rows, searchDescription, searchTitle, settings, showTimeCol, showFullScreenButton, sort, useNewFieldsApi, isSortEnabled, isPaginationEnabled, cellActionsTriggerId, className, rowHeightState, onUpdateRowHeight, maxAllowedSampleSize, sampleSizeState, onUpdateSampleSize, isPlainRecord, rowsPerPageState, onUpdateRowsPerPage, onFieldEdited, services, renderCustomGridBody, renderCustomToolbar, externalControlColumns, trailingControlColumns, totalHits, onFetchMoreRecords, renderDocumentView, setExpandedDoc, expandedDoc, configRowHeight, showMultiFields, maxDocFieldsDisplayed, externalAdditionalControls, rowsPerPageOptions, visibleCellActions, externalCustomRenderers, additionalFieldGroups, consumer, componentsTourSteps, gridStyleOverride, rowLineHeightOverride, cellActionsMetadata, customGridColumnsConfiguration, enableComparisonMode, cellContext, renderCellPopover, getRowIndicator, dataGridDensityState, onUpdateDataGridDensity, }: ", + "({ ariaLabelledBy, columns, columnsMeta, showColumnTokens, configHeaderRowHeight, headerRowHeightState, onUpdateHeaderRowHeight, controlColumnIds, rowAdditionalLeadingControls, dataView, loadingState, onFilter, onResize, onSetColumns, onSort, rows, searchDescription, searchTitle, settings, showTimeCol, showFullScreenButton, sort, useNewFieldsApi, isSortEnabled, isPaginationEnabled, cellActionsTriggerId, cellActionsMetadata, cellActionsHandling, visibleCellActions, className, rowHeightState, onUpdateRowHeight, maxAllowedSampleSize, sampleSizeState, onUpdateSampleSize, isPlainRecord, rowsPerPageState, onUpdateRowsPerPage, onFieldEdited, services, renderCustomGridBody, renderCustomToolbar, externalControlColumns, trailingControlColumns, totalHits, onFetchMoreRecords, renderDocumentView, setExpandedDoc, expandedDoc, configRowHeight, showMultiFields, maxDocFieldsDisplayed, externalAdditionalControls, rowsPerPageOptions, externalCustomRenderers, additionalFieldGroups, consumer, componentsTourSteps, gridStyleOverride, rowLineHeightOverride, customGridColumnsConfiguration, enableComparisonMode, cellContext, renderCellPopover, getRowIndicator, dataGridDensityState, onUpdateDataGridDensity, }: ", { "pluginId": "@kbn/unified-data-table", "scope": "public", @@ -527,7 +527,7 @@ "id": "def-public.UnifiedDataTable.$1", "type": "Object", "tags": [], - "label": "{\n ariaLabelledBy,\n columns,\n columnsMeta,\n showColumnTokens,\n configHeaderRowHeight,\n headerRowHeightState,\n onUpdateHeaderRowHeight,\n controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT,\n rowAdditionalLeadingControls,\n dataView,\n loadingState,\n onFilter,\n onResize,\n onSetColumns,\n onSort,\n rows,\n searchDescription,\n searchTitle,\n settings,\n showTimeCol,\n showFullScreenButton = true,\n sort,\n useNewFieldsApi,\n isSortEnabled = true,\n isPaginationEnabled = true,\n cellActionsTriggerId,\n className,\n rowHeightState,\n onUpdateRowHeight,\n maxAllowedSampleSize,\n sampleSizeState,\n onUpdateSampleSize,\n isPlainRecord = false,\n rowsPerPageState,\n onUpdateRowsPerPage,\n onFieldEdited,\n services,\n renderCustomGridBody,\n renderCustomToolbar,\n externalControlColumns, // TODO: deprecate in favor of rowAdditionalLeadingControls\n trailingControlColumns, // TODO: deprecate in favor of rowAdditionalLeadingControls\n totalHits,\n onFetchMoreRecords,\n renderDocumentView,\n setExpandedDoc,\n expandedDoc,\n configRowHeight,\n showMultiFields = true,\n maxDocFieldsDisplayed = 50,\n externalAdditionalControls,\n rowsPerPageOptions,\n visibleCellActions,\n externalCustomRenderers,\n additionalFieldGroups,\n consumer = 'discover',\n componentsTourSteps,\n gridStyleOverride,\n rowLineHeightOverride,\n cellActionsMetadata,\n customGridColumnsConfiguration,\n enableComparisonMode,\n cellContext,\n renderCellPopover,\n getRowIndicator,\n dataGridDensityState,\n onUpdateDataGridDensity,\n}", + "label": "{\n ariaLabelledBy,\n columns,\n columnsMeta,\n showColumnTokens,\n configHeaderRowHeight,\n headerRowHeightState,\n onUpdateHeaderRowHeight,\n controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT,\n rowAdditionalLeadingControls,\n dataView,\n loadingState,\n onFilter,\n onResize,\n onSetColumns,\n onSort,\n rows,\n searchDescription,\n searchTitle,\n settings,\n showTimeCol,\n showFullScreenButton = true,\n sort,\n useNewFieldsApi,\n isSortEnabled = true,\n isPaginationEnabled = true,\n cellActionsTriggerId,\n cellActionsMetadata,\n cellActionsHandling = 'replace',\n visibleCellActions,\n className,\n rowHeightState,\n onUpdateRowHeight,\n maxAllowedSampleSize,\n sampleSizeState,\n onUpdateSampleSize,\n isPlainRecord = false,\n rowsPerPageState,\n onUpdateRowsPerPage,\n onFieldEdited,\n services,\n renderCustomGridBody,\n renderCustomToolbar,\n externalControlColumns, // TODO: deprecate in favor of rowAdditionalLeadingControls\n trailingControlColumns, // TODO: deprecate in favor of rowAdditionalLeadingControls\n totalHits,\n onFetchMoreRecords,\n renderDocumentView,\n setExpandedDoc,\n expandedDoc,\n configRowHeight,\n showMultiFields = true,\n maxDocFieldsDisplayed = 50,\n externalAdditionalControls,\n rowsPerPageOptions,\n externalCustomRenderers,\n additionalFieldGroups,\n consumer = 'discover',\n componentsTourSteps,\n gridStyleOverride,\n rowLineHeightOverride,\n customGridColumnsConfiguration,\n enableComparisonMode,\n cellContext,\n renderCellPopover,\n getRowIndicator,\n dataGridDensityState,\n onUpdateDataGridDensity,\n}", "description": [], "signature": [ { @@ -1985,22 +1985,6 @@ "children": [], "returnComment": [] }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.UnifiedDataTableProps.cellActionsTriggerId", - "type": "string", - "tags": [], - "label": "cellActionsTriggerId", - "description": [ - "\nOptional triggerId to retrieve the column cell actions that will override the default ones" - ], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.UnifiedDataTableProps.services", @@ -2420,6 +2404,54 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.UnifiedDataTableProps.cellActionsTriggerId", + "type": "string", + "tags": [], + "label": "cellActionsTriggerId", + "description": [ + "\nOptional triggerId to retrieve the column cell actions that will override the default ones" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.UnifiedDataTableProps.cellActionsMetadata", + "type": "Object", + "tags": [], + "label": "cellActionsMetadata", + "description": [ + "\nCustom set of properties used by some actions.\nAn action might require a specific set of metadata properties to render.\nThis data is sent directly to actions." + ], + "signature": [ + "Record | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-public.UnifiedDataTableProps.cellActionsHandling", + "type": "CompoundType", + "tags": [], + "label": "cellActionsHandling", + "description": [ + "\nControls whether the cell actions should replace the default cell actions or be appended to them" + ], + "signature": [ + "\"replace\" | \"append\" | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.UnifiedDataTableProps.visibleCellActions", @@ -2594,22 +2626,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.UnifiedDataTableProps.cellActionsMetadata", - "type": "Object", - "tags": [], - "label": "cellActionsMetadata", - "description": [ - "\nCustom set of properties used by some actions.\nAn action might require a specific set of metadata properties to render.\nThis data is sent directly to actions." - ], - "signature": [ - "Record | undefined" - ], - "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.UnifiedDataTableProps.cellContext", diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 8ad312d7fa09b..b6578e62569fc 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 184 | 0 | 108 | 2 | +| 185 | 0 | 108 | 2 | ## Client diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index c02c3f417f93f..da49379ca0be9 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index e19f407ee8100..37557e68222b2 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 0f1bc15e97ea0..618116e5c0d10 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 5a1a713be0a48..a75e7efe0d4f3 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 4374196a75ed5..44a8c50274697 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index b0865f531555f..3bd0f0deba37d 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 89a97be1ed722..30d39c49d5a25 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 61796a561b18c..5165fafc988a4 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index 984c1ed8d3e82..a4a2967db31ef 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 66b2fc0c41b6a..4943db59bc738 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index f826fae1a1609..76718e830f6c1 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index a6f9c96fef65c..5d6c443d1e719 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index e0999ac9cb439..4a8139866dd9a 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 9fed5ef6d21ab..dc16e9b75a4b1 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index aec806d8e9200..6330ed61cb349 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index e65cd72f7c27c..a310296f28b33 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 3a9ba9d1c71d9..4cf448ef4bc6e 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 243c21eb923ae..195b25bbfcca1 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index e93b2895aa949..c6d748369529d 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 753e7b2f6718f..3dde96349f44b 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 024db93a9dfb1..977f5c45e847b 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 91d224179a0ed..e2b6eae045304 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index dffc9126cb91c..221e8fc450bdb 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 6bdbcafde2fa2..b3cee3e93a749 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 5c6410d509655..82fd0431114ac 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 7a53642dcefaa..bd16ead1ae389 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.devdocs.json b/api_docs/logs_explorer.devdocs.json index dc0818e98bd7f..fefcffd0f9174 100644 --- a/api_docs/logs_explorer.devdocs.json +++ b/api_docs/logs_explorer.devdocs.json @@ -2151,7 +2151,7 @@ "label": "ControlPanels", "description": [], "signature": [ - "{ [x: string]: { order: number; width: \"small\" | \"medium\" | \"large\"; grow: boolean; type: string; explicitInput: { id: string; } & { dataViewId?: string | undefined; exclude?: boolean | undefined; existsSelected?: boolean | undefined; fieldName?: string | undefined; selectedOptions?: string[] | undefined; title?: string | undefined; }; }; }" + "{ [x: string]: { order: number; type: string; } & { width?: \"small\" | \"medium\" | \"large\" | undefined; grow?: boolean | undefined; dataViewId?: string | undefined; fieldName?: string | undefined; exclude?: boolean | undefined; existsSelected?: boolean | undefined; title?: string | undefined; selectedOptions?: string[] | undefined; }; }" ], "path": "x-pack/plugins/observability_solution/logs_explorer/common/control_panels/types.ts", "deprecated": false, @@ -2406,55 +2406,28 @@ }, { "parentPluginId": "logsExplorer", - "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.explicitInput", - "type": "Object", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.fieldName", + "type": "string", "tags": [], - "label": "explicitInput", + "label": "fieldName", "description": [], + "signature": [ + "\"data_stream.namespace\"" + ], "path": "x-pack/plugins/observability_solution/logs_explorer/common/control_panels/available_control_panels.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "logsExplorer", - "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.explicitInput.id", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "\"data_stream.namespace\"" - ], - "path": "x-pack/plugins/observability_solution/logs_explorer/common/control_panels/available_control_panels.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "logsExplorer", - "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.explicitInput.fieldName", - "type": "string", - "tags": [], - "label": "fieldName", - "description": [], - "signature": [ - "\"data_stream.namespace\"" - ], - "path": "x-pack/plugins/observability_solution/logs_explorer/common/control_panels/available_control_panels.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "logsExplorer", - "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.explicitInput.title", - "type": "string", - "tags": [], - "label": "title", - "description": [], - "path": "x-pack/plugins/observability_solution/logs_explorer/common/control_panels/available_control_panels.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "trackAdoption": false + }, + { + "parentPluginId": "logsExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.title", + "type": "string", + "tags": [], + "label": "title", + "description": [], + "path": "x-pack/plugins/observability_solution/logs_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -2473,10 +2446,16 @@ "<", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ order: ", "NumberC", - "; width: ", + "; type: ", + "StringC", + "; }>, ", + "PartialC", + "<{ width: ", "UnionC", "<[", "LiteralC", @@ -2486,35 +2465,25 @@ "LiteralC", "<\"large\">]>; grow: ", "BooleanC", - "; type: ", + "; dataViewId: ", "StringC", - "; explicitInput: ", - "IntersectionC", - "<[", - "TypeC", - "<{ id: ", - "StringC", - "; }>, ", - "PartialC", - "<{ dataViewId: ", + "; fieldName: ", "StringC", "; exclude: ", "BooleanC", "; existsSelected: ", "BooleanC", - "; fieldName: ", - "StringC", - "; selectedOptions: ", - "ArrayC", - "<", - "StringC", - ">; title: ", + "; title: ", "UnionC", "<[", "StringC", ", ", "UndefinedC", - "]>; }>]>; }>>" + "]>; selectedOptions: ", + "ArrayC", + "<", + "StringC", + ">; }>]>>" ], "path": "x-pack/plugins/observability_solution/logs_explorer/common/control_panels/types.ts", "deprecated": false, diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 917f7f9c80a3c..a0fd0267f436d 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 122 | 4 | 122 | 23 | +| 120 | 4 | 120 | 23 | ## Client diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index e5c74e2a4fc1a..52f533bbfe79f 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 6ada9f11d14f5..99a1280dc24e4 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 3f7b356ef3b4e..f821801774168 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 7ef50ce9aebb5..960751376af7c 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index a2ee9c035f89e..6ade551ac4d55 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 5f5aa6361a7eb..589f9d22b722b 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index d489df72a46ef..5bb2841050b9a 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index e6f421178b15d..a5bf1bab65b09 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index 912f95d24f0da..ae51ca5280ca5 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 8d52c622c3c8c..0b576e0e5b4c1 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 4203a139c7bd0..a881bda121f87 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 190414cc11a19..dc4c9dc75313c 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index f00e3102e42f6..cc36a9e0e7bbf 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 09fd8fe79bf73..4a3d1ad08b86d 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 2046f29c8dad9..a19da5dc686ba 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 887b74fd091a5..8ef621f7a6043 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index da6a66cdd7650..c20a710e83e08 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 1699dfe9d2768..c5acbb6094b50 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 79f173b4467d2..f3e55d70ba077 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 959fdc57eef20..43d40f724c334 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 354e0f1542ecb..98421078aa309 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index d7bf33175fa4d..78754d1bdca27 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 0f865bc34d490..3b5e6d607bd88 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 53067 | 245 | 39892 | 1947 | +| 53013 | 245 | 39835 | 1965 | ## Plugin Directory @@ -49,7 +49,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 13 | 0 | 2 | 2 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 39 | 0 | 30 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 149 | 0 | 125 | 6 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 394 | 0 | 385 | 28 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 259 | 0 | 254 | 30 | | crossClusterReplication | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 271 | 0 | 252 | 1 | @@ -69,7 +69,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A stateful layer to register shared features and provide an access point to discover without a direct dependency | 16 | 0 | 15 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 49 | 0 | 35 | 2 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 572 | 1 | 462 | 9 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 575 | 1 | 465 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 19 | 0 | 19 | 2 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 53 | 0 | 46 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | @@ -135,7 +135,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | A dashboard panel for creating links to dashboards or external links. | 5 | 0 | 5 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 226 | 0 | 97 | 52 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 13 | 0 | 11 | 7 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 122 | 4 | 122 | 23 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 120 | 4 | 120 | 23 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 310 | 0 | 281 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 44 | 0 | 44 | 7 | @@ -251,7 +251,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 222 | 0 | 219 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 33 | 0 | 33 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 31 | 0 | 15 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 300 | 0 | 283 | 8 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 303 | 0 | 287 | 8 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 73 | 0 | 73 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 18 | 0 | 18 | 0 | @@ -501,7 +501,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 16 | 0 | 8 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 156 | 0 | 130 | 9 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 346 | 0 | 320 | 0 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 390 | 0 | 363 | 0 | | | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 41 | 0 | 41 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 55 | 0 | 40 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | @@ -509,8 +509,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 269 | 1 | 209 | 15 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 27 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 152 | 1 | 120 | 15 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 68 | 0 | 64 | 0 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 177 | 1 | 139 | 31 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 73 | 0 | 69 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 197 | 0 | 185 | 10 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 40 | 0 | 40 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | @@ -613,7 +613,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 92 | 0 | 80 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 216 | 0 | 181 | 6 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 218 | 0 | 183 | 6 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 168 | 0 | 55 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 13 | 0 | 7 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 9 | 0 | @@ -762,7 +762,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 42 | 0 | 28 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 59 | 0 | 50 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 9 | 0 | 8 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 184 | 0 | 108 | 2 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 185 | 0 | 108 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 0 | 17 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 314 | 0 | 285 | 8 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 13 | 0 | 9 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 2d3402bf462cf..a75ecc24ec756 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 012792eb41244..65223ee0973d9 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index d6a5b25f7479d..a5c3f9d17fd42 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 94e749d395bbb..0357563af7f5e 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 789137678af6a..060d02308196b 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index bac0b841d6767..acc336379cd73 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 1bd52d302af80..d6cde975bc87b 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index e9e30d867ec91..8b6634ccfbfdd 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index d9ff17b303077..099da73adad76 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index bd3cd9257604e..4a87b09502f6c 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 621021426286e..60707427cf376 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.devdocs.json b/api_docs/saved_objects_management.devdocs.json index 6fad70d5634c1..0718f97522474 100644 --- a/api_docs/saved_objects_management.devdocs.json +++ b/api_docs/saved_objects_management.devdocs.json @@ -294,7 +294,7 @@ "label": "euiColumn", "description": [], "signature": [ - "{ id?: string | undefined; prefix?: string | undefined; onError?: React.ReactEventHandler | undefined; scope?: string | undefined; defaultValue?: string | number | readonly string[] | undefined; name: React.ReactNode; security?: string | undefined; onChange?: React.FormEventHandler | undefined; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; className?: string | undefined; contentEditable?: Booleanish | \"inherit\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; placeholder?: string | undefined; slot?: string | undefined; spellCheck?: Booleanish | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"search\" | \"none\" | \"text\" | \"url\" | \"email\" | \"tel\" | \"numeric\" | \"decimal\" | undefined; is?: string | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: Booleanish | undefined; 'aria-autocomplete'?: \"none\" | \"list\" | \"both\" | \"inline\" | undefined; 'aria-busy'?: Booleanish | undefined; 'aria-checked'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"step\" | \"time\" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: Booleanish | undefined; 'aria-dropeffect'?: \"execute\" | \"link\" | \"none\" | \"copy\" | \"move\" | \"popup\" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: Booleanish | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: Booleanish | undefined; 'aria-haspopup'?: boolean | \"grid\" | \"true\" | \"false\" | \"menu\" | \"dialog\" | \"listbox\" | \"tree\" | undefined; 'aria-hidden'?: Booleanish | undefined; 'aria-invalid'?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: \"off\" | \"assertive\" | \"polite\" | undefined; 'aria-modal'?: Booleanish | undefined; 'aria-multiline'?: Booleanish | undefined; 'aria-multiselectable'?: Booleanish | undefined; 'aria-orientation'?: \"horizontal\" | \"vertical\" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-readonly'?: Booleanish | undefined; 'aria-relevant'?: \"text\" | \"all\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; 'aria-required'?: Booleanish | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: Booleanish | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: \"none\" | \"other\" | \"ascending\" | \"descending\" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; 'data-test-subj'?: string | undefined; css?: ", + "{ id?: string | undefined; prefix?: string | undefined; onError?: React.ReactEventHandler | undefined; scope?: string | undefined; defaultValue?: string | number | readonly string[] | undefined; name: React.ReactNode; security?: string | undefined; onChange?: React.FormEventHandler | undefined; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; className?: string | undefined; contentEditable?: Booleanish | \"inherit\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; placeholder?: string | undefined; slot?: string | undefined; spellCheck?: Booleanish | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"search\" | \"none\" | \"text\" | \"url\" | \"email\" | \"tel\" | \"numeric\" | \"decimal\" | undefined; is?: string | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: Booleanish | undefined; 'aria-autocomplete'?: \"none\" | \"list\" | \"both\" | \"inline\" | undefined; 'aria-busy'?: Booleanish | undefined; 'aria-checked'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"time\" | \"step\" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: Booleanish | undefined; 'aria-dropeffect'?: \"execute\" | \"link\" | \"none\" | \"copy\" | \"move\" | \"popup\" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: Booleanish | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: Booleanish | undefined; 'aria-haspopup'?: boolean | \"grid\" | \"true\" | \"false\" | \"menu\" | \"dialog\" | \"listbox\" | \"tree\" | undefined; 'aria-hidden'?: Booleanish | undefined; 'aria-invalid'?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: \"off\" | \"assertive\" | \"polite\" | undefined; 'aria-modal'?: Booleanish | undefined; 'aria-multiline'?: Booleanish | undefined; 'aria-multiselectable'?: Booleanish | undefined; 'aria-orientation'?: \"horizontal\" | \"vertical\" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-readonly'?: Booleanish | undefined; 'aria-relevant'?: \"text\" | \"all\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; 'aria-required'?: Booleanish | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: Booleanish | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: \"none\" | \"other\" | \"ascending\" | \"descending\" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; 'data-test-subj'?: string | undefined; css?: ", "Interpolation", "<", "Theme", diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index b6cc75d214fb4..b39a5d35540b1 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index ef6a0df4705d9..b0e13874c1b2d 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 37c257816dc1c..6cd20526b61af 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index d8b7f592dd66e..58ab596206bb8 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 983b0821338a8..5d03d531f5e4e 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 3ede9b1579acb..df42f01f8175c 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index d198d4eeff485..038258398cf5a 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index d430d6e554c73..68b88ec6f2e99 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index bd6659cbea795..292f35fb2895a 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index b1a74fa08771e..01d372947a819 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 5fcff29ede032..f6adf0f8dd5a3 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 538f1dbf68caa..ea8442a4bd730 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 196860efeec41..a064aad4c6002 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index d32b1836255ac..0c9e86a95d9ae 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 79e841f1696a3..f7e4a4445e58e 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 42f3c3f88a737..d76c33c121667 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index af2bd964dbb92..fcdb4b9e154fa 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index ebd5cb22e8b90..4d188e1af276f 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index c060b20304585..3891c93146e08 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 057c91dfb0820..c19ec032fc1e2 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index c0d163e80be7e..b9865907cf9cf 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 39a68adbf201c..7f0bdcc780338 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 6032753f83409..65a249e219ba8 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index e90b1ffb0163f..00ed75a24caad 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index a15e90cf94ed2..6d55bbfd83848 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 4686b8860f1a1..1e0c99affa251 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 7d93337998030..b86e17f4f1540 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 353935a7138f7..8926aebc6e3bf 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 2880d7f532d1c..bc0a5d326a3d6 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index e37ac5e85ca51..f93bf8f51822e 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index b08332500305d..51c205d192a0e 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 971df6c394d35..151b507300bfa 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index cf95be5b8e748..8bf8f27f4da19 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 357cabefecb05..0d131f580cd67 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 616ef9a6fb741..e70f970fe0795 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index e150967c0fbec..f078badc7e833 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index f7333cb9cb4aa..4b7e5d5c06ad3 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 92451ead357e9..a3b3fb63d0911 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 61ac96b58fc7f..001cb1e06c140 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index be94af9c7926b..fff7ae6a994ee 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 62593e23fc62f..82c652ce2a9fb 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 6c91d5e767706..40473f8a61274 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 34bdbc366d99b..ba9d623e17738 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 8f5e24df8eeeb..8488e1d36d6b2 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index a68e5096e089b..73101f9e7c8a1 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 8c88ae9a85783..d9f54a1a5f8c1 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index a26130276b845..65a7d82579030 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 1798c73b99679..6e19252494a5e 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index d8e398963f5e8..535c84e59cf8c 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 2434e4250432a..40ce04132477a 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 94678cfb37015..3b5695680c145 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index a599011160e01..7eaeb4c56bb2a 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 5795f65f903ff..017d1a77ff354 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index d7ff6b1db8dfb..bfd2b767b8d90 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 46c23ca5fa3af..c2cb00fea7202 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 4d58cfd04e89c..536bac1b89442 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.devdocs.json b/api_docs/visualizations.devdocs.json index 3a073de7ef447..379c615ab090c 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -6952,7 +6952,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; parentApi: (", + "; setDisabledActionIds: (ids: string[] | undefined) => void; parentApi: (", { "pluginId": "@kbn/presentation-containers", "scope": "public", @@ -6976,7 +6976,7 @@ "section": "def-public.PublishesViewMode", "text": "PublishesViewMode" }, - ">) | undefined; canLinkToLibrary: (() => Promise) | undefined; canUnlinkFromLibrary: (() => Promise) | undefined; timeRange$: ", + ">) | undefined; disableTriggers: boolean; canLinkToLibrary: (() => Promise) | undefined; canUnlinkFromLibrary: (() => Promise) | undefined; timeRange$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -7000,7 +7000,7 @@ "section": "def-common.TimeRange", "text": "TimeRange" }, - " | undefined) => void; isCompatibleWithUnifiedSearch: (() => boolean) | undefined; linkToLibrary: (() => Promise) | undefined; unlinkFromLibrary: (() => Promise) | undefined; disableTriggers: boolean; savedObjectId: ", + " | undefined) => void; isCompatibleWithUnifiedSearch: (() => boolean) | undefined; linkToLibrary: (() => Promise) | undefined; unlinkFromLibrary: (() => Promise) | undefined; savedObjectId: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -7096,7 +7096,7 @@ "section": "def-public.PhaseEvent", "text": "PhaseEvent" }, - " | undefined>; setPanelTitle: (newTitle: string | undefined) => void; isEditingEnabled: () => boolean; setHidePanelTitle: (hide: boolean | undefined) => void; getTypeDisplayName: () => string; setPanelDescription: (newTitle: string | undefined) => void; render: (domNode: HTMLElement) => Promise; reload: () => Promise; getPersistableInput: () => ", + " | undefined>; setPanelTitle: (newTitle: string | undefined) => void; isEditingEnabled: () => boolean; setHidePanelTitle: (hide: boolean | undefined) => void; getTypeDisplayName: () => string; setPanelDescription: (newTitle: string | undefined) => void; render: (domNode: HTMLElement) => Promise; getEditHref: () => Promise; reload: () => Promise; updateInput: (changes: Partial<", { "pluginId": "visualizations", "scope": "public", @@ -7104,7 +7104,59 @@ "section": "def-public.VisualizeInput", "text": "VisualizeInput" }, - "; readonly isContainer: boolean; getExplicitInputIsEqual: (lastExplicitInput: Partial<", + ">) => void; getInput$: () => Readonly<", + "Observable", + "<", + { + "pluginId": "visualizations", + "scope": "public", + "docId": "kibVisualizationsPluginApi", + "section": "def-public.VisualizeInput", + "text": "VisualizeInput" + }, + ">>; reportsEmbeddableLoad: () => boolean; getVis: () => ", + { + "pluginId": "visualizations", + "scope": "public", + "docId": "kibVisualizationsPluginApi", + "section": "def-public.Vis", + "text": "Vis" + }, + "<", + { + "pluginId": "visualizations", + "scope": "common", + "docId": "kibVisualizationsPluginApi", + "section": "def-common.VisParams", + "text": "VisParams" + }, + ">; getInspectorAdapters: () => ", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Adapters", + "text": "Adapters" + }, + " | undefined; openInspector: () => ", + { + "pluginId": "@kbn/core-mount-utils-browser", + "scope": "public", + "docId": "kibKbnCoreMountUtilsBrowserPluginApi", + "section": "def-public.OverlayRef", + "text": "OverlayRef" + }, + " | undefined; transferCustomizationsToUiState: () => void; hasInspector: () => boolean; onContainerLoading: () => void; onContainerData: () => void; onContainerRender: () => void; onContainerError: (error: ", + { + "pluginId": "expressions", + "scope": "public", + "docId": "kibExpressionsPluginApi", + "section": "def-public.ExpressionRenderError", + "text": "ExpressionRenderError" + }, + ") => void; supportedTriggers: () => string[]; getExpressionVariables$: () => ", + "Observable", + " | undefined>; getExpressionVariables: () => Record | undefined; inputIsRefType: (input: ", { "pluginId": "visualizations", "scope": "public", @@ -7112,7 +7164,13 @@ "section": "def-public.VisualizeInput", "text": "VisualizeInput" }, - ">) => Promise; readonly runtimeId: number; readonly deferEmbeddableLoad: boolean; catchError?: ((error: ", + ") => input is ", + "VisualizeByReferenceInput", + "; getInputAsValueType: () => Promise<", + "VisualizeByValueInput", + ">; getInputAsRefType: () => Promise<", + "VisualizeByReferenceInput", + ">; readonly runtimeId: number; readonly isContainer: boolean; readonly deferEmbeddableLoad: boolean; catchError?: ((error: ", { "pluginId": "expressions", "scope": "common", @@ -7120,7 +7178,7 @@ "section": "def-common.ErrorLike", "text": "ErrorLike" }, - ", domNode: HTMLElement | Element) => any) | undefined; fatalError?: Error | undefined; getEditHref: () => Promise; getAppContext: () => ", + ", domNode: HTMLElement | Element) => any) | undefined; fatalError?: Error | undefined; getAppContext: () => ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -7128,7 +7186,7 @@ "section": "def-public.EmbeddableAppContext", "text": "EmbeddableAppContext" }, - " | undefined; reportsEmbeddableLoad: () => boolean; refreshInputFromParent: () => void; getIsContainer: () => this is ", + " | undefined; refreshInputFromParent: () => void; getIsContainer: () => this is ", { "pluginId": "embeddable", "scope": "public", @@ -7164,9 +7222,13 @@ }, " | ", "VisualizeOutput", - ">>; getInput$: () => Readonly<", + ">>; getOutput$: () => Readonly<", "Observable", "<", + "VisualizeOutput", + ">>; getOutput: () => Readonly<", + "VisualizeOutput", + ">; getExplicitInputIsEqual: (lastExplicitInput: Partial<", { "pluginId": "visualizations", "scope": "public", @@ -7174,13 +7236,15 @@ "section": "def-public.VisualizeInput", "text": "VisualizeInput" }, - ">>; getOutput$: () => Readonly<", - "Observable", - "<", - "VisualizeOutput", - ">>; getOutput: () => Readonly<", - "VisualizeOutput", - ">; getInput: () => Readonly<", + ">) => Promise; getPersistableInput: () => ", + { + "pluginId": "visualizations", + "scope": "public", + "docId": "kibVisualizationsPluginApi", + "section": "def-public.VisualizeInput", + "text": "VisualizeInput" + }, + "; getInput: () => Readonly<", { "pluginId": "visualizations", "scope": "public", @@ -7236,73 +7300,9 @@ "section": "def-public.ContainerOutput", "text": "ContainerOutput" }, - ">; updateInput: (changes: Partial<", - { - "pluginId": "visualizations", - "scope": "public", - "docId": "kibVisualizationsPluginApi", - "section": "def-public.VisualizeInput", - "text": "VisualizeInput" - }, - ">) => void; getInspectorAdapters: () => ", - { - "pluginId": "inspector", - "scope": "common", - "docId": "kibInspectorPluginApi", - "section": "def-common.Adapters", - "text": "Adapters" - }, - " | undefined; untilInitializationFinished: () => Promise; updateOutput: (outputChanges: Partial<", + ">; untilInitializationFinished: () => Promise; updateOutput: (outputChanges: Partial<", "VisualizeOutput", - ">) => void; supportedTriggers: () => string[]; getVis: () => ", - { - "pluginId": "visualizations", - "scope": "public", - "docId": "kibVisualizationsPluginApi", - "section": "def-public.Vis", - "text": "Vis" - }, - "<", - { - "pluginId": "visualizations", - "scope": "common", - "docId": "kibVisualizationsPluginApi", - "section": "def-common.VisParams", - "text": "VisParams" - }, - ">; openInspector: () => ", - { - "pluginId": "@kbn/core-mount-utils-browser", - "scope": "public", - "docId": "kibKbnCoreMountUtilsBrowserPluginApi", - "section": "def-public.OverlayRef", - "text": "OverlayRef" - }, - " | undefined; transferCustomizationsToUiState: () => void; hasInspector: () => boolean; onContainerLoading: () => void; onContainerData: () => void; onContainerRender: () => void; onContainerError: (error: ", - { - "pluginId": "expressions", - "scope": "public", - "docId": "kibExpressionsPluginApi", - "section": "def-public.ExpressionRenderError", - "text": "ExpressionRenderError" - }, - ") => void; getExpressionVariables$: () => ", - "Observable", - " | undefined>; getExpressionVariables: () => Record | undefined; inputIsRefType: (input: ", - { - "pluginId": "visualizations", - "scope": "public", - "docId": "kibVisualizationsPluginApi", - "section": "def-public.VisualizeInput", - "text": "VisualizeInput" - }, - ") => input is ", - "VisualizeByReferenceInput", - "; getInputAsValueType: () => Promise<", - "VisualizeByValueInput", - ">; getInputAsRefType: () => Promise<", - "VisualizeByReferenceInput", - ">; }" + ">) => void; }" ], "path": "src/plugins/visualizations/public/index.ts", "deprecated": false, diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 70b1b606e149a..fb7084188e519 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-09-10 +date: 2024-09-11 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From e3d48e3429db01f0b81cefbae25eb46744cd6e1a Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Wed, 11 Sep 2024 07:34:12 +0200 Subject: [PATCH 08/52] [Inline editor] correct the icon alignment, tooltip design and font size for the button (#192457) ## Summary Aligns the technical preview badge with the Create visualization title and reduce the Edit in Lens link text size to xs. (extracted from https://github.com/elastic/kibana/issues/192073) Before: Screenshot 2024-09-10 at 12 52 16 Screenshot 2024-09-10 at 13 09 25 After: Screenshot 2024-09-10 at 12 59 33 Screenshot 2024-09-10 at 13 09 14 --- .../shared/edit_on_the_fly/flyout_wrapper.tsx | 73 +++++++++++-------- .../translations/translations/fr-FR.json | 3 +- .../translations/translations/ja-JP.json | 3 +- .../translations/translations/zh-CN.json | 3 +- 4 files changed, 47 insertions(+), 35 deletions(-) diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/flyout_wrapper.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/flyout_wrapper.tsx index 3c013cdc95998..2e8ff8390673f 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/flyout_wrapper.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/flyout_wrapper.tsx @@ -18,6 +18,7 @@ import { EuiButton, EuiLink, EuiBetaBadge, + EuiText, } from '@elastic/eui'; import { euiThemeVars } from '@kbn/ui-theme'; import { css } from '@emotion/react'; @@ -52,40 +53,54 @@ export const FlyoutWrapper = ({

- {isNewPanel - ? i18n.translate('xpack.lens.config.createVisualizationLabel', { - defaultMessage: 'Create {lang} visualization', - values: { lang: language }, - }) - : i18n.translate('xpack.lens.config.editVisualizationLabel', { - defaultMessage: 'Edit {lang} visualization', - values: { lang: language }, - })} - - - + + + {isNewPanel + ? i18n.translate('xpack.lens.config.createVisualizationLabel', { + defaultMessage: 'Create {lang} visualization', + values: { lang: language }, + }) + : i18n.translate('xpack.lens.config.editVisualizationLabel', { + defaultMessage: 'Edit {lang} visualization', + values: { lang: language }, + })} + + + + + + +

{navigateToLensEditor && ( - - {i18n.translate('xpack.lens.config.editLinkLabel', { - defaultMessage: 'Edit in Lens', - })} - + + + {i18n.translate('xpack.lens.config.editLinkLabel', { + defaultMessage: 'Edit in Lens', + })} + + )} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 94c3218ae520b..1a11dc831b665 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -25100,7 +25100,6 @@ "xpack.lens.config.editLabel": "Modifier la configuration", "xpack.lens.config.editLinkLabel": "Modifier dans Lens", "xpack.lens.config.editVisualizationLabel": "Modifier la visualisation {lang}", - "xpack.lens.config.experimentalLabelDataview": "Version d'évaluation technique, l'édition en ligne propose actuellement des options de configuration limitées", "xpack.lens.config.visualizationConfigurationLabel": "Configuration de la visualisation", "xpack.lens.configPanel.addLayerButton": "Ajouter un calque", "xpack.lens.configPanel.loadFromLibrary": "Charger depuis la bibliothèque", @@ -47949,4 +47948,4 @@ "xpack.watcher.watchEdit.thresholdWatchExpression.aggType.fieldIsRequiredValidationMessage": "Ce champ est requis.", "xpack.watcher.watcherDescription": "Détectez les modifications survenant dans vos données en créant, gérant et monitorant des alertes." } -} +} \ No newline at end of file diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 45c1da388c176..8b9ea39876c83 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -25089,7 +25089,6 @@ "xpack.lens.config.editLabel": "構成の編集", "xpack.lens.config.editLinkLabel": "Lensで編集", "xpack.lens.config.editVisualizationLabel": "{lang}ビジュアライゼーションを編集", - "xpack.lens.config.experimentalLabelDataview": "テクニカルプレビュー。現在、インライン編集では、構成オプションは限られています。", "xpack.lens.config.visualizationConfigurationLabel": "ビジュアライゼーション構成", "xpack.lens.configPanel.addLayerButton": "レイヤーを追加", "xpack.lens.configPanel.loadFromLibrary": "ライブラリから読み込み", @@ -47932,4 +47931,4 @@ "xpack.watcher.watchEdit.thresholdWatchExpression.aggType.fieldIsRequiredValidationMessage": "フィールドを選択してください。", "xpack.watcher.watcherDescription": "アラートの作成、管理、監視によりデータへの変更を検知します。" } -} +} \ No newline at end of file diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 55aa6ce129ae8..7186bd6c5b6d9 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -25120,7 +25120,6 @@ "xpack.lens.config.editLabel": "编辑配置", "xpack.lens.config.editLinkLabel": "在 Lens 中编辑", "xpack.lens.config.editVisualizationLabel": "编辑 {lang} 可视化", - "xpack.lens.config.experimentalLabelDataview": "技术预览,内联编辑当前提供的配置选项数量有限", "xpack.lens.config.visualizationConfigurationLabel": "可视化配置", "xpack.lens.configPanel.addLayerButton": "添加图层", "xpack.lens.configPanel.loadFromLibrary": "从库中加载", @@ -47983,4 +47982,4 @@ "xpack.watcher.watchEdit.thresholdWatchExpression.aggType.fieldIsRequiredValidationMessage": "此字段必填。", "xpack.watcher.watcherDescription": "通过创建、管理和监测警报来检测数据中的更改。" } -} +} \ No newline at end of file From 865c3b759effc67f5b18885d748b393a42de81c8 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Wed, 11 Sep 2024 08:11:15 +0200 Subject: [PATCH 09/52] fix failing unit test (#192488) ## Summary This test (https://github.com/elastic/kibana/pull/180931) was introduced right before the version bump of user-events (https://github.com/elastic/kibana/pull/189949). This PR updates the one async call to be awaited, hopefully fixing the test. Solves: https://github.com/elastic/kibana/issues/192475 Unskipped tests are passing now: https://buildkite.com/elastic/kibana-pull-request/builds/233177 --------- Co-authored-by: Antonio --- .../components/connectors/thehive/case_fields.test.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/cases/public/components/connectors/thehive/case_fields.test.tsx b/x-pack/plugins/cases/public/components/connectors/thehive/case_fields.test.tsx index 2b3ce432365ed..c4234412a3579 100644 --- a/x-pack/plugins/cases/public/components/connectors/thehive/case_fields.test.tsx +++ b/x-pack/plugins/cases/public/components/connectors/thehive/case_fields.test.tsx @@ -15,8 +15,7 @@ import type { AppMockRenderer } from '../../../common/mock'; import { createAppMockRenderer } from '../../../common/mock'; import { TheHiveTLP } from './types'; -// Failing: See https://github.com/elastic/kibana/issues/192475 -describe.skip('TheHive Cases Fields', () => { +describe('TheHive Cases Fields', () => { const fields = { TLP: 1, }; @@ -45,7 +44,7 @@ describe.skip('TheHive Cases Fields', () => { ); - userEvent.selectOptions(screen.getByTestId('tlp-field'), '4'); + await userEvent.selectOptions(await screen.findByTestId('tlp-field'), '4'); expect(await screen.findByTestId('tlp-field')).toHaveValue(TheHiveTLP.RED.toString()); }); }); From aaa25c7073a3dc794c92036df87a808c50c6aea6 Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Wed, 11 Sep 2024 09:39:09 +0200 Subject: [PATCH 10/52] [EDR Workflows] Add IS operator under Windows Signature in Blocklist view (#190515) ![Screenshot 2024-08-22 at 10 45 14](https://github.com/user-attachments/assets/b9667780-6630-43e5-878b-1bcb82147ecf) This PR adds `IS` choice to existing `IS ONE OF` option for Blocklist's Windows Signature field. This field is supposed to be selectable only for Windows, Signature field. In every other case it should remain a readonly field of `IS ONE OF`. https://github.com/user-attachments/assets/7e547cc0-6d3b-4747-a049-1511467fda9a --- .../cypress/e2e/artifacts/blocklist.cy.ts | 261 ++++++++++++++++++ .../management/cypress/tasks/artifacts.ts | 129 ++++++++- .../pages/blocklist/translations.ts | 7 + .../view/components/blocklist_form.test.tsx | 98 ++++++- .../view/components/blocklist_form.tsx | 218 ++++++++++++--- .../validators/blocklist_validator.ts | 23 +- .../trial_license_complete_tier/blocklists.ts | 52 ++++ 7 files changed, 730 insertions(+), 58 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/blocklist.cy.ts diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/blocklist.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/blocklist.cy.ts new file mode 100644 index 0000000000000..32dad9b0bbc0d --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/blocklist.cy.ts @@ -0,0 +1,261 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ENDPOINT_ARTIFACT_LISTS } from '@kbn/securitysolution-list-constants'; +import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/endpoint/data_loaders/index_fleet_endpoint_policy'; +import { login } from '../../tasks/login'; +import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../tasks/fleet'; +import { + blocklistFormSelectors, + createArtifactList, + createPerPolicyArtifact, + removeExceptionsList, +} from '../../tasks/artifacts'; + +const { + deleteBlocklistItem, + validateSuccessPopup, + submitBlocklist, + selectOperator, + validateRenderedCondition, + fillOutBlocklistFlyout, + setSingleValue, + setMultiValue, + openBlocklist, + selectPathField, + selectSignatureField, + expectSingleOperator, + expectMultiOperator, + validateSingleValue, + validateMultiValue, + selectHashField, + selectOs, + expectSubmitButtonToBe, + clearMultiValueInput, +} = blocklistFormSelectors; + +describe( + 'Blocklist', + { + tags: ['@ess', '@serverless', '@skipInServerlessMKI'], // @skipInServerlessMKI until kibana is rebuilt after merge + }, + () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; + + before(() => { + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + }); + }); + }); + + beforeEach(() => { + login(); + }); + + after(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); + + const createArtifactBodyRequest = (type: 'match' | 'match_any') => { + return { + list_id: ENDPOINT_ARTIFACT_LISTS.blocklists.id, + entries: [ + { + entries: [ + { + field: 'subject_name', + value: type === 'match' ? 'Elastic, Inc.' : ['Elastic', 'Inc.'], + type, + operator: 'included', + }, + ], + field: 'file.Ext.code_signature', + type: 'nested', + }, + ], + os_types: ['windows'], + }; + }; + + describe('Renders blocklist fields', () => { + it('Correctly renders all blocklist fields for different OSs', () => { + openBlocklist({ create: true }); + + selectOs('windows'); + + selectPathField(); + expectSingleOperator('Path'); + selectSignatureField(); + expectMultiOperator('Signature'); + selectHashField(); + expectSingleOperator('Hash'); + + selectOs('linux'); + + selectPathField(false); + expectSingleOperator('Path'); + selectHashField(); + expectSingleOperator('Hash'); + + selectOs('macos'); + + selectPathField(); + expectSingleOperator('Path'); + selectHashField(); + expectSingleOperator('Hash'); + }); + + it('Correctly modifies value format based on field selection', () => { + openBlocklist({ create: true }); + // Start with default is one of operator + selectSignatureField(); + expectMultiOperator('Signature', 'is one of'); + setMultiValue(); + validateMultiValue(); + // Switch to is operator + selectOperator('is'); + expectMultiOperator('Signature', 'is'); + validateSingleValue(); + // Switch to different Field to reset value to multi value again + selectPathField(); + expectSingleOperator('Path'); + validateMultiValue(); + }); + + it('Correctly validates value input', () => { + openBlocklist({ create: true }); + fillOutBlocklistFlyout(); + selectSignatureField(); + + expectSubmitButtonToBe('disabled'); + + selectOperator('is'); + selectOperator('is'); + validateSingleValue(''); + expectSubmitButtonToBe('disabled'); + + selectOperator('is one of'); + selectOperator('is one of'); + validateMultiValue({ empty: true }); + + selectOperator('is'); + selectOperator('is'); + validateSingleValue(''); + expectSubmitButtonToBe('disabled'); + + setSingleValue(); + validateSingleValue(); + expectSubmitButtonToBe('enabled'); + + selectOperator('is one of'); + validateMultiValue(); + expectSubmitButtonToBe('enabled'); + + selectOperator('is one of'); + validateMultiValue(); + expectSubmitButtonToBe('enabled'); + + clearMultiValueInput(); + expectSubmitButtonToBe('disabled'); + + selectOperator('is'); + validateSingleValue(''); + expectSubmitButtonToBe('disabled'); + }); + }); + + describe('Handles CRUD with operator field', () => { + const IS_EXPECTED_CONDITION = /AND\s*file.Ext.code_signature\s*IS\s*Elastic,\s*Inc./; + const IS_ONE_OF_EXPECTED_CONDITION = + /AND\s*file.Ext.code_signature\s*is\s*one\s*of\s*Elastic\s*Inc./; + + afterEach(() => { + removeExceptionsList(ENDPOINT_ARTIFACT_LISTS.blocklists.id); + }); + + it('Create a blocklist item with single operator', () => { + openBlocklist({ create: true }); + fillOutBlocklistFlyout(); + selectSignatureField(); + selectOperator('is'); + setSingleValue(); + submitBlocklist(); + validateSuccessPopup('create'); + validateRenderedCondition(IS_EXPECTED_CONDITION); + }); + + it('Create a blocklist item with multi operator', () => { + openBlocklist({ create: true }); + fillOutBlocklistFlyout(); + selectSignatureField(); + selectOperator('is one of'); + setMultiValue(); + submitBlocklist(); + validateSuccessPopup('create'); + validateRenderedCondition(IS_ONE_OF_EXPECTED_CONDITION); + }); + + describe('Updates and deletes blocklist match_any item', () => { + let itemId: string; + + beforeEach(() => { + createArtifactList(ENDPOINT_ARTIFACT_LISTS.blocklists.id); + createPerPolicyArtifact('Test Blocklist', createArtifactBodyRequest('match_any')).then( + (response) => { + itemId = response.body.item_id; + } + ); + }); + + it('Updates a match_any blocklist item', () => { + openBlocklist({ itemId }); + selectOperator('is'); + submitBlocklist(); + validateSuccessPopup('update'); + validateRenderedCondition(IS_EXPECTED_CONDITION); + }); + + it('Deletes a blocklist item', () => { + openBlocklist(); + deleteBlocklistItem(); + validateSuccessPopup('delete'); + }); + }); + + describe('Updates and deletes blocklist match item', () => { + let itemId: string; + + beforeEach(() => { + createArtifactList(ENDPOINT_ARTIFACT_LISTS.blocklists.id); + createPerPolicyArtifact('Test Blocklist', createArtifactBodyRequest('match')).then( + (response) => { + itemId = response.body.item_id; + } + ); + }); + + it('Updates a match blocklist item', () => { + openBlocklist({ itemId }); + selectOperator('is one of'); + submitBlocklist(); + validateSuccessPopup('update'); + validateRenderedCondition(IS_ONE_OF_EXPECTED_CONDITION); + }); + + it('Deletes a blocklist item', () => { + openBlocklist(); + deleteBlocklistItem(); + validateSuccessPopup('delete'); + }); + }); + }); + } +); diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/artifacts.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/artifacts.ts index 62b083cf21889..fdffa0bd03381 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/artifacts.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/artifacts.ts @@ -18,7 +18,8 @@ import { EXCEPTION_LIST_ITEM_URL, EXCEPTION_LIST_URL, } from '@kbn/securitysolution-list-constants'; -import { request } from './common'; +import { APP_BLOCKLIST_PATH } from '../../../../common/constants'; +import { loadPage, request } from './common'; export const removeAllArtifacts = () => { for (const listId of ENDPOINT_ARTIFACT_LIST_IDS) { @@ -80,7 +81,7 @@ export const createArtifactList = (listId: string) => { }); }; -export const createPerPolicyArtifact = (name: string, body: object, policyId?: 'all' | string) => { +export const createPerPolicyArtifact = (name: string, body: object, policyId?: 'all' | string) => request({ method: 'POST', url: EXCEPTION_LIST_ITEM_URL, @@ -95,8 +96,8 @@ export const createPerPolicyArtifact = (name: string, body: object, policyId?: ' }).then((response) => { expect(response.status).to.eql(200); expect(response.body.name).to.eql(name); + return response; }); -}; export const yieldFirstPolicyID = (): Cypress.Chainable => request({ @@ -106,3 +107,125 @@ export const yieldFirstPolicyID = (): Cypress.Chainable => expect(body.items.length).to.be.least(1); return body.items[0].id; }); + +export const blocklistFormSelectors = { + expectSingleOperator: (field: 'Path' | 'Signature' | 'Hash') => { + cy.getByTestSubj('blocklist-form-field-select').contains(field); + cy.getByTestSubj('blocklist-form-operator-select-single').should('have.value', 'is one of'); + cy.getByTestSubj('blocklist-form-operator-select-single').should('have.attr', 'readonly'); + cy.getByTestSubj('blocklist-form-operator-select-multi').should('not.exist'); + }, + expectMultiOperator: (field: 'Path' | 'Signature' | 'Hash', type = 'is one of') => { + cy.getByTestSubj('blocklist-form-field-select').contains(field); + cy.getByTestSubj('blocklist-form-operator-select-multi').contains(type); + cy.getByTestSubj('blocklist-form-operator-select-multi').should('not.have.attr', 'readonly'); + cy.getByTestSubj('blocklist-form-operator-select-single').should('not.exist'); + }, + selectPathField: (caseless = true) => { + cy.getByTestSubj('blocklist-form-field-select').click(); + cy.getByTestSubj( + caseless ? 'blocklist-form-file.path.caseless' : 'blocklist-form-file.path' + ).click(); + }, + selectSignatureField: () => { + cy.getByTestSubj('blocklist-form-field-select').click(); + cy.getByTestSubj('blocklist-form-file.Ext.code_signature').click(); + }, + selectOs: (os: 'windows' | 'macos' | 'linux') => { + cy.getByTestSubj('blocklist-form-os-select').click(); + cy.get(`button[role="option"][id="${os}"]`).click(); + }, + selectOperator: (operator: 'is one of' | 'is') => { + const matchOperator = operator === 'is' ? 'match' : 'match_any'; + cy.getByTestSubj('blocklist-form-operator-select-multi').click(); + cy.get(`button[role="option"][id="${matchOperator}"]`).click(); + }, + selectHashField: () => { + cy.getByTestSubj('blocklist-form-field-select').click(); + cy.getByTestSubj('blocklist-form-file.hash.*').click(); + }, + openBlocklist: ({ create, itemId }: { create?: boolean; itemId?: string } = {}) => { + if (!create && !itemId) { + loadPage(APP_BLOCKLIST_PATH); + } else if (create) { + loadPage(`${APP_BLOCKLIST_PATH}?show=create`); + } else if (itemId) { + loadPage(`${APP_BLOCKLIST_PATH}?itemId=${itemId}&show=edit`); + } + }, + fillOutBlocklistFlyout: () => { + cy.getByTestSubj('blocklist-form-name-input').type('Test Blocklist'); + cy.getByTestSubj('blocklist-form-description-input').type('Test Description'); + }, + setMultiValue: () => { + cy.getByTestSubj('blocklist-form-values-input').within(() => { + cy.getByTestSubj('comboBoxSearchInput').type(`Elastic, Inc.{enter}`); + }); + }, + setSingleValue: () => { + cy.getByTestSubj('blocklist-form-value-input').type('Elastic, Inc.'); + }, + validateMultiValue: ({ empty } = { empty: false }) => { + if (!empty) { + cy.getByTestSubj('blocklist-form-values-input').within(() => { + cy.getByTestSubj('comboBoxInput').within(() => { + cy.getByTestSubj('blocklist-form-values-input-Elastic'); + cy.getByTestSubj('blocklist-form-values-input- Inc.'); + }); + }); + } else { + cy.getByTestSubj('blocklist-form-values-input').within(() => { + cy.getByTestSubj('comboBoxInput').children('span').should('not.exist'); + }); + } + }, + validateSingleValue: (value = 'Elastic, Inc.') => { + cy.getByTestSubj('blocklist-form-value-input').should('have.value', value); + }, + submitBlocklist: () => { + cy.getByTestSubj('blocklistPage-flyout-submitButton').click(); + }, + expectSubmitButtonToBe: (state: 'disabled' | 'enabled') => { + cy.getByTestSubj('blocklistPage-flyout-submitButton').should( + state === 'disabled' ? 'be.disabled' : 'not.be.disabled' + ); + }, + clearMultiValueInput: () => { + cy.getByTestSubj('comboBoxClearButton').click(); + }, + validateSuccessPopup: (type: 'create' | 'update' | 'delete') => { + let expectedTitle = ''; + switch (type) { + case 'create': + expectedTitle = '"Test Blocklist" has been added to your blocklist.'; + break; + case 'update': + expectedTitle = '"Test Blocklist" has been updated'; + break; + case 'delete': + expectedTitle = '"Test Blocklist" has been removed from blocklist.'; + break; + } + cy.getByTestSubj('euiToastHeader__title').contains(expectedTitle); + }, + validateRenderedCondition: (expectedCondition: RegExp) => { + cy.getByTestSubj('blocklistPage-card') + .first() + .within(() => { + cy.getByTestSubj('blocklistPage-card-criteriaConditions-condition') + .invoke('text') + // .should('match', /OS\s*IS\s*Windows/); + .should('match', expectedCondition); + }); + }, + deleteBlocklistItem: () => { + cy.getByTestSubj('blocklistPage-card') + .first() + .within(() => { + cy.getByTestSubj('blocklistPage-card-header-actions-button').click(); + }); + + cy.getByTestSubj('blocklistPage-card-cardDeleteAction').click(); + cy.getByTestSubj('blocklistPage-deleteModal-submitButton').click(); + }, +}; diff --git a/x-pack/plugins/security_solution/public/management/pages/blocklist/translations.ts b/x-pack/plugins/security_solution/public/management/pages/blocklist/translations.ts index 60e87de41bf21..03d07a19aa924 100644 --- a/x-pack/plugins/security_solution/public/management/pages/blocklist/translations.ts +++ b/x-pack/plugins/security_solution/public/management/pages/blocklist/translations.ts @@ -69,6 +69,13 @@ export const VALUE_LABEL_HELPER = i18n.translate( } ); +export const SINGLE_VALUE_LABEL_HELPER = i18n.translate( + 'xpack.securitySolution.blocklist.single_value.label.helper', + { + defaultMessage: 'Type or copy & paste a value', + } +); + export const CONDITION_FIELD_TITLE: { [K in BlocklistConditionEntryField]: string } = { 'file.hash.*': i18n.translate('xpack.securitySolution.blocklist.entry.field.hash', { defaultMessage: 'Hash', diff --git a/x-pack/plugins/security_solution/public/management/pages/blocklist/view/components/blocklist_form.test.tsx b/x-pack/plugins/security_solution/public/management/pages/blocklist/view/components/blocklist_form.test.tsx index b119ac81f0a8b..21798594641d8 100644 --- a/x-pack/plugins/security_solution/public/management/pages/blocklist/view/components/blocklist_form.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/blocklist/view/components/blocklist_form.test.tsx @@ -11,7 +11,6 @@ import userEvent, { type UserEvent } from '@testing-library/user-event'; import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; import type { BlocklistConditionEntryField } from '@kbn/securitysolution-utils'; import { OperatingSystem } from '@kbn/securitysolution-utils'; -import { ENDPOINT_BLOCKLISTS_LIST_ID } from '@kbn/securitysolution-list-constants'; import type { BlocklistEntry } from './blocklist_form'; import { BlockListForm } from './blocklist_form'; @@ -25,6 +24,8 @@ import { ERRORS } from '../../translations'; import { licenseService } from '../../../../../common/hooks/use_license'; import type { PolicyData } from '../../../../../../common/endpoint/types'; import { GLOBAL_ARTIFACT_TAG } from '../../../../../../common/endpoint/service/artifacts'; +import { ListOperatorEnum, ListOperatorTypeEnum } from '@kbn/securitysolution-io-ts-list-types'; +import { ENDPOINT_ARTIFACT_LISTS } from '@kbn/securitysolution-list-constants'; jest.mock('../../../../../common/hooks/use_license', () => { const licenseServiceInstance = { @@ -38,6 +39,58 @@ jest.mock('../../../../../common/hooks/use_license', () => { }; }); +const blocklistOperatorFieldTestCases = [ + { + os: OperatingSystem.LINUX, + field: 'file.path', + fieldText: 'Path, ', + osText: 'Linux, ', + isMulti: false, + }, + { + os: OperatingSystem.LINUX, + field: 'file.hash.*', + fieldText: 'Hash, ', + osText: 'Linux, ', + isMulti: false, + }, + { + os: OperatingSystem.WINDOWS, + field: 'file.path.caseless', + fieldText: 'Path, ', + osText: 'Windows, ', + isMulti: false, + }, + { + os: OperatingSystem.WINDOWS, + field: 'file.hash.*', + fieldText: 'Hash, ', + osText: 'Windows, ', + isMulti: false, + }, + { + os: OperatingSystem.WINDOWS, + field: 'file.Ext.code_signature', + fieldText: 'Signature, ', + osText: 'Windows, ', + isMulti: true, + }, + { + os: OperatingSystem.MAC, + field: 'file.path.caseless', + fieldText: 'Path, ', + osText: 'Mac, ', + isMulti: false, + }, + { + os: OperatingSystem.MAC, + field: 'file.hash.*', + fieldText: 'Hash, ', + osText: 'Mac, ', + isMulti: false, + }, +]; + describe('blocklist form', () => { let user: UserEvent; let onChangeSpy: jest.Mock; @@ -47,8 +100,8 @@ describe('blocklist form', () => { function createEntry(field: BlocklistConditionEntryField, value: string[]): BlocklistEntry { return { field, - operator: 'included', - type: 'match_any', + operator: ListOperatorEnum.INCLUDED, + type: ListOperatorTypeEnum.MATCH_ANY, value, }; } @@ -57,7 +110,7 @@ describe('blocklist form', () => { overrides: Partial = {} ): ArtifactFormComponentProps['item'] { const defaults: ArtifactFormComponentProps['item'] = { - list_id: ENDPOINT_BLOCKLISTS_LIST_ID, + list_id: ENDPOINT_ARTIFACT_LISTS.blocklists.id, name: '', description: '', entries: [], @@ -197,6 +250,41 @@ describe('blocklist form', () => { expect(screen.getByTestId('blocklist-form-field-select').textContent).toEqual('Hash, '); }); + describe.each(blocklistOperatorFieldTestCases)( + 'should correctly render operator field for $os OS, $fieldText', + ({ os, field, fieldText, osText, isMulti }) => { + it(`should correctly render operator field for ${os} OS, ${fieldText}`, () => { + const validItem: ArtifactFormComponentProps['item'] = { + list_id: ENDPOINT_ARTIFACT_LISTS.blocklists.id, + name: 'test name', + description: 'test description', + entries: [createEntry(field as BlocklistConditionEntryField, isMulti ? ['hello'] : [])], + os_types: [os], + tags: [GLOBAL_ARTIFACT_TAG], + type: 'simple', + }; + + render(createProps({ item: validItem })); + expect(screen.getByTestId('blocklist-form-os-select').textContent).toEqual(osText); + expect(screen.getByTestId('blocklist-form-field-select').textContent).toEqual(fieldText); + + if (isMulti) { + expect(screen.queryByTestId('blocklist-form-operator-select-single')).toBeNull(); + const element = screen.getByTestId('blocklist-form-operator-select-multi'); + expect(element).toBeTruthy(); + expect(element.textContent).toEqual('is one of, '); + expect(element).not.toHaveAttribute('readonly'); + } else { + expect(screen.queryByTestId('blocklist-form-operator-select-multi')).toBeNull(); + const element = screen.getByTestId('blocklist-form-operator-select-single'); + expect(element).toBeTruthy(); + expect(element).toHaveValue('is one of'); + expect(element).toHaveAttribute('readonly'); + } + }); + } + ); + it('should allow all 3 fields when Windows OS is selected', async () => { render(); expect(screen.getByTestId('blocklist-form-os-select').textContent).toEqual('Windows, '); @@ -444,7 +532,7 @@ describe('blocklist form', () => { it('should be valid if all required inputs complete', async () => { const validItem: ArtifactFormComponentProps['item'] = { - list_id: ENDPOINT_BLOCKLISTS_LIST_ID, + list_id: ENDPOINT_ARTIFACT_LISTS.blocklists.id, name: 'test name', description: 'test description', entries: [ diff --git a/x-pack/plugins/security_solution/public/management/pages/blocklist/view/components/blocklist_form.tsx b/x-pack/plugins/security_solution/public/management/pages/blocklist/view/components/blocklist_form.tsx index ee59fd26714e3..d4640aed42c11 100644 --- a/x-pack/plugins/security_solution/public/management/pages/blocklist/view/components/blocklist_form.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/blocklist/view/components/blocklist_form.tsx @@ -25,9 +25,10 @@ import { } from '@elastic/eui'; import type { BlocklistConditionEntryField } from '@kbn/securitysolution-utils'; import { OperatingSystem, isPathValid } from '@kbn/securitysolution-utils'; -import { isOneOfOperator } from '@kbn/securitysolution-list-utils'; +import { isOneOfOperator, isOperator } from '@kbn/securitysolution-list-utils'; import { uniq } from 'lodash'; +import { ListOperatorEnum, ListOperatorTypeEnum } from '@kbn/securitysolution-io-ts-list-types'; import { OS_TITLES } from '../../../../common/translations'; import type { ArtifactFormComponentProps } from '../../../../components/artifact_list_page'; import { @@ -46,6 +47,7 @@ import { VALUE_LABEL, ERRORS, VALUE_LABEL_HELPER, + SINGLE_VALUE_LABEL_HELPER, } from '../../translations'; import type { EffectedPolicySelection } from '../../../../components/effected_policy_select'; import { EffectedPolicySelect } from '../../../../components/effected_policy_select'; @@ -60,13 +62,22 @@ import { useTestIdGenerator } from '../../../../hooks/use_test_id_generator'; const testIdPrefix = 'blocklist-form'; -export interface BlocklistEntry { +interface BlocklistEntryMatch { field: BlocklistConditionEntryField; - operator: 'included'; - type: 'match_any'; + operator: ListOperatorEnum.INCLUDED; + type: ListOperatorTypeEnum.MATCH; + value: string; +} + +interface BlocklistEntryMatchAny { + field: BlocklistConditionEntryField; + operator: ListOperatorEnum.INCLUDED; + type: ListOperatorTypeEnum.MATCH_ANY; value: string[]; } +export type BlocklistEntry = BlocklistEntryMatch | BlocklistEntryMatchAny; + type ERROR_KEYS = keyof typeof ERRORS; type ItemValidationNodes = { @@ -142,14 +153,19 @@ export const BlockListForm = memo( if (!item.entries.length) { return { field: 'file.hash.*', - operator: 'included', - type: 'match_any', + operator: ListOperatorEnum.INCLUDED, + type: ListOperatorTypeEnum.MATCH_ANY, value: [], }; } return item.entries[0] as BlocklistEntry; }, [item.entries]); + const windowsSignatureField = 'file.Ext.code_signature'; + const isWindowsSignatureEntry = blocklistEntry.field === windowsSignatureField; + const displaySingleValueInput = + isWindowsSignatureEntry && blocklistEntry.type === ListOperatorTypeEnum.MATCH; + const selectedOs = useMemo((): OperatingSystem => { if (!item?.os_types?.length) { return OperatingSystem.WINDOWS; @@ -159,10 +175,19 @@ export const BlockListForm = memo( }, [item?.os_types]); const selectedValues = useMemo(() => { - return blocklistEntry.value.map((label) => ({ - label, - 'data-test-subj': getTestId(`values-input-${label}`), - })); + if (Array.isArray(blocklistEntry.value)) { + return blocklistEntry.value.map((label) => ({ + label, + 'data-test-subj': getTestId(`values-input-${label}`), + })); + } else { + return [ + { + label: blocklistEntry.value, + 'data-test-subj': getTestId(`values-input-${blocklistEntry.value}`), + }, + ]; + } }, [blocklistEntry.value, getTestId]); const osOptions: Array> = useMemo( @@ -202,40 +227,59 @@ export const BlockListForm = memo( if (selectedOs === OperatingSystem.WINDOWS) { selectableFields.push({ - value: 'file.Ext.code_signature', - inputDisplay: CONDITION_FIELD_TITLE['file.Ext.code_signature'], - dropdownDisplay: getDropdownDisplay('file.Ext.code_signature'), - 'data-test-subj': getTestId('file.Ext.code_signature'), + value: windowsSignatureField, + inputDisplay: CONDITION_FIELD_TITLE[windowsSignatureField], + dropdownDisplay: getDropdownDisplay(windowsSignatureField), + 'data-test-subj': getTestId(windowsSignatureField), }); } return selectableFields; }, [selectedOs, getTestId]); + const operatorOptions: Array> = useMemo(() => { + return [ + { + value: isOneOfOperator.type, + inputDisplay: isOneOfOperator.message, + dropdownDisplay: isOneOfOperator.message, + }, + { + value: isOperator.type, + inputDisplay: isOperator.message, + dropdownDisplay: isOperator.message, + }, + ]; + }, []); + const valueLabel = useMemo(() => { return (
- + <> {VALUE_LABEL}
); - }, []); + }, [displaySingleValueInput]); const validateValues = useCallback((nextItem: ArtifactFormComponentProps['item']) => { const os = ((nextItem.os_types ?? [])[0] as OperatingSystem) ?? OperatingSystem.WINDOWS; const { field = 'file.hash.*', - type = 'match_any', - value: values = [], + type = ListOperatorTypeEnum.MATCH_ANY, + value = [], } = (nextItem.entries[0] ?? {}) as BlocklistEntry; + // value can be a string when isOperator is selected + const values = Array.isArray(value) ? value : [value].filter(Boolean); + const newValueWarnings: ItemValidationNodes = {}; const newNameErrors: ItemValidationNodes = {}; const newValueErrors: ItemValidationNodes = {}; - // error if name empty if (!nextItem.name.trim()) { newNameErrors.NAME_REQUIRED = createValidationMessage(ERRORS.NAME_REQUIRED); @@ -247,17 +291,15 @@ export const BlockListForm = memo( } // error if invalid hash - if (field === 'file.hash.*' && values.some((value) => !isValidHash(value))) { + if (field === 'file.hash.*' && values.some((v) => !isValidHash(v))) { newValueErrors.INVALID_HASH = createValidationMessage(ERRORS.INVALID_HASH); } - const isInvalidPath = values.some((value) => !isPathValid({ os, field, type, value })); - + const isInvalidPath = values.some((v) => !isPathValid({ os, field, type, value: v })); // warn if invalid path if (field !== 'file.hash.*' && isInvalidPath) { newValueWarnings.INVALID_PATH = createValidationMessage(ERRORS.INVALID_PATH); } - // warn if duplicates if (values.length !== uniq(values).length) { newValueWarnings.DUPLICATE_VALUES = createValidationMessage(ERRORS.DUPLICATE_VALUES); @@ -320,12 +362,16 @@ export const BlockListForm = memo( { ...blocklistEntry, field: - os !== OperatingSystem.WINDOWS && blocklistEntry.field === 'file.Ext.code_signature' + os !== OperatingSystem.WINDOWS && isWindowsSignatureEntry ? 'file.hash.*' : blocklistEntry.field, + type: ListOperatorTypeEnum.MATCH_ANY, + ...(typeof blocklistEntry.value === 'string' + ? { value: blocklistEntry.value.length ? blocklistEntry.value.split(',') : [] } + : {}), }, ], - }; + } as ArtifactFormComponentProps['item']; validateValues(nextItem); onChange({ @@ -334,15 +380,24 @@ export const BlockListForm = memo( }); setHasFormChanged(true); }, - [validateValues, blocklistEntry, onChange, item] + [item, blocklistEntry, isWindowsSignatureEntry, validateValues, onChange] ); const handleOnFieldChange = useCallback( (field: BlocklistConditionEntryField) => { const nextItem = { ...item, - entries: [{ ...blocklistEntry, field }], - }; + entries: [ + { + ...blocklistEntry, + field, + type: ListOperatorTypeEnum.MATCH_ANY, + ...(typeof blocklistEntry.value === 'string' + ? { value: blocklistEntry.value.length ? blocklistEntry.value.split(',') : [] } + : {}), + }, + ], + } as ArtifactFormComponentProps['item']; validateValues(nextItem); onChange({ @@ -354,6 +409,40 @@ export const BlockListForm = memo( [validateValues, onChange, item, blocklistEntry] ); + const generateBlocklistEntryValue = useCallback( + (value: string | string[], newOperator: ListOperatorTypeEnum) => { + if (newOperator === ListOperatorTypeEnum.MATCH) { + return { value: Array.isArray(value) ? value.join(',') : value }; + } else { + return { + value: (typeof value === 'string' ? value.split(',') : value).filter(Boolean), + }; + } + }, + [] + ); + + const handleOperatorUpdate = useCallback( + (newOperator) => { + const nextItem = { + ...item, + entries: [ + { + ...blocklistEntry, + type: newOperator, + ...generateBlocklistEntryValue(blocklistEntry.value, newOperator), + }, + ], + }; + + onChange({ + isValid: isValid(errorsRef.current), + item: nextItem, + }); + }, + [item, blocklistEntry, generateBlocklistEntryValue, onChange] + ); + const handleOnValueTextChange = useCallback( (value: string) => { const nextWarnings = { ...warningsRef.current.value }; @@ -375,6 +464,24 @@ export const BlockListForm = memo( [blocklistEntry] ); + const handleSingleValueUpdate = useCallback( + (event: React.ChangeEvent) => { + const nextItem = { + ...item, + entries: [{ ...blocklistEntry, value: event.target.value }], + } as ArtifactFormComponentProps['item']; + + validateValues(nextItem); + + onChange({ + isValid: isValid(errorsRef.current), + item: nextItem, + }); + setHasFormChanged(true); + }, + [item, blocklistEntry, validateValues, onChange] + ); + // only triggered on remove / clear const handleOnValueChange = useCallback( (change: Array>) => { @@ -382,7 +489,7 @@ export const BlockListForm = memo( const nextItem = { ...item, entries: [{ ...blocklistEntry, value }], - }; + } as ArtifactFormComponentProps['item']; validateValues(nextItem); onChange({ @@ -404,13 +511,13 @@ export const BlockListForm = memo( entries: [{ ...blocklistEntry, value }], }; - validateValues(nextItem); + validateValues(nextItem as ArtifactFormComponentProps['item']); nextItem.entries[0].value = uniq(nextItem.entries[0].value); setVisited((prevVisited) => ({ ...prevVisited, value: true })); onChange({ isValid: isValid(errorsRef.current), - item: nextItem, + item: nextItem as ArtifactFormComponentProps['item'], }); setHasFormChanged(true); }, @@ -516,7 +623,23 @@ export const BlockListForm = memo( - + {isWindowsSignatureEntry ? ( + + ) : ( + + )} @@ -529,16 +652,27 @@ export const BlockListForm = memo( error={Object.values(errorsRef.current.value)} fullWidth > - + {displaySingleValueInput ? ( + + ) : ( + + )} {showAssignmentSection && ( diff --git a/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts b/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts index 3841c6f0e9b67..d5c66dc2c8e6e 100644 --- a/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts +++ b/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts @@ -6,7 +6,6 @@ */ import { cloneDeep, uniq } from 'lodash'; -import { ENDPOINT_BLOCKLISTS_LIST_ID } from '@kbn/securitysolution-list-constants'; import type { Type, TypeOf } from '@kbn/config-schema'; import { schema } from '@kbn/config-schema'; import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; @@ -15,6 +14,7 @@ import type { CreateExceptionListItemOptions, UpdateExceptionListItemOptions, } from '@kbn/lists-plugin/server'; +import { ENDPOINT_ARTIFACT_LISTS } from '@kbn/securitysolution-list-constants'; import { BaseValidator } from './base_validator'; import type { ExceptionItemLikeOptions } from '../types'; import { isValidHash } from '../../../../common/endpoint/service/artifacts/validations'; @@ -44,9 +44,9 @@ type ConditionEntryFieldAllowedType = type BlocklistConditionEntry = | { field: ConditionEntryFieldAllowedType; - type: 'match_any'; + type: 'match_any' | 'match'; operator: 'included'; - value: string[]; + value: string[] | string; } | TypeOf; @@ -97,8 +97,13 @@ const WindowsSignerEntrySchema = schema.object({ entries: schema.arrayOf( schema.object({ field: schema.literal('subject_name'), - value: schema.arrayOf(schema.string({ minLength: 1 })), - type: schema.literal('match_any'), + value: schema.conditional( + schema.siblingRef('type'), + schema.literal('match'), + schema.string({ minLength: 1 }), + schema.arrayOf(schema.string({ minLength: 1 })) + ), + type: schema.oneOf([schema.literal('match'), schema.literal('match_any')]), operator: schema.literal('included'), }), { minSize: 1 } @@ -214,7 +219,7 @@ function removeDuplicateEntryValues(entries: BlocklistConditionEntry[]): Blockli export class BlocklistValidator extends BaseValidator { static isBlocklist(item: { listId: string }): boolean { - return item.listId === ENDPOINT_BLOCKLISTS_LIST_ID; + return item.listId === ENDPOINT_ARTIFACT_LISTS.blocklists.id; } protected async validateHasWritePrivilege(): Promise { @@ -230,7 +235,9 @@ export class BlocklistValidator extends BaseValidator { ): Promise { await this.validateHasWritePrivilege(); - item.entries = removeDuplicateEntryValues(item.entries as BlocklistConditionEntry[]); + (item.entries as BlocklistConditionEntry[]) = removeDuplicateEntryValues( + item.entries as BlocklistConditionEntry[] + ); await this.validateBlocklistData(item); await this.validateCanCreateByPolicyArtifacts(item); @@ -271,7 +278,7 @@ export class BlocklistValidator extends BaseValidator { await this.validateHasWritePrivilege(); - _updatedItem.entries = removeDuplicateEntryValues( + (_updatedItem.entries as BlocklistConditionEntry[]) = removeDuplicateEntryValues( _updatedItem.entries as BlocklistConditionEntry[] ); diff --git a/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/artifacts/trial_license_complete_tier/blocklists.ts b/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/artifacts/trial_license_complete_tier/blocklists.ts index 1641f9821c754..1f250f76a2bfc 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/artifacts/trial_license_complete_tier/blocklists.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/artifacts/trial_license_complete_tier/blocklists.ts @@ -213,6 +213,58 @@ export default function ({ getService }: FtrProviderContext) { ); }); + it(`should error on [${blocklistApiCall.method}] if signer is set to match_any and a string is provided`, async () => { + const body = blocklistApiCall.getBody(); + + body.os_types = ['windows']; + body.entries = [ + { + field: 'file.Ext.code_signature', + entries: [ + { + field: 'subject_name', + value: 'foo' as unknown as string[], + type: 'match_any', + operator: 'included', + }, + ], + type: 'nested', + }, + ]; + + await endpointPolicyManagerSupertest[blocklistApiCall.method](blocklistApiCall.path) + .set('kbn-xsrf', 'true') + .send(body) + .expect(400) + .expect(anErrorMessageWith(/^.*(?!file\.Ext\.code_signature)/)); + }); + + it(`should error on [${blocklistApiCall.method}] if signer is set to match and an array is provided`, async () => { + const body = blocklistApiCall.getBody(); + + body.os_types = ['windows']; + body.entries = [ + { + field: 'file.Ext.code_signature', + entries: [ + { + field: 'subject_name', + value: ['foo'] as unknown as string, + type: 'match', + operator: 'included', + }, + ], + type: 'nested', + }, + ]; + + await endpointPolicyManagerSupertest[blocklistApiCall.method](blocklistApiCall.path) + .set('kbn-xsrf', 'true') + .send(body) + .expect(400) + .expect(anErrorMessageWith(/^.*(?!file\.Ext\.code_signature)/)); + }); + it(`should error on [${blocklistApiCall.method}] if signer is set for a non windows os entry item`, async () => { const body = blocklistApiCall.getBody(); From 3956ba0b7e919d9dd434c53dfb89473613ee3797 Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Wed, 11 Sep 2024 10:58:44 +0200 Subject: [PATCH 11/52] [Security Solution] Security offering plugins readme (#191587) --- docs/developer/plugin-list.asciidoc | 9 ++- .../plugins/security_solution_ess/README.md | 77 +++++++++++++++++- .../security_solution_serverless/README.md | 78 +++++++++++++++++++ .../security_solution_serverless/README.mdx | 4 - 4 files changed, 158 insertions(+), 10 deletions(-) create mode 100755 x-pack/plugins/security_solution_serverless/README.md delete mode 100755 x-pack/plugins/security_solution_serverless/README.mdx diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 1f4f516e59167..422625da5d1f3 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -840,12 +840,13 @@ Kibana. |{kib-repo}blob/{branch}/x-pack/plugins/security_solution_ess/README.md[securitySolutionEss] -|This plugin contains the ESS/on-prem deployments (non-serverless) specific logic for Security Solution. +|The security_solution_ess plugin is an internal plugin for Kibana's Security Solution, designed to encapsulate ESS-specific logic. +This plugin is only enabled when the application is built for stateful deployments (ESS or on-prem), keeping the main security_solution plugin clean and agnostic of the offering model. -|{kib-repo}blob/{branch}/x-pack/plugins/security_solution_serverless/README.mdx[securitySolutionServerless] -|This plugin contains configuration and code used to create a Serverless Security project. -It leverages universal configuration and other APIs in the serverless plugin to configure Kibana. +|{kib-repo}blob/{branch}/x-pack/plugins/security_solution_serverless/README.md[securitySolutionServerless] +|The security_solution_serverless plugin is an internal plugin for Kibana's Security Solution, designed to encapsulate serverless-specific logic. +This plugin is only enabled when the application is built for serverless project, keeping the main security_solution plugin clean and agnostic of the offering model. |{kib-repo}blob/{branch}/x-pack/plugins/serverless/README.mdx[serverless] diff --git a/x-pack/plugins/security_solution_ess/README.md b/x-pack/plugins/security_solution_ess/README.md index de7339892f750..ee0dbe2250b9a 100755 --- a/x-pack/plugins/security_solution_ess/README.md +++ b/x-pack/plugins/security_solution_ess/README.md @@ -1,3 +1,76 @@ -# securitySolutionEss +# **Security Solution ESS Plugin** -This plugin contains the ESS/on-prem deployments (non-serverless) specific logic for Security Solution. \ No newline at end of file +## **Table of Contents** +- [Introduction](#introduction) +- [Purpose](#purpose) +- [Architecture](#architecture) +- [Contributing](#contributing) +- [License](#license) + +## **Introduction** +The `security_solution_ess` plugin is an internal plugin for Kibana's Security Solution, designed to encapsulate ESS-specific logic. +This plugin is only enabled when the application is built for stateful deployments (ESS or on-prem), keeping the main `security_solution` plugin clean and agnostic of the offering model. + +> The term ESS used by this plugin is not strictly referring to Cloud deployments, it's used to refer to all stateful deployments (non-serverless), including on-prem instances. + +## **Purpose** +The primary goal of the `security_solution_ess` plugin is to: +- Isolate ess-specific code and configuration from the main `security_solution` plugin. +- Enable seamless integration with the non-serverless environment without affecting the serverless build of the Security Solution. +- Provide a modular approach by encapsulating ess-related functionality, thereby maintaining the codebase's cleanliness and modularity. + +## **Architecture** +The `security_solution_ess` plugin depends on the main `security_solution` plugin, it can import code from it though the use of agnostic packages is preferred, and they interact through the plugin lifecycle contract. +This architecture allows the `security_solution_ess` plugin to: +- Modify the behavior of the main plugin by providing ess-specific content. +- Ensure that the `security_solution` plugin remains offering-agnostic by using APIs for ess-specific behavior only when necessary. + +### **Plugin Interaction** +- **Generic Plugin (`security_solution`)**: Exposes an API in its plugin lifecycle contract for components and configurations that depend on the offering. +- **ESS Plugin (`security_solution_ess`)**: Utilizes the exposed API to inject or modify the application according to ess-specific content and logic. +- **Other Plugins**: Other plugins may also expose contract APIs to configure ess-specific content for Security. + +#### **Example** + +The following example demonstrates how the `security_solution_ess` plugin interacts with the main `security_solution` plugin via a contract API. + +It exposes a setter to the contract API for `usersUrl`, which is an offering-specific value. The `security_solution_ess` plugin uses these APIs to inject the ess-specific URL into the main plugin. + +The `PluginContract` class in the main Security Solution plugin simplifies the usage of contract APIs, storing the values and providing a getter to the application using the Kibana services context. + +___security_solution/public/plugin_contract.ts___ +```typescript +export class PluginContract { + usersUrl: string; + + public getStartContract() { + return { + setUsersUrl: (url: string) => { + this.usersUrl = url; + } + }; + } + + public getStartServices() { + return { + getUsersUrl: () => this.usersUrl; // available via useKibana().services.getUsersUrl() + }; + } +} +``` + +___security_solution_ess/public/plugin.ts___ +```typescript +export class Plugin { + + public start(core: CoreStart, deps: SecuritySolutionEssStartDeps) { + deps.securitySolution.setUsersUrl(deps.application.getUrlForApp('management', { path: 'security/users' })); + } +} +``` + +## **Contributing** +If you're looking to contribute to this plugin, please follow the standard contribution guidelines of the Security Solution plugin. Ensure that all changes are tested in a ESS environment. + +## **License** +This plugin is licensed under the Elastic License. See the [LICENSE](../../../LICENSE.txt) file for more details. diff --git a/x-pack/plugins/security_solution_serverless/README.md b/x-pack/plugins/security_solution_serverless/README.md new file mode 100755 index 0000000000000..27d541dd659da --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/README.md @@ -0,0 +1,78 @@ +# **Security Solution Serverless Plugin** + +## **Table of Contents** +- [Introduction](#introduction) +- [Purpose](#purpose) +- [Architecture](#architecture) +- [Contributing](#contributing) +- [License](#license) + +## **Introduction** +The `security_solution_serverless` plugin is an internal plugin for Kibana's Security Solution, designed to encapsulate serverless-specific logic. +This plugin is only enabled when the application is built for serverless project, keeping the main `security_solution` plugin clean and agnostic of the offering model. + +This plugin contains configuration and code used to create a Serverless Security project. +It leverages universal configuration and other APIs in the [`serverless`](../serverless/README.mdx) plugin to configure Kibana. + +## **Purpose** +The primary goal of the `security_solution_serverless` plugin is to: +- Isolate serverless-specific code and configuration from the main `security_solution` plugin. +- Enable seamless integration with the serverless environment without affecting the non-serverless build of the Security Solution. +- Provide a modular approach by encapsulating serverless-related functionality, thereby maintaining the codebase's cleanliness and modularity. + +## **Architecture** +The `security_solution_serverless` plugin depends on the main `security_solution` plugin, it can import code from it thought the use of agnostic packages is preferred, +and they interact through the plugin lifecycle contract. +This architecture allows the `security_solution_serverless` plugin to: +- Modify the behavior of the main plugin by providing serverless-specific content. +- Ensure that the `security_solution` plugin remains offering-agnostic by using APIs for serverless-specific behavior only when necessary. + +### **Plugin Interaction** +- **Generic Plugin (`security_solution`)**: Exposes an API in its plugin lifecycle contract for components and configurations that depend on the offering. +- **Serverless Plugin (`security_solution_serverless`)**: Utilizes the exposed API to inject or modify the application according to serverless-specific content and logic. +- **Other Plugins**: Other plugins may also expose contract APIs to configure serverless-specific content for Security. + +#### **Example** + +The following example demonstrates how the `security_solution_serverless` plugin interacts with the main `security_solution` plugin via a contract API. + +It exposes a setter to the contract API for `usersUrl`, which is an offering-specific value. The `security_solution_serverless` plugin uses these APIs to inject the serverless-specific URL into the main plugin. + +The `PluginContract` class in the main Security Solution plugin simplifies the usage of contract APIs, storing the values and providing a getter to the application using the Kibana services context. + +___security_solution/public/plugin_contract.ts___ +```typescript +export class PluginContract { + usersUrl: string; + + public getStartContract() { + return { + setUsersUrl: (url: string) => { + this.usersUrl = url; + } + }; + } + + public getStartServices() { + return { + getUsersUrl: () => this.usersUrl; // available via useKibana().services.getUsersUrl() + }; + } +} +``` + +___security_solution_serverless/public/plugin.ts___ +```typescript +export class Plugin { + + public start(core: CoreStart, deps: SecuritySolutionServerlessStartDeps) { + deps.securitySolution.setUsersUrl(deps.cloud.usersAndRolesUrl); + } +} +``` + +## **Contributing** +If you're looking to contribute to this plugin, please follow the standard contribution guidelines of the Security Solution plugin. Ensure that all changes are tested in a serverless environment. + +## **License** +This plugin is licensed under the Elastic License. See the [LICENSE](../../../LICENSE.txt) file for more details. diff --git a/x-pack/plugins/security_solution_serverless/README.mdx b/x-pack/plugins/security_solution_serverless/README.mdx deleted file mode 100755 index a9e20bf8147a4..0000000000000 --- a/x-pack/plugins/security_solution_serverless/README.mdx +++ /dev/null @@ -1,4 +0,0 @@ -# Serverless Security project plugin - -This plugin contains configuration and code used to create a Serverless Security project. -It leverages universal configuration and other APIs in the [`serverless`](../serverless/README.mdx) plugin to configure Kibana. \ No newline at end of file From b78ab4768b3802ebeea4db2f4914f57afa58b414 Mon Sep 17 00:00:00 2001 From: Maxim Palenov Date: Wed, 11 Sep 2024 12:51:10 +0300 Subject: [PATCH 12/52] [Security Solution] Unskip `get_prebuilt_rules_status` test (#192160) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Addresses:** https://github.com/elastic/kibana/issues/190952 and https://github.com/elastic/kibana/issues/190960 ## Summary This PR unskips flaky test in `x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/get_prebuilt_rules_status.ts`. ## Details There are troubles with reproducing the flakiness detected in https://github.com/elastic/kibana/issues/190952 and https://github.com/elastic/kibana/issues/190960. Build logs inspections didn't reveal anything clear. I suspect that some failures happened while prebuilt rules were being deleted by query. Existing logic handles only conflicts `409` error while the other are ignored. This PR adds extra error logging in `retryIfDeleteByQueryConflicts()` used in `deleteAllPrebuiltRuleAssets()`. And unskips `x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/get_prebuilt_rules_status.ts`. This should help in further debugging. ## Flaky test runner - 🟢 (100 runs) https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6864 --- .../get_prebuilt_rules_status.ts | 4 +-- .../utils/retry_delete_by_query_conflicts.ts | 31 ++++++++----------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/get_prebuilt_rules_status.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/get_prebuilt_rules_status.ts index 2697a5eb838c5..3c5806688cd61 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/get_prebuilt_rules_status.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/get_prebuilt_rules_status.ts @@ -30,9 +30,7 @@ export default ({ getService }: FtrProviderContext): void => { const es = getService('es'); const log = getService('log'); - // Failing: See https://github.com/elastic/kibana/issues/190960 - // Failing: See https://github.com/elastic/kibana/issues/190952 - describe.skip('@ess @serverless @skipInServerlessMKI Prebuilt Rules status', () => { + describe('@ess @serverless @skipInServerlessMKI Prebuilt Rules status', () => { describe('get_prebuilt_rules_status', () => { beforeEach(async () => { await deleteAllPrebuiltRuleAssets(es, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry_delete_by_query_conflicts.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry_delete_by_query_conflicts.ts index 1d2cd8b24239c..de7e1afd163c9 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry_delete_by_query_conflicts.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry_delete_by_query_conflicts.ts @@ -18,34 +18,29 @@ const RETRY_DELAY = 200; * Retry an Elasticsearch deleteByQuery operation if it runs into 409 Conflicts, * up to a maximum number of attempts. */ -export async function retryIfDeleteByQueryConflicts( +export async function retryIfDeleteByQueryConflicts( logger: ToolingLog, name: string, operation: () => Promise, retries: number = RETRY_ATTEMPTS, retryDelay: number = RETRY_DELAY ): Promise { - const operationResult = await operation(); - if (!operationResult.failures || operationResult.failures?.length === 0) { - return operationResult; - } + for (let retriesLeft = retries; retriesLeft > 0; retriesLeft--) { + const operationResult = await operation(); - for (const failure of operationResult.failures) { - if (failure.status === 409) { - // if no retries left, throw it - if (retries <= 0) { - logger.error(`${name} conflict, exceeded retries`); - throw new Error(`${name} conflict, exceeded retries`); - } - - // Otherwise, delay a bit before retrying - logger.debug(`${name} conflict, retrying ...`); - await waitBeforeNextRetry(retryDelay); - return await retryIfDeleteByQueryConflicts(logger, name, operation, retries - 1); + if (!operationResult.failures || operationResult.failures?.length === 0) { + logger.info(`${name} finished successfully`); + return operationResult; } + + const failureCause = operationResult.failures.map((failure) => failure.cause).join(', '); + + logger.warning(`Unable to delete by query ${name}. Caused by: "${failureCause}". Retrying ...`); + + await waitBeforeNextRetry(retryDelay); } - return operationResult; + throw new Error(`${name} failed, exceeded retries`); } async function waitBeforeNextRetry(retryDelay: number): Promise { From 9150bfdc95c59c756d745ddcb4c8c189bca290c9 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Wed, 11 Sep 2024 12:58:36 +0300 Subject: [PATCH 13/52] fix: [Index Management > Multiple tabs][SCREEN READER]: Links should not be used to open modals or update local UI (#192480) Closes: https://github.com/elastic/search-team/issues/8218 ## Description Three table views in the Index Management tabs have a first column that are A tags but open a modal dialog on the page right on click. This is potentially confusing because links typically "go somewhere" and buttons "do something". ## What was changed?: 1. The role='button' attribute was set in the mentioned places to address accessibility (a11y) concerns for screen reader users. ## Screens: ### Index Templates: image ### Data Scteams: image ### Component Templates: image --- .../component_templates/component_template_list/table.tsx | 1 + .../data_stream_list/data_stream_table/data_stream_table.tsx | 1 + .../home/template_list/template_table/template_table.tsx | 1 + 3 files changed, 3 insertions(+) diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_list/table.tsx b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_list/table.tsx index 11fc6e7ad08c8..aa79ca41e6b25 100644 --- a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_list/table.tsx +++ b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_list/table.tsx @@ -257,6 +257,7 @@ export const ComponentTable: FunctionComponent = ({ }, () => trackMetric(METRIC_TYPE.CLICK, UIM_COMPONENT_TEMPLATE_DETAILS) )} + role="button" data-test-subj="templateDetailsLink" > {name} diff --git a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx index e7ea6435a98fe..b4dbb663e0859 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx @@ -79,6 +79,7 @@ export const DataStreamTable: React.FunctionComponent = ({ return ( diff --git a/x-pack/plugins/index_management/public/application/sections/home/template_list/template_table/template_table.tsx b/x-pack/plugins/index_management/public/application/sections/home/template_list/template_table/template_table.tsx index 5b5493adca8d2..679aa56194186 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/template_list/template_table/template_table.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/template_list/template_table/template_table.tsx @@ -60,6 +60,7 @@ export const TemplateTable: React.FunctionComponent = ({ {...reactRouterNavigate(history, getTemplateDetailsLink(name), () => uiMetricService.trackMetric(METRIC_TYPE.CLICK, UIM_TEMPLATE_SHOW_DETAILS_CLICK) )} + role="button" data-test-subj="templateDetailsLink" > {name} From 3a747006cf54bbe4ca310b3c3869c3b102cce674 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Wed, 11 Sep 2024 13:46:36 +0300 Subject: [PATCH 14/52] [OneDiscover][UnifiedDocViewer] Add filtering for selected fields (#191930) - Closes https://github.com/elastic/kibana/issues/191536 ## Summary This PR adds "Selected fields only" toggle to UnifiedDocViewer. The selected state will be persisted under `unifiedDocViewer:showOnlySelectedFields` in Local Storage. Screenshot 2024-09-11 at 10 08 26 ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: Davis McPhee Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-discover-utils/index.ts | 2 + .../src/__mocks__/data_view.ts | 6 + packages/kbn-discover-utils/src/types.ts | 12 + .../src/utils/get_visible_columns.test.tsx | 195 ++++++++++++++ .../src/utils/get_visible_columns.ts | 49 ++++ .../kbn-discover-utils/src/utils/index.ts | 1 + packages/kbn-discover-utils/tsconfig.json | 3 +- packages/kbn-discover-utils/types.ts | 1 + .../src/components/data_table.tsx | 8 +- .../components/data_table_columns.test.tsx | 185 +------------ .../src/components/data_table_columns.tsx | 36 --- packages/kbn-unified-data-table/src/types.ts | 13 +- .../src/services/types.ts | 15 +- packages/kbn-unified-doc-viewer/tsconfig.json | 1 - .../esql_datagrid/public/data_grid.tsx | 11 +- .../esql_datagrid/public/row_viewer.tsx | 3 +- .../doc_viewer_flyout/doc_viewer_flyout.tsx | 3 +- .../doc_viewer_table/table.test.tsx | 168 ++++++++++++ .../components/doc_viewer_table/table.tsx | 247 ++++++++++++------ src/plugins/unified_doc_viewer/tsconfig.json | 1 - .../apps/discover/group3/_doc_viewer.ts | 145 ++++++++++ 21 files changed, 759 insertions(+), 346 deletions(-) create mode 100644 packages/kbn-discover-utils/src/utils/get_visible_columns.test.tsx create mode 100644 packages/kbn-discover-utils/src/utils/get_visible_columns.ts create mode 100644 src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.test.tsx diff --git a/packages/kbn-discover-utils/index.ts b/packages/kbn-discover-utils/index.ts index 7119ac31d5baf..fda3fbdd48ad0 100644 --- a/packages/kbn-discover-utils/index.ts +++ b/packages/kbn-discover-utils/index.ts @@ -52,6 +52,8 @@ export { LogLevelCoalescedValue, LogLevelBadge, getFieldValue, + getVisibleColumns, + canPrependTimeFieldColumn, } from './src'; export type { LogsContextService } from './src'; diff --git a/packages/kbn-discover-utils/src/__mocks__/data_view.ts b/packages/kbn-discover-utils/src/__mocks__/data_view.ts index 5034ed9dc008e..daa8835e817c4 100644 --- a/packages/kbn-discover-utils/src/__mocks__/data_view.ts +++ b/packages/kbn-discover-utils/src/__mocks__/data_view.ts @@ -140,3 +140,9 @@ export const dataViewMock = buildDataViewMock({ name: 'the-data-view', fields: shallowMockedFields, }); + +export const dataViewMockWithTimeField = buildDataViewMock({ + name: 'the-data-view', + fields: shallowMockedFields, + timeFieldName: '@timestamp', +}); diff --git a/packages/kbn-discover-utils/src/types.ts b/packages/kbn-discover-utils/src/types.ts index a2afe245308bb..dc720c02dd4ea 100644 --- a/packages/kbn-discover-utils/src/types.ts +++ b/packages/kbn-discover-utils/src/types.ts @@ -8,6 +8,7 @@ */ import type { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { DatatableColumnMeta } from '@kbn/expressions-plugin/common'; export type { IgnoredReason, ShouldShowFieldInTableHandler } from './utils'; @@ -41,6 +42,17 @@ export interface DataTableRecord { isAnchor?: boolean; } +/** + * Custom column types per column name + */ +export type DataTableColumnsMeta = Record< + string, + { + type: DatatableColumnMeta['type']; + esType?: DatatableColumnMeta['esType']; + } +>; + type FormattedHitPair = readonly [ fieldDisplayName: string, formattedValue: string, diff --git a/packages/kbn-discover-utils/src/utils/get_visible_columns.test.tsx b/packages/kbn-discover-utils/src/utils/get_visible_columns.test.tsx new file mode 100644 index 0000000000000..88877209d0528 --- /dev/null +++ b/packages/kbn-discover-utils/src/utils/get_visible_columns.test.tsx @@ -0,0 +1,195 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { DataView } from '@kbn/data-views-plugin/public'; +import type { DatatableColumnType } from '@kbn/expressions-plugin/common'; +import { + dataViewMock as dataViewMockWithoutTimeField, + dataViewMockWithTimeField, +} from '../__mocks__'; +import { getVisibleColumns, canPrependTimeFieldColumn } from './get_visible_columns'; + +describe('getVisibleColumns utils', function () { + describe('getVisibleColumns', () => { + it('returns grid columns without time column when data view has no timestamp field', () => { + const actual = getVisibleColumns( + ['extension', 'message'], + dataViewMockWithoutTimeField, + true + ) as string[]; + expect(actual).toEqual(['extension', 'message']); + }); + + it('returns grid columns without time column when showTimeCol is falsy', () => { + const actual = getVisibleColumns( + ['extension', 'message'], + dataViewMockWithTimeField, + false + ) as string[]; + expect(actual).toEqual(['extension', 'message']); + }); + + it('returns grid columns with time column when data view has timestamp field', () => { + const actual = getVisibleColumns( + ['extension', 'message'], + dataViewMockWithTimeField, + true + ) as string[]; + expect(actual).toEqual(['@timestamp', 'extension', 'message']); + }); + }); + + describe('canPrependTimeFieldColumn', () => { + function buildColumnTypes(dataView: DataView) { + const columnsMeta: Record< + string, + { type: DatatableColumnType; esType?: string | undefined } + > = {}; + for (const field of dataView.fields) { + columnsMeta[field.name] = { type: field.type as DatatableColumnType }; + } + return columnsMeta; + } + + describe('dataView with timeField', () => { + it('should forward showTimeCol if no _source columns is passed', () => { + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['extension', 'message'], + dataViewMockWithTimeField.timeFieldName, + buildColumnTypes(dataViewMockWithTimeField), + showTimeCol, + false + ) + ).toBe(showTimeCol); + } + }); + + it('should return false if no _source columns is passed, text-based datasource', () => { + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['extension', 'message'], + dataViewMockWithTimeField.timeFieldName, + buildColumnTypes(dataViewMockWithTimeField), + showTimeCol, + true + ) + ).toBe(false); + } + }); + + it('should forward showTimeCol if _source column is passed', () => { + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['_source'], + dataViewMockWithTimeField.timeFieldName, + buildColumnTypes(dataViewMockWithTimeField), + showTimeCol, + false + ) + ).toBe(showTimeCol); + } + }); + + it('should forward showTimeCol if _source column is passed, text-based datasource', () => { + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['_source'], + dataViewMockWithTimeField.timeFieldName, + buildColumnTypes(dataViewMockWithTimeField), + showTimeCol, + true + ) + ).toBe(showTimeCol); + } + }); + + it('should return false if _source column is passed but time field is not returned, text-based datasource', () => { + // ... | DROP @timestamp test case + const columnsMeta = buildColumnTypes(dataViewMockWithTimeField); + if (dataViewMockWithTimeField.timeFieldName) { + delete columnsMeta[dataViewMockWithTimeField.timeFieldName]; + } + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['_source'], + dataViewMockWithTimeField.timeFieldName, + columnsMeta, + showTimeCol, + true + ) + ).toBe(false); + } + }); + }); + + describe('dataView without timeField', () => { + it('should return false if no _source columns is passed', () => { + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['extension', 'message'], + dataViewMockWithoutTimeField.timeFieldName, + buildColumnTypes(dataViewMockWithoutTimeField), + showTimeCol, + false + ) + ).toBe(false); + } + }); + + it('should return false if no _source columns is passed, text-based datasource', () => { + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['extension', 'message'], + dataViewMockWithoutTimeField.timeFieldName, + buildColumnTypes(dataViewMockWithoutTimeField), + showTimeCol, + true + ) + ).toBe(false); + } + }); + + it('should return false if _source column is passed', () => { + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['_source'], + dataViewMockWithoutTimeField.timeFieldName, + buildColumnTypes(dataViewMockWithoutTimeField), + showTimeCol, + false + ) + ).toBe(false); + } + }); + + it('should return false if _source column is passed, text-based datasource', () => { + for (const showTimeCol of [true, false]) { + expect( + canPrependTimeFieldColumn( + ['_source'], + dataViewMockWithoutTimeField.timeFieldName, + buildColumnTypes(dataViewMockWithoutTimeField), + showTimeCol, + true + ) + ).toBe(false); + } + }); + }); + }); +}); diff --git a/packages/kbn-discover-utils/src/utils/get_visible_columns.ts b/packages/kbn-discover-utils/src/utils/get_visible_columns.ts new file mode 100644 index 0000000000000..69c4390d61e08 --- /dev/null +++ b/packages/kbn-discover-utils/src/utils/get_visible_columns.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { DataView } from '@kbn/data-views-plugin/common'; +import type { DataTableColumnsMeta } from '../types'; + +export function canPrependTimeFieldColumn( + columns: string[] | undefined, + timeFieldName: string | undefined, + columnsMeta: DataTableColumnsMeta | undefined, + showTimeCol: boolean, // based on Advanced Settings `doc_table:hideTimeColumn` + isESQLMode: boolean +) { + if (!showTimeCol || !timeFieldName) { + return false; + } + + if (isESQLMode) { + return ( + !!columns && !!columnsMeta && timeFieldName in columnsMeta && columns.includes('_source') + ); + } + + return true; +} + +export function getVisibleColumns( + columns: string[], + dataView: DataView, + shouldPrependTimeFieldColumn: boolean +) { + const timeFieldName = dataView.timeFieldName; + + if ( + shouldPrependTimeFieldColumn && + timeFieldName && + !columns.find((col) => col === timeFieldName) + ) { + return [timeFieldName, ...columns]; + } + + return columns; +} diff --git a/packages/kbn-discover-utils/src/utils/index.ts b/packages/kbn-discover-utils/src/utils/index.ts index 4066ce34bdb01..e408d7eb1c163 100644 --- a/packages/kbn-discover-utils/src/utils/index.ts +++ b/packages/kbn-discover-utils/src/utils/index.ts @@ -18,4 +18,5 @@ export * from './get_should_show_field_handler'; export * from './nested_fields'; export * from './get_field_value'; export * from './calc_field_counts'; +export * from './get_visible_columns'; export { isLegacyTableEnabled } from './is_legacy_table_enabled'; diff --git a/packages/kbn-discover-utils/tsconfig.json b/packages/kbn-discover-utils/tsconfig.json index de0b747eda555..5a5fe4c69636e 100644 --- a/packages/kbn-discover-utils/tsconfig.json +++ b/packages/kbn-discover-utils/tsconfig.json @@ -25,6 +25,7 @@ "@kbn/field-types", "@kbn/i18n", "@kbn/core-ui-settings-browser", - "@kbn/ui-theme" + "@kbn/ui-theme", + "@kbn/expressions-plugin" ] } diff --git a/packages/kbn-discover-utils/types.ts b/packages/kbn-discover-utils/types.ts index 436d9617614ff..dfbb54f1f09ca 100644 --- a/packages/kbn-discover-utils/types.ts +++ b/packages/kbn-discover-utils/types.ts @@ -9,6 +9,7 @@ export type { DataTableRecord, + DataTableColumnsMeta, EsHitRecord, IgnoredReason, ShouldShowFieldInTableHandler, diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 2b582b965892a..87931e96c4523 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -39,7 +39,11 @@ import { import type { ToastsStart, IUiSettingsClient } from '@kbn/core/public'; import type { Serializable } from '@kbn/utility-types'; import type { DataTableRecord } from '@kbn/discover-utils/types'; -import { getShouldShowFieldHandler } from '@kbn/discover-utils'; +import { + getShouldShowFieldHandler, + canPrependTimeFieldColumn, + getVisibleColumns, +} from '@kbn/discover-utils'; import type { DataViewFieldEditorStart } from '@kbn/data-view-field-editor-plugin/public'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import type { ThemeServiceStart } from '@kbn/react-kibana-context-common'; @@ -62,8 +66,6 @@ import { getRenderCellValueFn } from '../utils/get_render_cell_value'; import { getEuiGridColumns, getLeadControlColumns, - getVisibleColumns, - canPrependTimeFieldColumn, SELECT_ROW, OPEN_DETAILS, } from './data_table_columns'; diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx index 23fcd85de1020..4853201af4b48 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx @@ -8,17 +8,9 @@ */ import React from 'react'; -import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; -import type { DataView } from '@kbn/data-views-plugin/public'; -import type { DatatableColumnType } from '@kbn/expressions-plugin/common'; -import { - deserializeHeaderRowHeight, - getEuiGridColumns, - getVisibleColumns, - canPrependTimeFieldColumn, -} from './data_table_columns'; +import { getVisibleColumns } from '@kbn/discover-utils'; +import { deserializeHeaderRowHeight, getEuiGridColumns } from './data_table_columns'; import { dataViewWithTimefieldMock } from '../../__mocks__/data_view_with_timefield'; -import { dataViewWithoutTimefieldMock } from '../../__mocks__/data_view_without_timefield'; import { dataTableContextMock } from '../../__mocks__/table_context'; import { servicesMock } from '../../__mocks__/services'; import { ROWS_HEIGHT_OPTIONS } from '../constants'; @@ -180,179 +172,6 @@ describe('Data table columns', function () { }); }); - describe('getVisibleColumns', () => { - it('returns grid columns without time column when data view has no timestamp field', () => { - const actual = getVisibleColumns(['extension', 'message'], dataViewMock, true) as string[]; - expect(actual).toEqual(['extension', 'message']); - }); - - it('returns grid columns without time column when showTimeCol is falsy', () => { - const actual = getVisibleColumns( - ['extension', 'message'], - dataViewWithTimefieldMock, - false - ) as string[]; - expect(actual).toEqual(['extension', 'message']); - }); - - it('returns grid columns with time column when data view has timestamp field', () => { - const actual = getVisibleColumns( - ['extension', 'message'], - dataViewWithTimefieldMock, - true - ) as string[]; - expect(actual).toEqual(['timestamp', 'extension', 'message']); - }); - }); - - describe('canPrependTimeFieldColumn', () => { - function buildColumnTypes(dataView: DataView) { - const columnsMeta: Record< - string, - { type: DatatableColumnType; esType?: string | undefined } - > = {}; - for (const field of dataView.fields) { - columnsMeta[field.name] = { type: field.type as DatatableColumnType }; - } - return columnsMeta; - } - - describe('dataView with timeField', () => { - it('should forward showTimeCol if no _source columns is passed', () => { - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['extension', 'message'], - dataViewWithTimefieldMock.timeFieldName, - buildColumnTypes(dataViewWithTimefieldMock), - showTimeCol, - false - ) - ).toBe(showTimeCol); - } - }); - - it('should return false if no _source columns is passed, text-based datasource', () => { - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['extension', 'message'], - dataViewWithTimefieldMock.timeFieldName, - buildColumnTypes(dataViewWithTimefieldMock), - showTimeCol, - true - ) - ).toBe(false); - } - }); - - it('should forward showTimeCol if _source column is passed', () => { - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['_source'], - dataViewWithTimefieldMock.timeFieldName, - buildColumnTypes(dataViewWithTimefieldMock), - showTimeCol, - false - ) - ).toBe(showTimeCol); - } - }); - - it('should forward showTimeCol if _source column is passed, text-based datasource', () => { - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['_source'], - dataViewWithTimefieldMock.timeFieldName, - buildColumnTypes(dataViewWithTimefieldMock), - showTimeCol, - true - ) - ).toBe(showTimeCol); - } - }); - - it('should return false if _source column is passed but time field is not returned, text-based datasource', () => { - // ... | DROP @timestamp test case - const columnsMeta = buildColumnTypes(dataViewWithTimefieldMock); - if (dataViewWithTimefieldMock.timeFieldName) { - delete columnsMeta[dataViewWithTimefieldMock.timeFieldName]; - } - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['_source'], - dataViewWithTimefieldMock.timeFieldName, - columnsMeta, - showTimeCol, - true - ) - ).toBe(false); - } - }); - }); - - describe('dataView without timeField', () => { - it('should return false if no _source columns is passed', () => { - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['extension', 'message'], - dataViewWithoutTimefieldMock.timeFieldName, - buildColumnTypes(dataViewWithoutTimefieldMock), - showTimeCol, - false - ) - ).toBe(false); - } - }); - - it('should return false if no _source columns is passed, text-based datasource', () => { - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['extension', 'message'], - dataViewWithoutTimefieldMock.timeFieldName, - buildColumnTypes(dataViewWithoutTimefieldMock), - showTimeCol, - true - ) - ).toBe(false); - } - }); - - it('should return false if _source column is passed', () => { - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['_source'], - dataViewWithoutTimefieldMock.timeFieldName, - buildColumnTypes(dataViewWithoutTimefieldMock), - showTimeCol, - false - ) - ).toBe(false); - } - }); - - it('should return false if _source column is passed, text-based datasource', () => { - for (const showTimeCol of [true, false]) { - expect( - canPrependTimeFieldColumn( - ['_source'], - dataViewWithoutTimefieldMock.timeFieldName, - buildColumnTypes(dataViewWithoutTimefieldMock), - showTimeCol, - true - ) - ).toBe(false); - } - }); - }); - }); - describe('column tokens', () => { it('returns eui grid columns with tokens', async () => { const actual = getEuiGridColumns({ diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx index 10f55431faa71..4ef0636093f8d 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx @@ -358,39 +358,3 @@ export function getEuiGridColumns({ }) ); } - -export function canPrependTimeFieldColumn( - columns: string[], - timeFieldName: string | undefined, - columnsMeta: DataTableColumnsMeta | undefined, - showTimeCol: boolean, - isPlainRecord: boolean -) { - if (!showTimeCol || !timeFieldName) { - return false; - } - - if (isPlainRecord) { - return !!columnsMeta && timeFieldName in columnsMeta && columns.includes('_source'); - } - - return true; -} - -export function getVisibleColumns( - columns: string[], - dataView: DataView, - shouldPrependTimeFieldColumn: boolean -) { - const timeFieldName = dataView.timeFieldName; - - if ( - shouldPrependTimeFieldColumn && - timeFieldName && - !columns.find((col) => col === timeFieldName) - ) { - return [timeFieldName, ...columns]; - } - - return columns; -} diff --git a/packages/kbn-unified-data-table/src/types.ts b/packages/kbn-unified-data-table/src/types.ts index a020a896130f3..77feaf8a5ef44 100644 --- a/packages/kbn-unified-data-table/src/types.ts +++ b/packages/kbn-unified-data-table/src/types.ts @@ -18,8 +18,8 @@ import type { DataTableRecord } from '@kbn/discover-utils/src/types'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import type { EuiDataGridControlColumn } from '@elastic/eui/src/components/datagrid/data_grid_types'; -import type { DatatableColumnMeta } from '@kbn/expressions-plugin/common'; +export type { DataTableColumnsMeta } from '@kbn/discover-utils/src/types'; export type { DataGridDensity } from './constants'; /** @@ -45,17 +45,6 @@ export type ValueToStringConverter = ( options?: { compatibleWithCSV?: boolean } ) => { formattedString: string; withFormula: boolean }; -/** - * Custom column types per column name - */ -export type DataTableColumnsMeta = Record< - string, - { - type: DatatableColumnMeta['type']; - esType?: DatatableColumnMeta['esType']; - } ->; - export type DataGridCellValueElementProps = EuiDataGridCellValueElementProps & { row: DataTableRecord; dataView: DataView; diff --git a/packages/kbn-unified-doc-viewer/src/services/types.ts b/packages/kbn-unified-doc-viewer/src/services/types.ts index 88b5824c6837f..04d88ba256a37 100644 --- a/packages/kbn-unified-doc-viewer/src/services/types.ts +++ b/packages/kbn-unified-doc-viewer/src/services/types.ts @@ -9,8 +9,11 @@ import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import type { AggregateQuery, Query } from '@kbn/es-query'; -import type { DataTableRecord, IgnoredReason } from '@kbn/discover-utils/types'; -import type { DatatableColumnMeta } from '@kbn/expressions-plugin/common'; +import type { + DataTableRecord, + DataTableColumnsMeta, + IgnoredReason, +} from '@kbn/discover-utils/types'; import { DocViewsRegistry } from './doc_views_registry'; export interface FieldMapping { @@ -36,13 +39,7 @@ export interface DocViewRenderProps { * If not provided, types will be derived by default from the dataView field types. * For displaying text-based search results, define column types (which are available separately in the fetch request) here. */ - columnsMeta?: Record< - string, - { - type: DatatableColumnMeta['type']; - esType?: DatatableColumnMeta['esType']; - } - >; + columnsMeta?: DataTableColumnsMeta; query?: Query | AggregateQuery; textBasedHits?: DataTableRecord[]; hideActionsColumn?: boolean; diff --git a/packages/kbn-unified-doc-viewer/tsconfig.json b/packages/kbn-unified-doc-viewer/tsconfig.json index 05bb4f1539598..e9429af74bd74 100644 --- a/packages/kbn-unified-doc-viewer/tsconfig.json +++ b/packages/kbn-unified-doc-viewer/tsconfig.json @@ -24,6 +24,5 @@ "@kbn/i18n", "@kbn/react-field", "@kbn/field-utils", - "@kbn/expressions-plugin", ] } diff --git a/src/plugins/esql_datagrid/public/data_grid.tsx b/src/plugins/esql_datagrid/public/data_grid.tsx index 990d27891bf6c..58145627f139f 100644 --- a/src/plugins/esql_datagrid/public/data_grid.tsx +++ b/src/plugins/esql_datagrid/public/data_grid.tsx @@ -21,10 +21,10 @@ import { EuiLink, EuiText, EuiIcon } from '@elastic/eui'; import { css } from '@emotion/react'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import type { ESQLRow } from '@kbn/es-types'; -import type { DatatableColumn, DatatableColumnMeta } from '@kbn/expressions-plugin/common'; +import type { DatatableColumn } from '@kbn/expressions-plugin/common'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { AggregateQuery } from '@kbn/es-query'; -import type { DataTableRecord } from '@kbn/discover-utils/types'; +import type { DataTableRecord, DataTableColumnsMeta } from '@kbn/discover-utils/types'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { CoreStart } from '@kbn/core/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; @@ -46,13 +46,6 @@ interface ESQLDataGridProps { initialRowHeight?: number; controlColumnIds?: string[]; } -type DataTableColumnsMeta = Record< - string, - { - type: DatatableColumnMeta['type']; - esType?: DatatableColumnMeta['esType']; - } ->; const sortOrder: SortOrder[] = []; const DEFAULT_INITIAL_ROW_HEIGHT = 5; diff --git a/src/plugins/esql_datagrid/public/row_viewer.tsx b/src/plugins/esql_datagrid/public/row_viewer.tsx index 8be9a67b36894..2578bee01e6cb 100644 --- a/src/plugins/esql_datagrid/public/row_viewer.tsx +++ b/src/plugins/esql_datagrid/public/row_viewer.tsx @@ -9,8 +9,7 @@ import React, { useMemo } from 'react'; import type { DataView } from '@kbn/data-views-plugin/public'; -import type { DataTableRecord } from '@kbn/discover-utils/types'; -import type { DataTableColumnsMeta } from '@kbn/unified-data-table'; +import type { DataTableRecord, DataTableColumnsMeta } from '@kbn/discover-utils/types'; import { UnifiedDocViewerFlyout } from '@kbn/unified-doc-viewer-plugin/public'; import { NotificationsStart } from '@kbn/core-notifications-browser'; diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/doc_viewer_flyout.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/doc_viewer_flyout.tsx index 754f9c4c05b6e..540c04a206c61 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/doc_viewer_flyout.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_flyout/doc_viewer_flyout.tsx @@ -29,8 +29,7 @@ import { useIsWithinMinBreakpoint, EuiFlyoutProps, } from '@elastic/eui'; -import type { DataTableRecord } from '@kbn/discover-utils/types'; -import type { DataTableColumnsMeta } from '@kbn/unified-data-table'; +import type { DataTableRecord, DataTableColumnsMeta } from '@kbn/discover-utils/types'; import useLocalStorage from 'react-use/lib/useLocalStorage'; import type { ToastsStart } from '@kbn/core-notifications-browser'; import type { DocViewFilterFn, DocViewRenderProps } from '@kbn/unified-doc-viewer/types'; diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.test.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.test.tsx new file mode 100644 index 0000000000000..833b9db059975 --- /dev/null +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.test.tsx @@ -0,0 +1,168 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { render, screen, act } from '@testing-library/react'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import { buildDataTableRecord } from '@kbn/discover-utils'; +import { createStubDataView } from '@kbn/data-views-plugin/common/data_view.stub'; +import { Storage } from '@kbn/kibana-utils-plugin/public'; +import { generateEsHits } from '@kbn/discover-utils/src/__mocks__'; +import { DocViewerTable, SHOW_ONLY_SELECTED_FIELDS } from './table'; +import { mockUnifiedDocViewerServices } from '../../__mocks__'; +import { setUnifiedDocViewerServices } from '../../plugin'; + +const storage = new Storage(window.localStorage); + +setUnifiedDocViewerServices(mockUnifiedDocViewerServices); + +const dataView = createStubDataView({ + spec: { + id: 'test', + title: 'test', + timeFieldName: '@timestamp', + fields: { + '@timestamp': { + name: '@timestamp', + type: 'date', + esTypes: ['date'], + aggregatable: true, + searchable: true, + count: 30, + readFromDocValues: true, + scripted: false, + isMapped: true, + }, + bytes: { + name: 'bytes', + type: 'number', + esTypes: ['long'], + aggregatable: true, + searchable: true, + count: 10, + readFromDocValues: true, + scripted: false, + isMapped: true, + }, + 'extension.keyword': { + name: 'extension.keyword', + type: 'string', + esTypes: ['keyword'], + aggregatable: true, + searchable: true, + count: 0, + readFromDocValues: true, + scripted: false, + subType: { + multi: { + parent: 'extension', + }, + }, + isMapped: true, + }, + _id: { + name: '_id', + type: 'string', + esTypes: ['_id'], + aggregatable: false, + searchable: true, + readFromDocValues: true, + isMapped: true, + }, + }, + }, +}); +const hit = buildDataTableRecord(generateEsHits(dataView, 1)[0], dataView); + +describe('DocViewerTable', () => { + afterEach(() => { + storage.clear(); + }); + + describe('switch - show only selected fields', () => { + it('should disable the switch if columns is empty', async () => { + render( + + + + ); + + expect(screen.getByTestId('unifiedDocViewerShowOnlySelectedFieldsSwitch')).toBeDisabled(); + expect(screen.getByText('@timestamp')).toBeInTheDocument(); + expect(screen.getByText('bytes')).toBeInTheDocument(); + expect(screen.getByText('extension.keyword')).toBeInTheDocument(); + }); + + it('should disable the switch even if it was previously switched on', async () => { + storage.set(SHOW_ONLY_SELECTED_FIELDS, true); + + render( + + + + ); + + expect(screen.getByTestId('unifiedDocViewerShowOnlySelectedFieldsSwitch')).toBeDisabled(); + expect(screen.getByText('@timestamp')).toBeInTheDocument(); + expect(screen.getByText('bytes')).toBeInTheDocument(); + expect(screen.getByText('extension.keyword')).toBeInTheDocument(); + }); + + it('should show only selected fields if it was previously switched on', async () => { + storage.set(SHOW_ONLY_SELECTED_FIELDS, true); + + render( + + + + ); + + expect(screen.getByTestId('unifiedDocViewerShowOnlySelectedFieldsSwitch')).toBeEnabled(); + expect(screen.getByText('@timestamp')).toBeInTheDocument(); + expect(screen.queryByText('bytes')).toBeNull(); + expect(screen.getByText('extension.keyword')).toBeInTheDocument(); + }); + + it('should allow toggling the switch', async () => { + render( + + + + ); + + const showOnlySelectedFieldsSwitch = screen.getByTestId( + 'unifiedDocViewerShowOnlySelectedFieldsSwitch' + ); + + expect(showOnlySelectedFieldsSwitch).toBeEnabled(); + expect(showOnlySelectedFieldsSwitch).toHaveValue(''); + expect(screen.getByText('@timestamp')).toBeInTheDocument(); + expect(screen.getByText('bytes')).toBeInTheDocument(); + expect(screen.getByText('extension.keyword')).toBeInTheDocument(); + + act(() => { + showOnlySelectedFieldsSwitch.click(); + }); + + expect(screen.getByText('@timestamp')).toBeInTheDocument(); + expect(screen.getByText('bytes')).toBeInTheDocument(); + expect(screen.queryByText('extension.keyword')).toBeNull(); + expect(storage.get(SHOW_ONLY_SELECTED_FIELDS)).toBe(true); + + act(() => { + showOnlySelectedFieldsSwitch.click(); + }); + + expect(screen.getByText('@timestamp')).toBeInTheDocument(); + expect(screen.getByText('bytes')).toBeInTheDocument(); + expect(screen.getByText('extension.keyword')).toBeInTheDocument(); + expect(storage.get(SHOW_ONLY_SELECTED_FIELDS)).toBe(false); + }); + }); +}); diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx index 76b1e0b02940d..e542a94c5fca8 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx @@ -24,7 +24,6 @@ import { EuiCallOut, useResizeObserver, EuiSwitch, - useEuiTheme, EuiSwitchEvent, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -33,11 +32,14 @@ import { Storage } from '@kbn/kibana-utils-plugin/public'; import { getFieldIconType } from '@kbn/field-utils/src/utils/get_field_icon_type'; import { SHOW_MULTIFIELDS, + DOC_HIDE_TIME_COLUMN_SETTING, formatFieldValue, getIgnoredReason, getShouldShowFieldHandler, isNestedFieldParent, usePager, + getVisibleColumns, + canPrependTimeFieldColumn, } from '@kbn/discover-utils'; import { getTextBasedColumnIconType } from '@kbn/field-utils'; import type { DocViewRenderProps } from '@kbn/unified-doc-viewer/types'; @@ -72,6 +74,7 @@ const DEFAULT_PAGE_SIZE = 25; const PINNED_FIELDS_KEY = 'discover:pinnedFields'; const PAGE_SIZE = 'discover:pageSize'; const HIDE_NULL_VALUES = 'unifiedDocViewer:hideNullValues'; +export const SHOW_ONLY_SELECTED_FIELDS = 'unifiedDocViewer:showOnlySelectedFields'; const GRID_COLUMN_FIELD_NAME = 'name'; const GRID_COLUMN_FIELD_VALUE = 'value'; @@ -143,8 +146,10 @@ export const DocViewerTable = ({ getPinnedFields(currentDataViewId, storage) ); const [areNullValuesHidden, setAreNullValuesHidden] = useLocalStorage(HIDE_NULL_VALUES, false); - - const { euiTheme } = useEuiTheme(); + const [showOnlySelectedFields, setShowOnlySelectedFields] = useLocalStorage( + SHOW_ONLY_SELECTED_FIELDS, + false + ); const flattened = hit.flattened; const shouldShowFieldHandler = useMemo( @@ -237,59 +242,97 @@ export const DocViewerTable = ({ ] ); + const fieldsFromColumns = useMemo( + () => columns?.filter((column) => column !== '_source') || [], + [columns] + ); + + const isShowOnlySelectedFieldsDisabled = !fieldsFromColumns?.length; + + const shouldShowOnlySelectedFields = useMemo( + () => showOnlySelectedFields && !isShowOnlySelectedFieldsDisabled, + [showOnlySelectedFields, isShowOnlySelectedFieldsDisabled] + ); + + const displayedFieldNames = useMemo(() => { + if (shouldShowOnlySelectedFields) { + return getVisibleColumns( + fieldsFromColumns, + dataView, + canPrependTimeFieldColumn( + columns, + dataView.timeFieldName, + columnsMeta, + !uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING, false), + isEsqlMode + ) + ); + } + return Object.keys(flattened).sort((fieldA, fieldB) => { + const mappingA = mapping(fieldA); + const mappingB = mapping(fieldB); + const nameA = !mappingA || !mappingA.displayName ? fieldA : mappingA.displayName; + const nameB = !mappingB || !mappingB.displayName ? fieldB : mappingB.displayName; + return nameA.localeCompare(nameB); + }); + }, [ + fieldsFromColumns, + flattened, + shouldShowOnlySelectedFields, + mapping, + dataView, + columns, + columnsMeta, + isEsqlMode, + uiSettings, + ]); + const { pinnedItems, restItems, allFields } = useMemo( () => - Object.keys(flattened) - .sort((fieldA, fieldB) => { - const mappingA = mapping(fieldA); - const mappingB = mapping(fieldB); - const nameA = !mappingA || !mappingA.displayName ? fieldA : mappingA.displayName; - const nameB = !mappingB || !mappingB.displayName ? fieldB : mappingB.displayName; - return nameA.localeCompare(nameB); - }) - .reduce( - (acc, curFieldName) => { - if (!shouldShowFieldHandler(curFieldName)) { - return acc; - } - const shouldHideNullValue = - areNullValuesHidden && flattened[curFieldName] == null && isEsqlMode; - if (shouldHideNullValue) { - return acc; - } + displayedFieldNames.reduce( + (acc, curFieldName) => { + if (!shouldShowOnlySelectedFields && !shouldShowFieldHandler(curFieldName)) { + return acc; + } + const shouldHideNullValue = + isEsqlMode && areNullValuesHidden && flattened[curFieldName] == null; + if (shouldHideNullValue) { + return acc; + } - const isPinned = pinnedFields.includes(curFieldName); - const row = fieldToItem(curFieldName, isPinned); + const isPinned = pinnedFields.includes(curFieldName); + const row = fieldToItem(curFieldName, isPinned); - if (isPinned) { - acc.pinnedItems.push(row); - } else { - if (onFilterField(curFieldName, row.field.displayName, row.field.fieldType)) { - // filter only unpinned fields - acc.restItems.push(row); - } + if (isPinned) { + acc.pinnedItems.push(row); + } else { + if (onFilterField(curFieldName, row.field.displayName, row.field.fieldType)) { + // filter only unpinned fields + acc.restItems.push(row); } + } - acc.allFields.push({ - name: curFieldName, - displayName: row.field.displayName, - type: row.field.fieldType, - }); + acc.allFields.push({ + name: curFieldName, + displayName: row.field.displayName, + type: row.field.fieldType, + }); - return acc; - }, - { - pinnedItems: [], - restItems: [], - allFields: [], - } - ), + return acc; + }, + { + pinnedItems: [], + restItems: [], + allFields: [], + } + ), [ + displayedFieldNames, areNullValuesHidden, + shouldShowOnlySelectedFields, fieldToItem, flattened, isEsqlMode, - mapping, onFilterField, pinnedFields, shouldShowFieldHandler, @@ -375,6 +418,13 @@ export const DocViewerTable = ({ [setAreNullValuesHidden] ); + const onShowOnlySelectedFieldsChange = useCallback( + (e: EuiSwitchEvent) => { + setShowOnlySelectedFields(e.target.checked); + }, + [setShowOnlySelectedFields] + ); + const renderCellValue: EuiDataGridProps['renderCellValue'] = useCallback( ({ rowIndex, columnId, isDetails }) => { return ( @@ -446,31 +496,38 @@ export const DocViewerTable = ({ - {rows.length === 0 ? ( - -

- -

-
- ) : ( - <> + + + + + + - + {isEsqlMode && ( - + )} - - + + + + + + + {rows.length === 0 ? ( + +

+ - - +

+
+ ) : ( + + + )}
); diff --git a/src/plugins/unified_doc_viewer/tsconfig.json b/src/plugins/unified_doc_viewer/tsconfig.json index ef3a7a91153ac..eab6884b972ec 100644 --- a/src/plugins/unified_doc_viewer/tsconfig.json +++ b/src/plugins/unified_doc_viewer/tsconfig.json @@ -31,7 +31,6 @@ "@kbn/ui-theme", "@kbn/discover-shared-plugin", "@kbn/fields-metadata-plugin", - "@kbn/unified-data-table", "@kbn/core-notifications-browser", "@kbn/deeplinks-observability", "@kbn/share-plugin", diff --git a/test/functional/apps/discover/group3/_doc_viewer.ts b/test/functional/apps/discover/group3/_doc_viewer.ts index 6da0725978afe..3d3562e10beb4 100644 --- a/test/functional/apps/discover/group3/_doc_viewer.ts +++ b/test/functional/apps/discover/group3/_doc_viewer.ts @@ -233,6 +233,151 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); + describe('show only selected fields in ES|QL mode', function () { + beforeEach(async () => { + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + }); + + it('should disable the switch when no fields are selected', async function () { + const testQuery = 'from logstash-* | sort @timestamp | limit 10'; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await dataGrid.clickRowToggle(); + await discover.isShowingDocViewer(); + + const showOnlySelectedFieldsSwitch = await testSubjects.find( + 'unifiedDocViewerShowOnlySelectedFieldsSwitch' + ); + expect(await showOnlySelectedFieldsSwitch.getAttribute('disabled')).to.be('true'); + + const fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + const fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + + expect( + fieldNames.join(',').startsWith('@message,@tags,@timestamp,agent,bytes,clientip') + ).to.be(true); + }); + + it('should allow toggling the switch', async function () { + const testQuery = 'from logstash-* | sort @timestamp | limit 10'; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + await unifiedFieldList.clickFieldListItemAdd('agent.raw'); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('agent'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + await dataGrid.clickRowToggle(); + await discover.isShowingDocViewer(); + + const showOnlySelectedFieldsSwitch = await testSubjects.find( + 'unifiedDocViewerShowOnlySelectedFieldsSwitch' + ); + expect(await showOnlySelectedFieldsSwitch.getAttribute('disabled')).to.be(null); + + let fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + let fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + + expect( + fieldNames.join(',').startsWith('@message,@tags,@timestamp,agent,bytes,clientip') + ).to.be(true); + + await showOnlySelectedFieldsSwitch.click(); + + await retry.waitFor('updates after switching to show only selected', async () => { + fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + return fieldNames.join(',') === 'agent.raw,agent'; + }); + + await dataGrid.togglePinActionInFlyout('agent'); + + await retry.waitFor('updates after pinning the last field', async () => { + fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + return fieldNames.join(',') === 'agent,agent.raw'; + }); + + await showOnlySelectedFieldsSwitch.click(); + + await retry.waitFor('updates after switching from showing only selected', async () => { + fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + return fieldNames.join(',').startsWith('agent,@message,@tags'); + }); + }); + }); + + describe('show only selected fields in data view mode', function () { + it('should disable the switch when no fields are selected', async function () { + await dataGrid.clickRowToggle(); + await discover.isShowingDocViewer(); + + const showOnlySelectedFieldsSwitch = await testSubjects.find( + 'unifiedDocViewerShowOnlySelectedFieldsSwitch' + ); + expect(await showOnlySelectedFieldsSwitch.getAttribute('disabled')).to.be('true'); + + const fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + const fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + + expect(fieldNames.join(',').startsWith('_id,_ignored,_index,_score,@message')).to.be(true); + }); + + it('should allow toggling the switch', async function () { + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('@tags'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + await dataGrid.clickRowToggle(); + await discover.isShowingDocViewer(); + + const showOnlySelectedFieldsSwitch = await testSubjects.find( + 'unifiedDocViewerShowOnlySelectedFieldsSwitch' + ); + expect(await showOnlySelectedFieldsSwitch.getAttribute('disabled')).to.be(null); + + let fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + let fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + + expect(fieldNames.join(',').startsWith('_id,_ignored,_index,_score,@message')).to.be(true); + + await showOnlySelectedFieldsSwitch.click(); + + await retry.waitFor('updates after switching to show only selected', async () => { + fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + return fieldNames.join(',') === '@timestamp,bytes,@tags'; + }); + + await dataGrid.togglePinActionInFlyout('bytes'); + + await retry.waitFor('updates after pinning the last field', async () => { + fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + return fieldNames.join(',') === 'bytes,@timestamp,@tags'; + }); + + await showOnlySelectedFieldsSwitch.click(); + + await retry.waitFor('updates after switching from showing only selected', async () => { + fieldNameCells = await find.allByCssSelector('.kbnDocViewer__fieldName'); + fieldNames = await Promise.all(fieldNameCells.map((cell) => cell.getVisibleText())); + return fieldNames.join(',').startsWith('bytes,_id,_ignored,_index,_score,@message'); + }); + }); + }); + describe('pinning fields', function () { it('should be able to pin and unpin fields', async function () { await dataGrid.clickRowToggle(); From 9accb33d18c4828f6141a4b9299b8ec29f0e28df Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Wed, 11 Sep 2024 13:27:47 +0200 Subject: [PATCH 15/52] Improve quick checks (#192369) ## Summary Fixes a few issues around the changed quick-checks. Addresses: - https://github.com/elastic/kibana-operations/issues/195 - https://github.com/elastic/kibana-operations/issues/201 & https://github.com/elastic/kibana-operations/issues/202 --- .buildkite/scripts/steps/checks/renovate.sh | 8 +++++++- .../kbn-ci-stats-reporter/src/ci_stats_reporter.ts | 10 ++++++---- src/dev/run_quick_checks.ts | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.buildkite/scripts/steps/checks/renovate.sh b/.buildkite/scripts/steps/checks/renovate.sh index 17c87254511e1..924d32853cd00 100755 --- a/.buildkite/scripts/steps/checks/renovate.sh +++ b/.buildkite/scripts/steps/checks/renovate.sh @@ -4,5 +4,11 @@ set -euo pipefail +source .buildkite/scripts/common/util.sh + echo --- Check renovate.json -docker run -v "$(pwd)"/renovate.json:/home/app/renovate.json docker.elastic.co/ci-agent-images/pipelib:0.8.0@sha256:641d7fc6cfe473900a1fbe49876762916d804b09fdf2945f74e9f803f3073779 renovate-config-validator + +retry 3 3 docker run \ + -v "$(pwd)"/renovate.json:/home/app/renovate.json \ + docker.elastic.co/ci-agent-images/pipelib:0.8.0@sha256:641d7fc6cfe473900a1fbe49876762916d804b09fdf2945f74e9f803f3073779 \ + renovate-config-validator diff --git a/packages/kbn-ci-stats-reporter/src/ci_stats_reporter.ts b/packages/kbn-ci-stats-reporter/src/ci_stats_reporter.ts index c03fd7f54dea5..696f5a10f4819 100644 --- a/packages/kbn-ci-stats-reporter/src/ci_stats_reporter.ts +++ b/packages/kbn-ci-stats-reporter/src/ci_stats_reporter.ts @@ -170,7 +170,7 @@ export class CiStatsReporter { const { stdout } = await execa('git', ['config', 'user.email']); email = stdout; } catch (e) { - this.log.debug(e.message); + // no-op - we're ok with email being undefined } try { @@ -181,7 +181,7 @@ export class CiStatsReporter { } const memUsage = process.memoryUsage(); - const isElasticCommitter = email && email.endsWith('@elastic.co') ? true : false; + const isElasticCommitter = email && email.endsWith('@elastic.co'); const defaultMeta = { kibanaUuid, @@ -200,14 +200,16 @@ export class CiStatsReporter { memoryUsageHeapUsed: memUsage.heapUsed, memoryUsageExternal: memUsage.external, memoryUsageArrayBuffers: memUsage.arrayBuffers, - nestedTiming: process.env.CI_STATS_NESTED_TIMING ? true : false, + nestedTiming: !!process.env.CI_STATS_NESTED_TIMING, osArch: Os.arch(), osPlatform: Os.platform(), osRelease: Os.release(), totalMem: Os.totalmem(), }; - this.log.debug('CIStatsReporter committerHash: %s', defaultMeta.committerHash); + if (defaultMeta.committerHash) { + this.log.debug('CIStatsReporter committerHash: %s', defaultMeta.committerHash); + } return !!(await this.req({ auth: !!buildId, diff --git a/src/dev/run_quick_checks.ts b/src/dev/run_quick_checks.ts index 383a9e989520e..b856246d40e24 100644 --- a/src/dev/run_quick_checks.ts +++ b/src/dev/run_quick_checks.ts @@ -70,7 +70,7 @@ void run(async ({ log, flagsReader }) => { const failedChecks = results.filter((check) => !check.success); if (failedChecks.length > 0) { logger.write(`--- ${failedChecks.length} quick check(s) failed. ❌`); - logger.write(`See above for details.`); + logger.write(`See the script(s) marked with ❌ above for details.`); process.exitCode = 1; } else { logger.write('--- All checks passed. ✅'); From 9cd3c4a5009b3dbb598fcea5aba4af03184c88bc Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Wed, 11 Sep 2024 07:59:35 -0400 Subject: [PATCH 16/52] =?UTF-8?q?Fixes=20Failing=20test:=20Task=20Manager?= =?UTF-8?q?=20MGet=20Claimer=20Functional=20Tests.x-pack/test/task=5Fmanag?= =?UTF-8?q?er=5Fclaimer=5Fmget/test=5Fsuites/task=5Fmanager/migrations?= =?UTF-8?q?=C2=B7ts=20-=20task=5Fmanager=20with=20mget=20task=20claimer=20?= =?UTF-8?q?migrations=208.5.0=20migrates=20active=20tasks=20to=20set=20ena?= =?UTF-8?q?bled=20to=20true=20(#192463)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves https://github.com/elastic/kibana/issues/190454 ## Summary Updated the query to only return tasks. The flakiness was caused by the query sometimes returning the new `background-task-node` document type in the TM index. Also saw another flake where the task manager metrics comparisons weren't returning correctly because the metrics reset, so increased the metrics reset interval slightly. Ran flaky test runner 2x200 times successfully: * https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6911 * https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6913 --- .../test/task_manager_claimer_mget/config.ts | 1 + .../test_suites/task_manager/migrations.ts | 27 ++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/x-pack/test/task_manager_claimer_mget/config.ts b/x-pack/test/task_manager_claimer_mget/config.ts index b1a70d6e35c1a..38622299d792a 100644 --- a/x-pack/test/task_manager_claimer_mget/config.ts +++ b/x-pack/test/task_manager_claimer_mget/config.ts @@ -32,6 +32,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { '--xpack.task_manager.monitored_aggregated_stats_refresh_rate=5000', '--xpack.task_manager.ephemeral_tasks.enabled=false', '--xpack.task_manager.ephemeral_tasks.request_capacity=100', + '--xpack.task_manager.metrics_reset_interval=40000', `--xpack.stack_connectors.enableExperimental=${JSON.stringify(['crowdstrikeConnectorOn'])}`, ...findTestPluginPaths(path.resolve(__dirname, 'plugins')), ], diff --git a/x-pack/test/task_manager_claimer_mget/test_suites/task_manager/migrations.ts b/x-pack/test/task_manager_claimer_mget/test_suites/task_manager/migrations.ts index cb660d599eada..31854652cbc67 100644 --- a/x-pack/test/task_manager_claimer_mget/test_suites/task_manager/migrations.ts +++ b/x-pack/test/task_manager_claimer_mget/test_suites/task_manager/migrations.ts @@ -24,8 +24,7 @@ export default function createGetTests({ getService }: FtrProviderContext) { const ALERT_ID = '0359d7fcc04da9878ee9aadbda38ba55'; const ACTION_TASK_PARAMS_ID = '6e96ac5e648f57523879661ea72525b7'; - // FLAKY: https://github.com/elastic/kibana/issues/190454 - describe.skip('migrations', () => { + describe('migrations', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/task_manager_tasks'); }); @@ -147,7 +146,9 @@ export default function createGetTests({ getService }: FtrProviderContext) { size: 100, body: { query: { - match_all: {}, + bool: { + filter: [{ term: { type: 'task' } }], + }, }, }, }, @@ -174,7 +175,9 @@ export default function createGetTests({ getService }: FtrProviderContext) { size: 100, body: { query: { - match_all: {}, + bool: { + filter: [{ term: { type: 'task' } }], + }, }, }, }, @@ -200,7 +203,13 @@ export default function createGetTests({ getService }: FtrProviderContext) { { index: '.kibana_task_manager', size: 100, - body: { query: { match_all: {} } }, + body: { + query: { + bool: { + filter: [{ term: { type: 'task' } }], + }, + }, + }, }, { meta: true } ); @@ -233,7 +242,13 @@ export default function createGetTests({ getService }: FtrProviderContext) { { index: '.kibana_task_manager', size: 100, - body: { query: { match_all: {} } }, + body: { + query: { + bool: { + filter: [{ term: { type: 'task' } }], + }, + }, + }, }, { meta: true } ); From 34fd9dcbf93ad7431eea6988a369be8dcfc437c1 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Wed, 11 Sep 2024 08:00:13 -0400 Subject: [PATCH 17/52] Fixes Failing test: Jest Integration Tests.x-pack/plugins/task_manager/server/integration_tests - capacity based claiming should claim tasks to full capacity (#192519) Resolves https://github.com/elastic/kibana/issues/191117 This test became flaky again after merging this PR https://github.com/elastic/kibana/pull/192261 which changes Kibana to claim tasks against all partitions when the partitions have not yet been assigned. This was due to setting the `runAt` value to `now-1000` which means that all injected tasks were immediately overdue and claimable as soon as possible, which means they might get claimed in different claim cycles. This PR changes the `runAt` value to `now + 5000` so injected tasks won't be claimed until they're all injected so they should be claimed in one cycle. Copied this test 60 times and was able to run the integration tests twice (so 120 times total) with no failures. * https://buildkite.com/elastic/kibana-pull-request/builds/233196#0191dd0b-fe03-40cf-9fab-b211dd662993 * https://buildkite.com/elastic/kibana-pull-request/builds/233236#0191dd94-8010-4b3c-988d-6e7d5655f989 --- .../task_manager_capacity_based_claiming.test.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts b/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts index 749084f274b5b..b042655cfc261 100644 --- a/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts +++ b/x-pack/plugins/task_manager/server/integration_tests/task_manager_capacity_based_claiming.test.ts @@ -94,8 +94,7 @@ jest.mock('../queries/task_claiming', () => { const taskManagerStartSpy = jest.spyOn(TaskManagerPlugin.prototype, 'start'); -// Failing: See https://github.com/elastic/kibana/issues/191117 -describe.skip('capacity based claiming', () => { +describe('capacity based claiming', () => { const taskIdsToRemove: string[] = []; let esServer: TestElasticsearchUtils; let kibanaServer: TestKibanaUtils; @@ -170,7 +169,7 @@ describe.skip('capacity based claiming', () => { times(10, () => ids.push(uuidV4())); const now = new Date(); - const runAt = new Date(now.valueOf() - 1000); + const runAt = new Date(now.valueOf() + 5000); for (const id of ids) { await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { id, From c4dd4d1d9904d11a9b91219e0205728ff555c437 Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:31:48 +0200 Subject: [PATCH 18/52] [Fleet] prevent extra agent_status call with empty policyId (#192549) ## Summary UI bug reported by users, there was an extra `/api/fleet/agent_status?policyId=` call when opening Edit integration page, which sometimes causes an incorrect agent count being displayed on the confirmation modal. Fixing that by starting with an empty `policy_ids` placeholder until the package policy is loaded. The agent status API is only called if there is at least one policy id in `policy_ids` here: https://github.com/elastic/kibana/blob/325dba37ec1b6872bffc21413c1b060f868eb3f8/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.tsx#L163 To verify: - Create an agent policy with system integration - Edit the system integration - Check Chrome Network tab - Verify that there is no `/api/fleet/agent_status?policyId=` call, only one with an `policyId` image ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../edit_package_policy_page/hooks/use_package_policy.tsx | 2 +- .../agent_policy/edit_package_policy_page/index.test.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx index 49425e62e8a6b..ec2771df920cd 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx @@ -74,7 +74,7 @@ export function usePackagePolicyWithRelatedData( description: '', namespace: '', policy_id: '', - policy_ids: [''], + policy_ids: [], enabled: true, inputs: [], version: '', diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.test.tsx index f893f7a7e7aeb..384920b252a5a 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.test.tsx @@ -564,6 +564,7 @@ describe('edit package policy page', () => { policy_ids: ['agent-policy-1', 'agent-policy-2'], }) ); + expect(sendGetAgentStatus).toHaveBeenCalledTimes(1); }); it('should not remove managed policy when policies are modified', async () => { From ac66e7cb44bbeff6308a23c967d1daab6c0e4180 Mon Sep 17 00:00:00 2001 From: Marco Antonio Ghiani Date: Wed, 11 Sep 2024 15:11:31 +0200 Subject: [PATCH 19/52] [One Discover] Add row indicators for log documents (#190676) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 📓 Summary Closes #190457 This change extracts the logic around the logs document controls/indicator from Logs Explorer and registers the same controls in Discover through the extension point added in #188762. The controls are registered only for the `logs-data-source-profile` contextual profile. https://github.com/user-attachments/assets/40adfb19-357f-46e1-9d69-fc9c0860c832 ## 👣 Next steps - [ ] https://github.com/elastic/kibana/issues/190670 - [ ] https://github.com/elastic/kibana/issues/190460 --------- Co-authored-by: Marco Antonio Ghiani Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-discover-utils/index.ts | 2 + .../degraded_docs_control.tsx | 121 ++++++++++++++++++ .../custom_control_columns/index.ts | 11 ++ .../stacktrace_control.tsx | 79 ++++++++++++ .../custom_control_columns/types.ts | 36 ++++++ .../kbn-discover-utils/src/field_constants.ts | 2 +- packages/kbn-discover-utils/src/index.ts | 2 + packages/kbn-discover-utils/src/types.ts | 6 + .../src/utils/get_stack_trace_fields.ts | 27 ++++ .../kbn-discover-utils/src/utils/index.ts | 2 + packages/kbn-discover-utils/tsconfig.json | 2 +- packages/kbn-esql-utils/README.md | 2 +- packages/kbn-esql-utils/index.ts | 2 +- packages/kbn-esql-utils/src/index.ts | 2 +- .../src/utils/query_parsing_helpers.test.ts | 8 +- .../src/utils/query_parsing_helpers.ts | 2 +- .../__mocks__/external_control_columns.tsx | 3 +- .../get_additional_row_control_columns.ts | 2 +- .../row_control_column.test.tsx | 7 +- .../row_control_column.tsx | 14 +- .../row_menu_control_column.test.tsx | 7 +- .../row_menu_control_column.tsx | 2 +- .../src/components/data_table.tsx | 2 +- packages/kbn-unified-data-table/src/types.ts | 34 +---- .../components/layout/discover_documents.tsx | 1 + .../discover_grid/discover_grid.tsx | 16 ++- .../example_data_source_profile/profile.tsx | 4 +- .../get_row_additional_leading_controls.ts | 32 +++++ .../logs_data_source_profile/profile.test.ts | 14 ++ .../logs_data_source_profile/profile.ts | 2 + .../public/context_awareness/types.ts | 2 + .../dashboard/group2/dashboard_filter_bar.ts | 2 +- .../apps/discover/esql/_esql_view.ts | 2 + .../group2_data_grid1/_data_grid_doc_table.ts | 4 +- .../management/data_views/_scripted_fields.ts | 2 +- .../public/components/common/translations.tsx | 43 ------- .../customizations/custom_control_column.tsx | 92 +------------ .../public/utils/get_stack_trace.ts | 21 --- .../translations/translations/fr-FR.json | 4 - .../translations/translations/ja-JP.json | 4 - .../translations/translations/zh-CN.json | 4 - .../common/discover/esql/_esql_view.ts | 2 + .../discover/group2/_data_grid_doc_table.ts | 4 +- 43 files changed, 406 insertions(+), 226 deletions(-) create mode 100644 packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx create mode 100644 packages/kbn-discover-utils/src/components/custom_control_columns/index.ts create mode 100644 packages/kbn-discover-utils/src/components/custom_control_columns/stacktrace_control.tsx create mode 100644 packages/kbn-discover-utils/src/components/custom_control_columns/types.ts create mode 100644 packages/kbn-discover-utils/src/utils/get_stack_trace_fields.ts create mode 100644 src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/accessors/get_row_additional_leading_controls.ts delete mode 100644 x-pack/plugins/observability_solution/logs_explorer/public/utils/get_stack_trace.ts diff --git a/packages/kbn-discover-utils/index.ts b/packages/kbn-discover-utils/index.ts index fda3fbdd48ad0..ba7e832b8f1c6 100644 --- a/packages/kbn-discover-utils/index.ts +++ b/packages/kbn-discover-utils/index.ts @@ -34,6 +34,8 @@ export { buildDataTableRecord, buildDataTableRecordList, createLogsContextService, + createDegradedDocsControl, + createStacktraceControl, fieldConstants, formatFieldValue, formatHit, diff --git a/packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx b/packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx new file mode 100644 index 0000000000000..be4dbe3027214 --- /dev/null +++ b/packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx @@ -0,0 +1,121 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { EuiCode, EuiSpacer } from '@elastic/eui'; +import { + RowControlColumn, + RowControlComponent, + RowControlProps, + RowControlRowProps, +} from './types'; +import { DEGRADED_DOCS_FIELDS } from '../../field_constants'; + +interface DegradedDocsControlProps extends Partial { + enabled?: boolean; +} + +/** + * Degraded docs control factory function. + * @param props Optional props for the generated Control component, useful to override onClick, etc + */ +export const createDegradedDocsControl = (props?: DegradedDocsControlProps): RowControlColumn => ({ + id: 'connectedDegradedDocs', + headerAriaLabel: actionsHeaderAriaLabelDegradedAction, + renderControl: (Control, rowProps) => { + return ; + }, +}); + +const actionsHeaderAriaLabelDegradedAction = i18n.translate( + 'discover.customControl.degradedDocArialLabel', + { defaultMessage: 'Access to degraded docs' } +); + +const degradedDocButtonLabelWhenPresent = i18n.translate( + 'discover.customControl.degradedDocPresent', + { + defaultMessage: + "This document couldn't be parsed correctly. Not all fields are properly populated", + } +); + +const degradedDocButtonLabelWhenNotPresent = i18n.translate( + 'discover.customControl.degradedDocNotPresent', + { defaultMessage: 'All fields in this document were parsed correctly' } +); + +const degradedDocButtonLabelWhenDisabled = i18n.translate( + 'discover.customControl.degradedDocDisabled', + { + defaultMessage: + 'Degraded document field detection is currently disabled for this search. To enable it, include the METADATA directive for the `_ignored` field in your ES|QL query. For example:', + } +); + +const DegradedDocs = ({ + Control, + enabled = true, + rowProps: { record }, + ...props +}: { + Control: RowControlComponent; + rowProps: RowControlRowProps; +} & DegradedDocsControlProps) => { + const isDegradedDocumentExists = DEGRADED_DOCS_FIELDS.some( + (field) => field in record.raw && record.raw[field] !== null + ); + + if (!enabled) { + const codeSample = 'FROM logs-* METADATA _ignored'; + + const tooltipContent = ( +
+ {degradedDocButtonLabelWhenDisabled} + + {codeSample} +
+ ); + + return ( + + ); + } + + return isDegradedDocumentExists ? ( + + ) : ( + + ); +}; diff --git a/packages/kbn-discover-utils/src/components/custom_control_columns/index.ts b/packages/kbn-discover-utils/src/components/custom_control_columns/index.ts new file mode 100644 index 0000000000000..339c1047e69a4 --- /dev/null +++ b/packages/kbn-discover-utils/src/components/custom_control_columns/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { createDegradedDocsControl } from './degraded_docs_control'; +export { createStacktraceControl } from './stacktrace_control'; diff --git a/packages/kbn-discover-utils/src/components/custom_control_columns/stacktrace_control.tsx b/packages/kbn-discover-utils/src/components/custom_control_columns/stacktrace_control.tsx new file mode 100644 index 0000000000000..48703e0ab269d --- /dev/null +++ b/packages/kbn-discover-utils/src/components/custom_control_columns/stacktrace_control.tsx @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { + RowControlColumn, + RowControlComponent, + RowControlProps, + RowControlRowProps, +} from './types'; +import { LogDocument } from '../../data_types'; +import { getStacktraceFields } from '../../utils/get_stack_trace_fields'; + +/** + * Stacktrace control factory function. + * @param props Optional props for the generated Control component, useful to override onClick, etc + */ +export const createStacktraceControl = (props?: Partial): RowControlColumn => ({ + id: 'connectedStacktraceDocs', + headerAriaLabel: actionsHeaderAriaLabelStacktraceAction, + renderControl: (Control, rowProps) => { + return ; + }, +}); + +const actionsHeaderAriaLabelStacktraceAction = i18n.translate( + 'discover.customControl.stacktraceArialLabel', + { defaultMessage: 'Access to available stacktraces' } +); + +const stacktraceAvailableControlButton = i18n.translate( + 'discover.customControl.stacktrace.available', + { defaultMessage: 'Stacktraces available' } +); + +const stacktraceNotAvailableControlButton = i18n.translate( + 'discover.customControl.stacktrace.notAvailable', + { defaultMessage: 'Stacktraces not available' } +); + +const Stacktrace = ({ + Control, + rowProps: { record }, + ...props +}: { + Control: RowControlComponent; + rowProps: RowControlRowProps; +} & Partial) => { + const stacktrace = getStacktraceFields(record as LogDocument); + const hasValue = Object.values(stacktrace).some(Boolean); + + return hasValue ? ( + + ) : ( + + ); +}; diff --git a/packages/kbn-discover-utils/src/components/custom_control_columns/types.ts b/packages/kbn-discover-utils/src/components/custom_control_columns/types.ts new file mode 100644 index 0000000000000..601cd9ebdcfc0 --- /dev/null +++ b/packages/kbn-discover-utils/src/components/custom_control_columns/types.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { EuiButtonIconProps, EuiDataGridControlColumn, IconType } from '@elastic/eui'; +import React, { FC, ReactElement } from 'react'; +import { DataTableRecord } from '../../types'; + +export interface RowControlRowProps { + rowIndex: number; + record: DataTableRecord; +} + +export interface RowControlProps { + 'data-test-subj'?: string; + color?: EuiButtonIconProps['color']; + disabled?: boolean; + label: string; + iconType: IconType; + onClick: ((props: RowControlRowProps) => void) | undefined; + tooltipContent?: React.ReactNode; +} + +export type RowControlComponent = FC; + +export interface RowControlColumn { + id: string; + headerAriaLabel: string; + headerCellRender?: EuiDataGridControlColumn['headerCellRender']; + renderControl: (Control: RowControlComponent, props: RowControlRowProps) => ReactElement; +} diff --git a/packages/kbn-discover-utils/src/field_constants.ts b/packages/kbn-discover-utils/src/field_constants.ts index 5dcbb36db3dc0..cbc9a0d112b07 100644 --- a/packages/kbn-discover-utils/src/field_constants.ts +++ b/packages/kbn-discover-utils/src/field_constants.ts @@ -35,7 +35,7 @@ export const CONTAINER_NAME_FIELD = 'container.name'; export const CONTAINER_ID_FIELD = 'container.id'; // Degraded Docs -export const DEGRADED_DOCS_FIELD = 'ignored_field_values'; +export const DEGRADED_DOCS_FIELDS = ['ignored_field_values', '_ignored'] as const; // Error Stacktrace export const ERROR_STACK_TRACE = 'error.stack_trace'; diff --git a/packages/kbn-discover-utils/src/index.ts b/packages/kbn-discover-utils/src/index.ts index 615136770cf6e..8fe9a9418c9fe 100644 --- a/packages/kbn-discover-utils/src/index.ts +++ b/packages/kbn-discover-utils/src/index.ts @@ -12,3 +12,5 @@ export * as fieldConstants from './field_constants'; export * from './hooks'; export * from './utils'; export * from './data_types'; + +export * from './components/custom_control_columns'; diff --git a/packages/kbn-discover-utils/src/types.ts b/packages/kbn-discover-utils/src/types.ts index dc720c02dd4ea..63297edfe7643 100644 --- a/packages/kbn-discover-utils/src/types.ts +++ b/packages/kbn-discover-utils/src/types.ts @@ -11,6 +11,12 @@ import type { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey' import type { DatatableColumnMeta } from '@kbn/expressions-plugin/common'; export type { IgnoredReason, ShouldShowFieldInTableHandler } from './utils'; +export type { + RowControlColumn, + RowControlComponent, + RowControlProps, + RowControlRowProps, +} from './components/custom_control_columns/types'; type DiscoverSearchHit = SearchHit>; diff --git a/packages/kbn-discover-utils/src/utils/get_stack_trace_fields.ts b/packages/kbn-discover-utils/src/utils/get_stack_trace_fields.ts new file mode 100644 index 0000000000000..15a2b345be615 --- /dev/null +++ b/packages/kbn-discover-utils/src/utils/get_stack_trace_fields.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { getFieldFromDoc, LogDocument, StackTraceFields } from '..'; +import { + ERROR_EXCEPTION_STACKTRACE, + ERROR_LOG_STACKTRACE, + ERROR_STACK_TRACE, +} from '../field_constants'; + +export const getStacktraceFields = (doc: LogDocument): StackTraceFields => { + const errorStackTrace = getFieldFromDoc(doc, ERROR_STACK_TRACE); + const errorExceptionStackTrace = getFieldFromDoc(doc, ERROR_EXCEPTION_STACKTRACE); + const errorLogStackTrace = getFieldFromDoc(doc, ERROR_LOG_STACKTRACE); + + return { + [ERROR_STACK_TRACE]: errorStackTrace, + [ERROR_EXCEPTION_STACKTRACE]: errorExceptionStackTrace, + [ERROR_LOG_STACKTRACE]: errorLogStackTrace, + }; +}; diff --git a/packages/kbn-discover-utils/src/utils/index.ts b/packages/kbn-discover-utils/src/utils/index.ts index e408d7eb1c163..201cd10fb4dee 100644 --- a/packages/kbn-discover-utils/src/utils/index.ts +++ b/packages/kbn-discover-utils/src/utils/index.ts @@ -8,6 +8,7 @@ */ export * from './build_data_record'; +export * from './calc_field_counts'; export * from './format_hit'; export * from './format_value'; export * from './get_doc_id'; @@ -15,6 +16,7 @@ export * from './get_ignored_reason'; export * from './get_log_document_overview'; export * from './get_message_field_with_fallbacks'; export * from './get_should_show_field_handler'; +export * from './get_stack_trace_fields'; export * from './nested_fields'; export * from './get_field_value'; export * from './calc_field_counts'; diff --git a/packages/kbn-discover-utils/tsconfig.json b/packages/kbn-discover-utils/tsconfig.json index 5a5fe4c69636e..ef9ccaa7ab9b7 100644 --- a/packages/kbn-discover-utils/tsconfig.json +++ b/packages/kbn-discover-utils/tsconfig.json @@ -11,7 +11,7 @@ }, "include": [ "**/*.ts", - "**/*.tsx", + "**/*.tsx" ], "exclude": [ "target/**/*" diff --git a/packages/kbn-esql-utils/README.md b/packages/kbn-esql-utils/README.md index 9b688555ea210..e12e015b2f334 100644 --- a/packages/kbn-esql-utils/README.md +++ b/packages/kbn-esql-utils/README.md @@ -8,4 +8,4 @@ This package contains utilities for ES|QL. - *removeDropCommandsFromESQLQuery*: Use this function to remove all the occurences of the `drop` command from the query. - *appendToESQLQuery*: Use this function to append more pipes in an existing ES|QL query. It adds the additional commands in a new line. - *appendWhereClauseToESQLQuery*: Use this function to append where clause in an existing query. -- *retieveMetadataColumns*: Use this function to get if there is a metadata option in the from command, and retrieve the columns if so +- *retrieveMetadataColumns*: Use this function to get if there is a metadata option in the from command, and retrieve the columns if so diff --git a/packages/kbn-esql-utils/index.ts b/packages/kbn-esql-utils/index.ts index dce93150f0fac..4221bced60d04 100644 --- a/packages/kbn-esql-utils/index.ts +++ b/packages/kbn-esql-utils/index.ts @@ -27,7 +27,7 @@ export { hasStartEndParams, prettifyQuery, isQueryWrappedByPipes, - retieveMetadataColumns, + retrieveMetadataColumns, TextBasedLanguages, } from './src'; diff --git a/packages/kbn-esql-utils/src/index.ts b/packages/kbn-esql-utils/src/index.ts index c214574099e46..95332bbd10328 100644 --- a/packages/kbn-esql-utils/src/index.ts +++ b/packages/kbn-esql-utils/src/index.ts @@ -19,7 +19,7 @@ export { getTimeFieldFromESQLQuery, prettifyQuery, isQueryWrappedByPipes, - retieveMetadataColumns, + retrieveMetadataColumns, } from './utils/query_parsing_helpers'; export { appendToESQLQuery, appendWhereClauseToESQLQuery } from './utils/append_to_query'; export { diff --git a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts index 3c56856d1abf6..47096f3421d76 100644 --- a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts +++ b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts @@ -15,7 +15,7 @@ import { getTimeFieldFromESQLQuery, prettifyQuery, isQueryWrappedByPipes, - retieveMetadataColumns, + retrieveMetadataColumns, } from './query_parsing_helpers'; describe('esql query helpers', () => { @@ -217,16 +217,16 @@ describe('esql query helpers', () => { }); }); - describe('retieveMetadataColumns', () => { + describe('retrieveMetadataColumns', () => { it('should return metadata columns if they exist', () => { - expect(retieveMetadataColumns('from a metadata _id, _ignored | eval b = 1')).toStrictEqual([ + expect(retrieveMetadataColumns('from a metadata _id, _ignored | eval b = 1')).toStrictEqual([ '_id', '_ignored', ]); }); it('should return empty columns if metadata doesnt exist', () => { - expect(retieveMetadataColumns('from a | eval b = 1')).toStrictEqual([]); + expect(retrieveMetadataColumns('from a | eval b = 1')).toStrictEqual([]); }); }); }); diff --git a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts index e0c67db41864b..734acac70fd7d 100644 --- a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts +++ b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts @@ -126,7 +126,7 @@ export const prettifyQuery = (query: string, isWrapped: boolean): string => { return BasicPrettyPrinter.print(ast, { multiline: !isWrapped }); }; -export const retieveMetadataColumns = (esql: string): string[] => { +export const retrieveMetadataColumns = (esql: string): string[] => { const { ast } = getAstAndSyntaxErrors(esql); const options: ESQLCommandOption[] = []; diff --git a/packages/kbn-unified-data-table/__mocks__/external_control_columns.tsx b/packages/kbn-unified-data-table/__mocks__/external_control_columns.tsx index 8da8aeff5357f..0d787cde89bef 100644 --- a/packages/kbn-unified-data-table/__mocks__/external_control_columns.tsx +++ b/packages/kbn-unified-data-table/__mocks__/external_control_columns.tsx @@ -18,7 +18,7 @@ import { EuiSpacer, EuiDataGridControlColumn, } from '@elastic/eui'; -import type { RowControlColumn } from '../src/types'; +import { RowControlColumn } from '@kbn/discover-utils'; const SelectionHeaderCell = () => { return ( @@ -128,6 +128,7 @@ export const mockRowAdditionalLeadingControls = ['visBarVerticalStacked', 'heart { alert(`Example "${iconType}" control clicked. Row index: ${rowProps.rowIndex}`); diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/get_additional_row_control_columns.ts b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/get_additional_row_control_columns.ts index 110535f9f7bde..98746de31701a 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/get_additional_row_control_columns.ts +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/get_additional_row_control_columns.ts @@ -8,7 +8,7 @@ */ import type { EuiDataGridControlColumn } from '@elastic/eui'; -import type { RowControlColumn } from '../../../types'; +import { RowControlColumn } from '@kbn/discover-utils'; import { getRowControlColumn } from './row_control_column'; import { getRowMenuControlColumn } from './row_menu_control_column'; diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.test.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.test.tsx index 77941d8573e0c..0cd04436a528a 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.test.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.test.tsx @@ -25,7 +25,12 @@ describe('getRowControlColumn', () => { id: 'test_row_control', headerAriaLabel: 'row control', renderControl: jest.fn((Control, rowProps) => ( - + )), }; const rowControlColumn = getRowControlColumn(props); diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx index b345411e181c7..a1adb1e9a0d76 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx @@ -15,8 +15,8 @@ import { EuiScreenReaderOnly, EuiToolTip, } from '@elastic/eui'; +import { RowControlColumn, RowControlProps } from '@kbn/discover-utils'; import { DataTableRowControl, Size } from '../../data_table_row_control'; -import type { RowControlColumn, RowControlProps } from '../../../types'; import { DEFAULT_CONTROL_COLUMN_WIDTH } from '../../../constants'; import { useControlColumn } from '../../../hooks/use_control_column'; @@ -30,10 +30,18 @@ export const RowControlCell = ({ const Control: React.FC = useMemo( () => - ({ 'data-test-subj': dataTestSubj, color, disabled, label, iconType, onClick }) => { + ({ + 'data-test-subj': dataTestSubj, + color, + disabled, + iconType, + label, + onClick, + tooltipContent, + }) => { return ( - + { id: 'test_row_menu_control', headerAriaLabel: 'row control', renderControl: jest.fn((Control, rowProps) => ( - + )), }; const rowMenuControlColumn = getRowMenuControlColumn([ diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx index ca60c94e68ca1..34d4118956c7a 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx @@ -20,8 +20,8 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; +import { RowControlColumn, RowControlProps } from '@kbn/discover-utils'; import { DataTableRowControl, Size } from '../../data_table_row_control'; -import type { RowControlColumn, RowControlProps } from '../../../types'; import { DEFAULT_CONTROL_COLUMN_WIDTH } from '../../../constants'; import { useControlColumn } from '../../../hooks/use_control_column'; diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 87931e96c4523..556e445eda4b9 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -40,6 +40,7 @@ import type { ToastsStart, IUiSettingsClient } from '@kbn/core/public'; import type { Serializable } from '@kbn/utility-types'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import { + RowControlColumn, getShouldShowFieldHandler, canPrependTimeFieldColumn, getVisibleColumns, @@ -57,7 +58,6 @@ import { DataTableColumnsMeta, CustomCellRenderer, CustomGridColumnsConfiguration, - RowControlColumn, } from '../types'; import { getDisplayedColumns } from '../utils/columns'; import { convertValueToString } from '../utils/convert_value_to_string'; diff --git a/packages/kbn-unified-data-table/src/types.ts b/packages/kbn-unified-data-table/src/types.ts index 77feaf8a5ef44..ca5f4f8a83882 100644 --- a/packages/kbn-unified-data-table/src/types.ts +++ b/packages/kbn-unified-data-table/src/types.ts @@ -7,18 +7,11 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { ReactElement, FC } from 'react'; -import type { - EuiDataGridCellValueElementProps, - EuiDataGridColumn, - IconType, - EuiButtonIconProps, -} from '@elastic/eui'; +import type { ReactElement } from 'react'; +import type { EuiDataGridCellValueElementProps, EuiDataGridColumn } from '@elastic/eui'; import type { DataTableRecord } from '@kbn/discover-utils/src/types'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; -import type { EuiDataGridControlColumn } from '@elastic/eui/src/components/datagrid/data_grid_types'; - export type { DataTableColumnsMeta } from '@kbn/discover-utils/src/types'; export type { DataGridDensity } from './constants'; @@ -67,26 +60,3 @@ export type CustomGridColumnsConfiguration = Record< string, (props: CustomGridColumnProps) => EuiDataGridColumn >; - -export interface RowControlRowProps { - rowIndex: number; - record: DataTableRecord; -} - -export interface RowControlProps { - 'data-test-subj'?: string; - color?: EuiButtonIconProps['color']; - disabled?: boolean; - label: string; - iconType: IconType; - onClick: ((props: RowControlRowProps) => void) | undefined; -} - -export type RowControlComponent = FC; - -export interface RowControlColumn { - id: string; - headerAriaLabel: string; - headerCellRender?: EuiDataGridControlColumn['headerCellRender']; - renderControl: (Control: RowControlComponent, props: RowControlRowProps) => ReactElement; -} diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index c9d6124a8d1c2..6d739df33b8d1 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -493,6 +493,7 @@ function DiscoverDocumentsComponent({ additionalFieldGroups={additionalFieldGroups} dataGridDensityState={density} onUpdateDataGridDensity={onUpdateDensity} + query={query} cellActionsTriggerId={DISCOVER_CELL_ACTIONS_TRIGGER.id} cellActionsMetadata={cellActionsMetadata} cellActionsHandling="append" diff --git a/src/plugins/discover/public/components/discover_grid/discover_grid.tsx b/src/plugins/discover/public/components/discover_grid/discover_grid.tsx index 48f54867772f7..0fcb775d02184 100644 --- a/src/plugins/discover/public/components/discover_grid/discover_grid.tsx +++ b/src/plugins/discover/public/components/discover_grid/discover_grid.tsx @@ -14,13 +14,19 @@ import { type UnifiedDataTableProps, } from '@kbn/unified-data-table'; import { useProfileAccessor } from '../../context_awareness'; +import { DiscoverAppState } from '../../application/main/state_management/discover_app_state_container'; + +export interface DiscoverGridProps extends UnifiedDataTableProps { + query?: DiscoverAppState['query']; +} /** * Customized version of the UnifiedDataTable * @constructor */ -export const DiscoverGrid: React.FC = ({ +export const DiscoverGrid: React.FC = ({ rowAdditionalLeadingControls: customRowAdditionalLeadingControls, + query, ...props }) => { const getRowIndicatorProvider = useProfileAccessor('getRowIndicatorProvider'); @@ -34,8 +40,14 @@ export const DiscoverGrid: React.FC = ({ const rowAdditionalLeadingControls = useMemo(() => { return getRowAdditionalLeadingControlsAccessor(() => customRowAdditionalLeadingControls)({ dataView: props.dataView, + query, }); - }, [getRowAdditionalLeadingControlsAccessor, props.dataView, customRowAdditionalLeadingControls]); + }, [ + getRowAdditionalLeadingControlsAccessor, + props.dataView, + query, + customRowAdditionalLeadingControls, + ]); return ( { alert(`Example "${iconType}" control clicked. Row index: ${rowProps.rowIndex}`); diff --git a/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/accessors/get_row_additional_leading_controls.ts b/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/accessors/get_row_additional_leading_controls.ts new file mode 100644 index 0000000000000..d91f1b4dc2b83 --- /dev/null +++ b/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/accessors/get_row_additional_leading_controls.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { createDegradedDocsControl, createStacktraceControl } from '@kbn/discover-utils'; +import { retrieveMetadataColumns } from '@kbn/esql-utils'; +import { AggregateQuery, isOfAggregateQueryType } from '@kbn/es-query'; +import type { DataSourceProfileProvider } from '../../../profiles'; + +export const getRowAdditionalLeadingControls: DataSourceProfileProvider['profile']['getRowAdditionalLeadingControls'] = + (prev) => (params) => { + const additionalControls = prev(params) || []; + const { query } = params; + + const isDegradedDocsControlEnabled = isOfAggregateQueryType(query) + ? queryContainsMetadataIgnored(query) + : true; + + return [ + ...additionalControls, + createDegradedDocsControl({ enabled: isDegradedDocsControlEnabled }), + createStacktraceControl(), + ]; + }; + +const queryContainsMetadataIgnored = (query: AggregateQuery) => + retrieveMetadataColumns(query.esql).includes('_ignored'); diff --git a/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/profile.test.ts b/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/profile.test.ts index fddc72178c0a8..e6ed227be8763 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/profile.test.ts +++ b/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/profile.test.ts @@ -160,4 +160,18 @@ describe('logsDataSourceProfileProvider', () => { expect(cellRenderers?.['log_level.keyword']).toBeDefined(); }); }); + + describe('getRowAdditionalLeadingControls', () => { + it('should return the passed additional controls', () => { + const getRowAdditionalLeadingControls = + logsDataSourceProfileProvider.profile.getRowAdditionalLeadingControls?.(() => undefined); + const rowAdditionalLeadingControls = getRowAdditionalLeadingControls?.({ + dataView: dataViewWithLogLevel, + }); + + expect(rowAdditionalLeadingControls).toHaveLength(2); + expect(rowAdditionalLeadingControls?.[0].id).toBe('connectedDegradedDocs'); + expect(rowAdditionalLeadingControls?.[1].id).toBe('connectedStacktraceDocs'); + }); + }); }); diff --git a/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/profile.ts b/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/profile.ts index d548aaa3db98c..f4f0f06e37ad0 100644 --- a/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/profile.ts +++ b/src/plugins/discover/public/context_awareness/profile_providers/logs_data_source_profile/profile.ts @@ -12,6 +12,7 @@ import { ProfileProviderServices } from '../profile_provider_services'; import { getRowIndicatorProvider } from './accessors'; import { extractIndexPatternFrom } from '../extract_index_pattern_from'; import { getCellRenderers } from './accessors'; +import { getRowAdditionalLeadingControls } from './accessors/get_row_additional_leading_controls'; export const createLogsDataSourceProfileProvider = ( services: ProfileProviderServices @@ -20,6 +21,7 @@ export const createLogsDataSourceProfileProvider = ( profile: { getRowIndicatorProvider, getCellRenderers, + getRowAdditionalLeadingControls, }, resolve: (params) => { const indexPattern = extractIndexPatternFrom(params); diff --git a/src/plugins/discover/public/context_awareness/types.ts b/src/plugins/discover/public/context_awareness/types.ts index 82cbbf01e8aa3..03d2ac1f945e7 100644 --- a/src/plugins/discover/public/context_awareness/types.ts +++ b/src/plugins/discover/public/context_awareness/types.ts @@ -17,6 +17,7 @@ import type { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; import type { OmitIndexSignature } from 'type-fest'; import type { Trigger } from '@kbn/ui-actions-plugin/public'; import type { DiscoverDataSource } from '../../common/data_sources'; +import { DiscoverAppState } from '../application/main/state_management/discover_app_state_container'; export interface DocViewerExtension { title: string | undefined; @@ -47,6 +48,7 @@ export interface DefaultAppStateExtension { export interface RowControlsExtensionParams { dataView: DataView; + query?: DiscoverAppState['query']; } export const DISCOVER_CELL_ACTIONS_TRIGGER: Trigger = { id: 'DISCOVER_CELL_ACTIONS_TRIGGER_ID' }; diff --git a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts index 591647bedc65d..e1935a0839966 100644 --- a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts +++ b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts @@ -205,7 +205,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { if (isLegacyDefault) { await testSubjects.click('docTableCellFilter'); } else { - await dataGrid.clickCellFilterForButton(1, 3); + await dataGrid.clickCellFilterForButtonExcludingControlColumns(1, 1); } const filterCount = await filterBar.getFilterCount(); expect(filterCount).to.equal(1); diff --git a/test/functional/apps/discover/esql/_esql_view.ts b/test/functional/apps/discover/esql/_esql_view.ts index f8871ded33fcf..5ac5a0d0e0c48 100644 --- a/test/functional/apps/discover/esql/_esql_view.ts +++ b/test/functional/apps/discover/esql/_esql_view.ts @@ -201,6 +201,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataGrid.getHeaders()).to.eql([ 'Select column', 'Control column', + 'Access to degraded docs', + 'Access to available stacktraces', 'Numberbytes', 'machine.ram_range', ]); diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts index b8743f65e73ce..c2ae5c30bf86f 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts @@ -84,7 +84,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return text === 'Sep 22, 2015 @ 23:50:13.253'; }); - await dataGrid.clickCellExpandButton(0, 3); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 1); let expandDocId = ''; await retry.waitForWithTimeout('expandDocId to be valid', 5000, async () => { @@ -127,7 +127,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug(`row document timestamp: ${text}`); return text === 'Sep 22, 2015 @ 23:50:13.253'; }); - await dataGrid.clickCellExpandButton(0, 3); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 1); let expandDocId = ''; await retry.waitForWithTimeout('expandDocId to be valid', 5000, async () => { diff --git a/test/functional/apps/management/data_views/_scripted_fields.ts b/test/functional/apps/management/data_views/_scripted_fields.ts index b5697ab30eae6..172537bf4e73a 100644 --- a/test/functional/apps/management/data_views/_scripted_fields.ts +++ b/test/functional/apps/management/data_views/_scripted_fields.ts @@ -487,7 +487,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should filter by scripted field value in Discover', async function () { await PageObjects.header.waitUntilLoadingHasFinished(); - await dataGrid.clickCellFilterForButton(0, 3); + await dataGrid.clickCellFilterForButtonExcludingControlColumns(0, 1); await PageObjects.header.waitUntilLoadingHasFinished(); await retry.try(async function () { diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/translations.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/components/common/translations.tsx index 826fcdab65915..2ba31b3e94d86 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/translations.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/components/common/translations.tsx @@ -96,46 +96,3 @@ export const resourceHeaderTooltipParagraph = i18n.translate( defaultMessage: "Fields that provide information on the document's source, such as:", } ); - -export const actionsHeaderAriaLabelDegradedAction = i18n.translate( - 'xpack.logsExplorer.dataTable.controlColumnHeader.degradedDocArialLabel', - { - defaultMessage: 'Access to degraded docs', - } -); - -export const actionsHeaderAriaLabelStacktraceAction = i18n.translate( - 'xpack.logsExplorer.dataTable.controlColumnHeader.stacktraceArialLabel', - { - defaultMessage: 'Access to available stacktraces', - } -); - -export const degradedDocButtonLabelWhenPresent = i18n.translate( - 'xpack.logsExplorer.dataTable.controlColumn.actions.button.degradedDocPresent', - { - defaultMessage: - "This document couldn't be parsed correctly. Not all fields are properly populated", - } -); - -export const degradedDocButtonLabelWhenNotPresent = i18n.translate( - 'xpack.logsExplorer.dataTable.controlColumn.actions.button.degradedDocNotPresent', - { - defaultMessage: 'All fields in this document were parsed correctly', - } -); - -export const stacktraceAvailableControlButton = i18n.translate( - 'xpack.logsExplorer.dataTable.controlColumn.actions.button.stacktrace.available', - { - defaultMessage: 'Stacktraces available', - } -); - -export const stacktraceNotAvailableControlButton = i18n.translate( - 'xpack.logsExplorer.dataTable.controlColumn.actions.button.stacktrace.notAvailable', - { - defaultMessage: 'Stacktraces not available', - } -); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_control_column.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_control_column.tsx index 89bc38482c803..4637d33194743 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_control_column.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_control_column.tsx @@ -5,96 +5,10 @@ * 2.0. */ -import React from 'react'; -import { LogDocument } from '@kbn/discover-utils/src'; -import type { - UnifiedDataTableProps, - RowControlComponent, - RowControlRowProps, -} from '@kbn/unified-data-table'; -import { - actionsHeaderAriaLabelDegradedAction, - actionsHeaderAriaLabelStacktraceAction, - degradedDocButtonLabelWhenNotPresent, - degradedDocButtonLabelWhenPresent, - stacktraceAvailableControlButton, - stacktraceNotAvailableControlButton, -} from '../components/common/translations'; -import * as constants from '../../common/constants'; -import { getStacktraceFields } from '../utils/get_stack_trace'; - -const DegradedDocs = ({ - Control, - rowProps: { record }, -}: { - Control: RowControlComponent; - rowProps: RowControlRowProps; -}) => { - const isDegradedDocumentExists = constants.DEGRADED_DOCS_FIELD in record.raw; - - return isDegradedDocumentExists ? ( - - ) : ( - - ); -}; - -const Stacktrace = ({ - Control, - rowProps: { record }, -}: { - Control: RowControlComponent; - rowProps: RowControlRowProps; -}) => { - const stacktrace = getStacktraceFields(record as LogDocument); - const hasValue = Object.values(stacktrace).some((value) => value); - - return hasValue ? ( - - ) : ( - - ); -}; +import { createDegradedDocsControl, createStacktraceControl } from '@kbn/discover-utils'; +import { type UnifiedDataTableProps } from '@kbn/unified-data-table'; export const getRowAdditionalControlColumns = (): UnifiedDataTableProps['rowAdditionalLeadingControls'] => { - return [ - { - id: 'connectedDegradedDocs', - headerAriaLabel: actionsHeaderAriaLabelDegradedAction, - renderControl: (Control, rowProps) => { - return ; - }, - }, - { - id: 'connectedStacktraceDocs', - headerAriaLabel: actionsHeaderAriaLabelStacktraceAction, - renderControl: (Control, rowProps) => { - return ; - }, - }, - ]; + return [createDegradedDocsControl(), createStacktraceControl()]; }; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_stack_trace.ts b/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_stack_trace.ts deleted file mode 100644 index ac264af2732aa..0000000000000 --- a/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_stack_trace.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { getFieldFromDoc, LogDocument, StackTraceFields } from '@kbn/discover-utils/src'; -import * as constants from '../../common/constants'; - -export const getStacktraceFields = (doc: LogDocument): StackTraceFields => { - const errorStackTrace = getFieldFromDoc(doc, constants.ERROR_STACK_TRACE); - const errorExceptionStackTrace = getFieldFromDoc(doc, constants.ERROR_EXCEPTION_STACKTRACE); - const errorLogStackTrace = getFieldFromDoc(doc, constants.ERROR_LOG_STACKTRACE); - - return { - [constants.ERROR_STACK_TRACE]: errorStackTrace, - [constants.ERROR_EXCEPTION_STACKTRACE]: errorExceptionStackTrace, - [constants.ERROR_LOG_STACKTRACE]: errorLogStackTrace, - }; -}; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 1a11dc831b665..3f3a6e8b1fef9 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -26216,10 +26216,6 @@ "xpack.logsExplorer.dataSourceSelector.sortOrders": "Sens de tri", "xpack.logsExplorer.dataSourceSelector.TryEsql": "Langue : ES|QL", "xpack.logsExplorer.dataSourceSelector.uncategorized": "Non catégorisé", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.degradedDocNotPresent": "Tous les champs de ce document ont été analysés correctement", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.degradedDocPresent": "Ce document n'a pas pu être analysé correctement. Tous les champs n'ont pas été remplis correctement", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.stacktrace.available": "Traces d'appel disponibles", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.stacktrace.notAvailable": "Traces d'appel indisponibles", "xpack.logsExplorer.dataTable.header.content.tooltip.paragraph1": "Affiche le {logLevel} du document et les champs {message}.", "xpack.logsExplorer.dataTable.header.content.tooltip.paragraph2": "Lorsque le champ de message est vide, l'une des informations suivantes s'affiche :", "xpack.logsExplorer.dataTable.header.popover.content": "Contenu", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 8b9ea39876c83..017ceeaa66c08 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -26205,10 +26205,6 @@ "xpack.logsExplorer.dataSourceSelector.sortOrders": "並べ替え方向", "xpack.logsExplorer.dataSourceSelector.TryEsql": "言語:ES|QL", "xpack.logsExplorer.dataSourceSelector.uncategorized": "未分類", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.degradedDocNotPresent": "このドキュメントのすべてのフィールドは正しく解析されました", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.degradedDocPresent": "このドキュメントを正しく解析できませんでした。一部のフィールドが正しく入力されていません", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.stacktrace.available": "スタックトレースがあります", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.stacktrace.notAvailable": "スタックトレースがありません", "xpack.logsExplorer.dataTable.header.content.tooltip.paragraph1": "ドキュメントの{logLevel}と{message}フィールドを表示します。", "xpack.logsExplorer.dataTable.header.content.tooltip.paragraph2": "メッセージフィールドが空のときには、次のいずれかが表示されます。", "xpack.logsExplorer.dataTable.header.popover.content": "コンテンツ", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 7186bd6c5b6d9..7a0121a444e71 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -26237,10 +26237,6 @@ "xpack.logsExplorer.dataSourceSelector.sortOrders": "排序方向", "xpack.logsExplorer.dataSourceSelector.TryEsql": "语言:ES|QL", "xpack.logsExplorer.dataSourceSelector.uncategorized": "未分类", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.degradedDocNotPresent": "此文档中的所有字段均进行了正确解析", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.degradedDocPresent": "无法正确解析此文档。并非所有字段都进行了正确填充", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.stacktrace.available": "堆栈跟踪可用", - "xpack.logsExplorer.dataTable.controlColumn.actions.button.stacktrace.notAvailable": "堆栈跟踪不可用", "xpack.logsExplorer.dataTable.header.content.tooltip.paragraph1": "显示该文档的 {logLevel} 和 {message} 字段。", "xpack.logsExplorer.dataTable.header.content.tooltip.paragraph2": "消息字段为空时,将显示以下项之一:", "xpack.logsExplorer.dataTable.header.popover.content": "内容", diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts b/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts index d2eebb13acb83..1f57223ad7ea4 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts @@ -204,6 +204,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataGrid.getHeaders()).to.eql([ 'Select column', 'Control column', + 'Access to degraded docs', + 'Access to available stacktraces', 'Numberbytes', 'machine.ram_range', ]); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group2/_data_grid_doc_table.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group2/_data_grid_doc_table.ts index 2bbbd8353c0ff..9f82f47111894 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group2/_data_grid_doc_table.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group2/_data_grid_doc_table.ts @@ -84,7 +84,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return text === 'Sep 22, 2015 @ 23:50:13.253'; }); - await dataGrid.clickCellExpandButton(0, 3); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 1); let expandDocId = ''; await retry.waitForWithTimeout('expandDocId to be valid', 5000, async () => { @@ -127,7 +127,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug(`row document timestamp: ${text}`); return text === 'Sep 22, 2015 @ 23:50:13.253'; }); - await dataGrid.clickCellExpandButton(0, 3); + await dataGrid.clickCellExpandButtonExcludingControlColumns(0, 1); let expandDocId = ''; await retry.waitForWithTimeout('expandDocId to be valid', 5000, async () => { From f15e825e2e370cd7478eb40788e345b25d0fc3d8 Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Wed, 11 Sep 2024 09:36:26 -0400 Subject: [PATCH 20/52] [Synthetics] Unskip and fix Synthetics global params e2e tests (#192400) ## Summary Goal is to unskip the test suite for global params in Synthetics e2e. --- .../journeys/global_parameters.journey.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/global_parameters.journey.ts b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/global_parameters.journey.ts index 587806e136937..831f8d107f36a 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/global_parameters.journey.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/global_parameters.journey.ts @@ -10,12 +10,7 @@ import { byTestId } from '../../helpers/utils'; import { cleanTestParams } from './services/add_monitor'; import { syntheticsAppPageProvider } from '../page_objects/synthetics_app'; -const journeySkip = - (...params: Parameters) => - () => - journey(...params); -// See details: https://github.com/elastic/kibana/issues/191961 -journeySkip(`GlobalParameters`, async ({ page, params }) => { +journey(`GlobalParameters`, async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl, params }); before(async () => { @@ -64,7 +59,7 @@ journeySkip(`GlobalParameters`, async ({ page, params }) => { await page.click('[placeholder="Search..."]'); await page.fill('[placeholder="Search..."]', 'username'); await page.click('text=username'); - await page.click('[aria-label="Clear input"]'); + await page.click('[aria-label="Clear search input"]'); await page.click('[placeholder="Search..."]'); await page.fill('[placeholder="Search..."]', 'website'); await page.click('text=website username'); @@ -74,7 +69,7 @@ journeySkip(`GlobalParameters`, async ({ page, params }) => { await page.fill('[placeholder="Search..."]', 'extra'); await page.keyboard.press('Enter'); await page.click('text=No items found'); - await page.click('[aria-label="Clear input"]'); + await page.click('[aria-label="Clear search input"]'); }); step('Click text=Delete ParameterEdit Parameter >> :nth-match(button, 2)', async () => { @@ -91,7 +86,7 @@ journeySkip(`GlobalParameters`, async ({ page, params }) => { await page.click('text=staging'); await page.click('button:has-text("Tags")'); await page.click('[aria-label="Tags"] >> text=staging'); - await page.click('[aria-label="Clear input"]'); + await page.click('[aria-label="Clear search input"]'); }); step('Click text=Delete ParameterEdit Parameter >> button', async () => { await page.click('text=Delete ParameterEdit Parameter >> button'); From f8a6f97e3a3c8420dd499f50b07c662ba096c480 Mon Sep 17 00:00:00 2001 From: Jatin Kathuria Date: Wed, 11 Sep 2024 16:02:19 +0200 Subject: [PATCH 21/52] [Security Solution] Migration old format of Page Controls to new format (#192555) ## Summary PR #190561 introduces a breaking change in the format of page controls data. Because of this there was conflict between the value of page controls stored in local storage v/s a new format. > [!WARNING] > All new users of `v8.16` will encounter the error on the alerts page because of this conflict. To resolve this, they will have to clear local storage which not a great UX. ## Desk Testing 1. Checkout to `v8.15` branch by running `git checkout 8.15`. 2. Go to the alert page and do some modifications to the page controls. This store `v8.15` page controls in local storage. - You can, for example, delete one page control. - Change selected value for one page control. - Additionally, you can also add a custom control. 3. Checkout `main` now and repeat the above steps. 4. Your changes should be retained on the alert page and there should not be any error. ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Elastic Machine --- .../public/detections/index.ts | 3 + .../public/detections/migrations.ts | 20 ++ .../migrate_alert_page_contorls.test.ts | 255 ++++++++++++++++++ .../migrate_alert_page_controls.ts | 137 ++++++++++ 4 files changed, 415 insertions(+) create mode 100644 x-pack/plugins/security_solution/public/detections/migrations.ts create mode 100644 x-pack/plugins/security_solution/public/timelines/containers/local_storage/migrate_alert_page_contorls.test.ts create mode 100644 x-pack/plugins/security_solution/public/timelines/containers/local_storage/migrate_alert_page_controls.ts diff --git a/x-pack/plugins/security_solution/public/detections/index.ts b/x-pack/plugins/security_solution/public/detections/index.ts index b93481c0c253b..77d131377f9f5 100644 --- a/x-pack/plugins/security_solution/public/detections/index.ts +++ b/x-pack/plugins/security_solution/public/detections/index.ts @@ -11,6 +11,7 @@ import type { TableIdLiteral } from '@kbn/securitysolution-data-table'; import { getDataTablesInStorageByIds } from '../timelines/containers/local_storage'; import { routes } from './routes'; import type { SecuritySubPlugin } from '../app/types'; +import { runDetectionMigrations } from './migrations'; export const DETECTIONS_TABLE_IDS: TableIdLiteral[] = [ TableId.alertsOnRuleDetailsPage, @@ -21,6 +22,8 @@ export class Detections { public setup() {} public start(storage: Storage): SecuritySubPlugin { + runDetectionMigrations(); + return { storageDataTables: { tableById: getDataTablesInStorageByIds(storage, DETECTIONS_TABLE_IDS), diff --git a/x-pack/plugins/security_solution/public/detections/migrations.ts b/x-pack/plugins/security_solution/public/detections/migrations.ts new file mode 100644 index 0000000000000..81009f63747a6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detections/migrations.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Storage } from '@kbn/kibana-utils-plugin/public'; +import { migrateAlertPageControlsTo816 } from '../timelines/containers/local_storage/migrate_alert_page_controls'; + +type LocalStorageMigrator = (storage: Storage) => void; + +const runLocalStorageMigration = (fn: LocalStorageMigrator) => { + const storage = new Storage(localStorage); + fn(storage); +}; + +export const runDetectionMigrations = () => { + runLocalStorageMigration(migrateAlertPageControlsTo816); +}; diff --git a/x-pack/plugins/security_solution/public/timelines/containers/local_storage/migrate_alert_page_contorls.test.ts b/x-pack/plugins/security_solution/public/timelines/containers/local_storage/migrate_alert_page_contorls.test.ts new file mode 100644 index 0000000000000..575d5bcd6dab3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/timelines/containers/local_storage/migrate_alert_page_contorls.test.ts @@ -0,0 +1,255 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Storage } from '@kbn/kibana-utils-plugin/public'; +import { + PAGE_FILTER_STORAGE_KEY, + migrateAlertPageControlsTo816, +} from './migrate_alert_page_controls'; + +const OLD_FORMAT = { + viewMode: 'view', + id: '5bc0ef0f-c6a9-4eaf-9fc5-9703fcb85482', + panels: { + '0': { + type: 'optionsListControl', + order: 0, + grow: true, + width: 'small', + explicitInput: { + id: '0', + dataViewId: 'security_solution_alerts_dv', + fieldName: 'kibana.alert.workflow_status', + title: 'Status', + hideExclude: true, + hideSort: true, + hidePanelTitles: true, + placeholder: '', + ignoreParentSettings: { + ignoreValidations: true, + }, + selectedOptions: ['open'], + hideActionBar: true, + persist: true, + hideExists: true, + existsSelected: false, + exclude: false, + }, + }, + '1': { + type: 'optionsListControl', + order: 1, + grow: true, + width: 'small', + explicitInput: { + id: '1', + dataViewId: 'security_solution_alerts_dv', + fieldName: 'kibana.alert.severity', + title: 'Severity', + hideExclude: true, + hideSort: true, + hidePanelTitles: true, + placeholder: '', + ignoreParentSettings: { + ignoreValidations: true, + }, + selectedOptions: [], + hideActionBar: true, + hideExists: true, + existsSelected: false, + exclude: false, + }, + }, + '2': { + type: 'optionsListControl', + order: 2, + grow: true, + width: 'small', + explicitInput: { + id: '2', + dataViewId: 'security_solution_alerts_dv', + fieldName: 'user.name', + title: 'User', + hideExclude: true, + hideSort: true, + hidePanelTitles: true, + placeholder: '', + ignoreParentSettings: { + ignoreValidations: true, + }, + selectedOptions: [], + existsSelected: false, + exclude: false, + }, + }, + '3': { + type: 'optionsListControl', + order: 3, + grow: true, + width: 'small', + explicitInput: { + id: '3', + dataViewId: 'security_solution_alerts_dv', + fieldName: 'host.name', + title: 'Host', + hideExclude: true, + hideSort: true, + hidePanelTitles: true, + placeholder: '', + ignoreParentSettings: { + ignoreValidations: true, + }, + selectedOptions: [], + existsSelected: false, + exclude: false, + }, + }, + }, + defaultControlWidth: 'small', + defaultControlGrow: true, + controlStyle: 'oneLine', + chainingSystem: 'HIERARCHICAL', + showApplySelections: false, + ignoreParentSettings: { + ignoreFilters: false, + ignoreQuery: false, + ignoreTimerange: false, + ignoreValidations: false, + }, + timeRange: { + from: '2024-09-10T22:00:00.000Z', + to: '2024-09-11T21:59:59.999Z', + mode: 'absolute', + }, + filters: [ + { + meta: { + alias: null, + negate: true, + disabled: false, + type: 'exists', + key: 'kibana.alert.building_block_type', + index: 'security-solution-default', + }, + query: { + exists: { + field: 'kibana.alert.building_block_type', + }, + }, + }, + ], + query: { + query: '', + language: 'kuery', + }, +}; + +const NEW_FORMAT = { + initialChildControlState: { + '0': { + type: 'optionsListControl', + order: 0, + hideExclude: true, + hideSort: true, + placeholder: '', + width: 'small', + dataViewId: 'security_solution_alerts_dv', + title: 'Status', + fieldName: 'kibana.alert.workflow_status', + selectedOptions: ['open'], + hideActionBar: true, + persist: true, + hideExists: true, + }, + '1': { + type: 'optionsListControl', + order: 1, + hideExclude: true, + hideSort: true, + placeholder: '', + width: 'small', + dataViewId: 'security_solution_alerts_dv', + title: 'Severity', + fieldName: 'kibana.alert.severity', + selectedOptions: [], + hideActionBar: true, + hideExists: true, + }, + '2': { + type: 'optionsListControl', + order: 2, + hideExclude: true, + hideSort: true, + placeholder: '', + width: 'small', + dataViewId: 'security_solution_alerts_dv', + title: 'User', + fieldName: 'user.name', + }, + '3': { + type: 'optionsListControl', + order: 3, + hideExclude: true, + hideSort: true, + placeholder: '', + width: 'small', + dataViewId: 'security_solution_alerts_dv', + title: 'Host', + fieldName: 'host.name', + }, + }, + labelPosition: 'oneLine', + chainingSystem: 'HIERARCHICAL', + autoApplySelections: false, + ignoreParentSettings: { + ignoreValidations: false, + }, + editorConfig: { + hideWidthSettings: true, + hideDataViewSelector: true, + hideAdditionalSettings: true, + }, +}; +const storage = new Storage(localStorage); + +describe('migrateAlertPageControlsTo816', () => { + beforeEach(() => { + storage.clear(); + }); + it('should migrate the old format to the new format', () => { + storage.set(PAGE_FILTER_STORAGE_KEY, OLD_FORMAT); + migrateAlertPageControlsTo816(storage); + const migrated = storage.get(PAGE_FILTER_STORAGE_KEY); + expect(migrated).toMatchObject(NEW_FORMAT); + }); + + it('should be a no-op if the new format already exists', () => { + storage.set(PAGE_FILTER_STORAGE_KEY, NEW_FORMAT); + migrateAlertPageControlsTo816(storage); + const migrated = storage.get(PAGE_FILTER_STORAGE_KEY); + expect(migrated).toMatchObject(NEW_FORMAT); + }); + + it('should be a no-op if no value is present in localstorage for page filters ', () => { + migrateAlertPageControlsTo816(storage); + const migrated = storage.get(PAGE_FILTER_STORAGE_KEY); + expect(migrated).toBeNull(); + }); + + it('should convert custom old format correctly', () => { + const MODIFIED_OLD_FORMAT = structuredClone(OLD_FORMAT); + MODIFIED_OLD_FORMAT.panels['0'].explicitInput.hideExists = true; + MODIFIED_OLD_FORMAT.chainingSystem = 'NONE'; + storage.set(PAGE_FILTER_STORAGE_KEY, MODIFIED_OLD_FORMAT); + migrateAlertPageControlsTo816(storage); + const migrated = storage.get(PAGE_FILTER_STORAGE_KEY); + const EXPECTED_NEW_FORMAT = structuredClone(NEW_FORMAT); + EXPECTED_NEW_FORMAT.initialChildControlState['0'].hideExists = true; + EXPECTED_NEW_FORMAT.chainingSystem = 'NONE'; + expect(migrated).toMatchObject(EXPECTED_NEW_FORMAT); + }); +}); diff --git a/x-pack/plugins/security_solution/public/timelines/containers/local_storage/migrate_alert_page_controls.ts b/x-pack/plugins/security_solution/public/timelines/containers/local_storage/migrate_alert_page_controls.ts new file mode 100644 index 0000000000000..d3e17f47983d9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/timelines/containers/local_storage/migrate_alert_page_controls.ts @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ControlGroupRuntimeState } from '@kbn/controls-plugin/public'; +import type { DefaultControlState } from '@kbn/controls-plugin/public/react_controls/controls/types'; +import type { Storage } from '@kbn/kibana-utils-plugin/public'; + +export const PAGE_FILTER_STORAGE_KEY = 'siem.default.pageFilters'; + +interface OldFormat { + viewMode: string; + id: string; + panels: { + [key: string]: { + type: string; + order: number; + grow: boolean; + width: string; + explicitInput: { + id: string; + dataViewId: string; + fieldName: string; + title: string; + hideExclude: boolean; + hideSort: boolean; + hidePanelTitles: boolean; + placeholder: string; + ignoreParentSettings: { + ignoreValidations: boolean; + }; + selectedOptions: string[]; + hideActionBar: boolean; + persist: boolean; + hideExists: boolean; + existsSelected: boolean; + exclude: boolean; + }; + }; + }; + defaultControlWidth: string; + defaultControlGrow: boolean; + controlStyle: string; + chainingSystem: string; + showApplySelections: boolean; + ignoreParentSettings: { + ignoreFilters: boolean; + ignoreQuery: boolean; + ignoreTimerange: boolean; + ignoreValidations: boolean; + }; + timeRange: { + from: string; + to: string; + mode: string; + }; + filters: Array<{ + meta: { + alias: null; + negate: boolean; + disabled: boolean; + type: string; + key: string; + index: string; + }; + query: { + exists: { + field: string; + }; + }; + }>; + query: { + query: string; + }; +} + +interface NewFormatExplicitInput { + dataViewId: string; + fieldName: string; + title: string; + hideExclude: boolean; + hideSort: boolean; + placeholder: string; + selectedOptions: string[]; + hideActionBar: boolean; + persist: boolean; + hideExists: boolean; +} + +/** + * Ref PR : https://github.com/elastic/kibana/pull/190561 + * + * The above PR breaks the local storage format of page filters controls. + * This migration script is to migrate the old format to the new format. + * + */ +export function migrateAlertPageControlsTo816(storage: Storage) { + const oldFormat: OldFormat = storage.get(PAGE_FILTER_STORAGE_KEY); + if (oldFormat && Object.keys(oldFormat).includes('panels')) { + // Only run when it is old format + const newFormat: ControlGroupRuntimeState = { + initialChildControlState: {}, + labelPosition: oldFormat.controlStyle as ControlGroupRuntimeState['labelPosition'], + chainingSystem: oldFormat.chainingSystem as ControlGroupRuntimeState['chainingSystem'], + autoApplySelections: oldFormat.showApplySelections ?? true, + ignoreParentSettings: oldFormat.ignoreParentSettings, + editorConfig: { + hideWidthSettings: true, + hideDataViewSelector: true, + hideAdditionalSettings: true, + }, + }; + + for (const [key, value] of Object.entries(oldFormat.panels)) { + newFormat.initialChildControlState[key] = { + type: 'optionsListControl', + order: value.order, + hideExclude: value.explicitInput.hideExclude ?? true, + hideSort: value.explicitInput.hideSort ?? true, + placeholder: value.explicitInput.placeholder ?? '', + width: value.width as DefaultControlState['width'], + dataViewId: value.explicitInput.dataViewId ?? 'security_solution_alerts_dv', + title: value.explicitInput.title, + fieldName: value.explicitInput.fieldName, + selectedOptions: value.explicitInput.selectedOptions, + hideActionBar: value.explicitInput.hideActionBar, + persist: value.explicitInput.persist, + hideExists: value.explicitInput.hideExists, + }; + } + + storage.set(PAGE_FILTER_STORAGE_KEY, newFormat); + } +} From ed086ebf3308b5e04872ecb7e998f9b4acff0c8c Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Wed, 11 Sep 2024 08:03:56 -0600 Subject: [PATCH 22/52] [ES|QL] Automate aggs definitions (#192132) ## Summary Close https://github.com/elastic/kibana/issues/188979 Also, this moves all generated definitions and docs into their own `generated` directories to make the scripts' domain more clear. --------- Co-authored-by: Elastic Machine --- .../scripts/generate_function_definitions.ts | 69 +- .../autocomplete.command.stats.test.ts | 58 +- .../autocomplete.suggest.eval.test.ts | 11 +- .../src/autocomplete/__tests__/helpers.ts | 8 +- .../src/autocomplete/autocomplete.test.ts | 6 +- .../src/autocomplete/factories.ts | 8 +- .../src/definitions/aggs.ts | 393 - .../generated/aggregation_functions.ts | 1740 + .../scalar_functions.ts} | 230 +- .../src/definitions/types.ts | 1 - .../src/shared/helpers.ts | 8 +- .../validation/__tests__/functions.test.ts | 72 +- .../esql_validation_meta_tests.json | 27984 ---------------- .../src/validation/validation.test.ts | 28 +- .../src/validation/validation.ts | 6 +- packages/kbn-text-based-editor/package.json | 2 +- .../scripts/generate_esql_docs.ts | 45 +- packages/kbn-text-based-editor/src/helpers.ts | 6 +- .../esql_documentation_sections.tsx | 1053 + .../generated/aggregation_functions.tsx | 507 + .../generated/scalar_functions.tsx} | 3540 +- .../translations/translations/fr-FR.json | 34 - .../translations/translations/ja-JP.json | 34 - .../translations/translations/zh-CN.json | 34 - 24 files changed, 4968 insertions(+), 30909 deletions(-) delete mode 100644 packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts create mode 100644 packages/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts rename packages/kbn-esql-validation-autocomplete/src/definitions/{functions.ts => generated/scalar_functions.ts} (97%) create mode 100644 packages/kbn-text-based-editor/src/inline_documentation/esql_documentation_sections.tsx create mode 100644 packages/kbn-text-based-editor/src/inline_documentation/generated/aggregation_functions.tsx rename packages/kbn-text-based-editor/src/{esql_documentation_sections.tsx => inline_documentation/generated/scalar_functions.tsx} (68%) diff --git a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts index 8515a249f7686..144ba21f51ecb 100644 --- a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts @@ -25,11 +25,15 @@ const aliasTable: Record = { }; const aliases = new Set(Object.values(aliasTable).flat()); -const evalSupportedCommandsAndOptions = { +const scalarSupportedCommandsAndOptions = { supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], }; +const aggregationSupportedCommandsAndOptions = { + supportedCommands: ['stats', 'inlinestats', 'metrics'], +}; + // coalesce can be removed when a test is added for version type // (https://github.com/elastic/elasticsearch/pull/109032#issuecomment-2150033350) const excludedFunctions = new Set(['bucket', 'case']); @@ -40,7 +44,7 @@ const extraFunctions: FunctionDefinition[] = [ name: 'case', description: 'Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to `true`. If the number of arguments is odd, the last argument is the default value which is returned when no condition matches.', - ...evalSupportedCommandsAndOptions, + ...scalarSupportedCommandsAndOptions, signatures: [ { params: [ @@ -215,9 +219,22 @@ const functionEnrichments: Record> }, mv_sort: { signatures: new Array(9).fill({ - params: [{}, { literalOptions: ['asc', 'desc'] }], + params: [{}, { acceptedValues: ['asc', 'desc'] }], + }), + }, + percentile: { + signatures: new Array(9).fill({ + params: [{}, { constantOnly: true }], + }), + }, + top: { + signatures: new Array(6).fill({ + params: [{}, { constantOnly: true }, { constantOnly: true, acceptedValues: ['asc', 'desc'] }], }), }, + count: { + signatures: [{ params: [{ supportsWildcard: true }] }], + }, }; const convertDateTime = (s: string) => (s === 'datetime' ? 'date' : s); @@ -233,8 +250,8 @@ function getFunctionDefinition(ESFunctionDefinition: Record): Funct type: ESFunctionDefinition.type, name: ESFunctionDefinition.name, ...(ESFunctionDefinition.type === 'eval' - ? evalSupportedCommandsAndOptions - : { supportedCommands: ['stats'] }), + ? scalarSupportedCommandsAndOptions + : aggregationSupportedCommandsAndOptions), description: ESFunctionDefinition.description, alias: aliasTable[ESFunctionDefinition.name], signatures: _.uniqBy( @@ -263,7 +280,10 @@ function getFunctionDefinition(ESFunctionDefinition: Record): Funct return ret as FunctionDefinition; } -function printGeneratedFunctionsFile(functionDefinitions: FunctionDefinition[]) { +function printGeneratedFunctionsFile( + functionDefinitions: FunctionDefinition[], + functionsType: 'aggregation' | 'scalar' +) { /** * Deals with asciidoc internal cross-references in the function descriptions * @@ -341,10 +361,14 @@ function printGeneratedFunctionsFile(functionDefinitions: FunctionDefinition[]) * */ -import type { ESQLFunction } from '@kbn/esql-ast'; import { i18n } from '@kbn/i18n'; -import { isLiteralItem } from '../shared/helpers'; -import type { FunctionDefinition } from './types'; +import type { FunctionDefinition } from '../types'; +${ + functionsType === 'scalar' + ? `import type { ESQLFunction } from '@kbn/esql-ast'; +import { isLiteralItem } from '../../shared/helpers';` + : '' +} `; @@ -359,7 +383,7 @@ import type { FunctionDefinition } from './types'; .join('\n\n'); const fileContents = `${fileHeader}${functionDefinitionsString} - export const evalFunctionDefinitions = [${functionDefinitions + export const ${functionsType}FunctionDefinitions = [${functionDefinitions .map(({ name }) => getDefinitionName(name)) .join(',\n')}];`; @@ -379,25 +403,30 @@ import type { FunctionDefinition } from './types'; JSON.parse(readFileSync(`${ESFunctionDefinitionsDirectory}/${file}`, 'utf-8')) ); - const evalFunctionDefinitions: FunctionDefinition[] = []; + const scalarFunctionDefinitions: FunctionDefinition[] = []; + const aggFunctionDefinitions: FunctionDefinition[] = []; for (const ESDefinition of ESFunctionDefinitions) { - if ( - aliases.has(ESDefinition.name) || - excludedFunctions.has(ESDefinition.name) || - ESDefinition.type !== 'eval' - ) { + if (aliases.has(ESDefinition.name) || excludedFunctions.has(ESDefinition.name)) { continue; } const functionDefinition = getFunctionDefinition(ESDefinition); - evalFunctionDefinitions.push(functionDefinition); + if (functionDefinition.type === 'eval') { + scalarFunctionDefinitions.push(functionDefinition); + } else if (functionDefinition.type === 'agg') { + aggFunctionDefinitions.push(functionDefinition); + } } - evalFunctionDefinitions.push(...extraFunctions); + scalarFunctionDefinitions.push(...extraFunctions); await writeFile( - join(__dirname, '../src/definitions/functions.ts'), - printGeneratedFunctionsFile(evalFunctionDefinitions) + join(__dirname, '../src/definitions/generated/scalar_functions.ts'), + printGeneratedFunctionsFile(scalarFunctionDefinitions, 'scalar') + ); + await writeFile( + join(__dirname, '../src/definitions/generated/aggregation_functions.ts'), + printGeneratedFunctionsFile(aggFunctionDefinitions, 'aggregation') ); })(); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts index 0a9cbb35d9a75..6f195d5ecb503 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts @@ -7,7 +7,9 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { FieldType, FunctionReturnType } from '../../definitions/types'; import { ESQL_COMMON_NUMERIC_TYPES, ESQL_NUMBER_TYPES } from '../../shared/esql_types'; +import { allStarConstant } from '../complete_items'; import { getAddDateHistogramSnippet } from '../factories'; import { roundParameterTypes } from './constants'; import { setup, getFunctionSignaturesByReturnType, getFieldNamesByType } from './helpers'; @@ -39,6 +41,9 @@ const allGroupingFunctions = getFunctionSignaturesByReturnType( 'by' ); +// types accepted by the AVG function +const avgTypes: Array = ['double', 'integer', 'long']; + describe('autocomplete.suggest', () => { describe('STATS [ BY ]', () => { describe('STATS ...', () => {}); @@ -121,18 +126,16 @@ describe('autocomplete.suggest', () => { ), ]); await assertSuggestions('from a | stats avg(/', [ - ...getFieldNamesByType(ESQL_NUMBER_TYPES), - ...getFunctionSignaturesByReturnType('eval', ESQL_NUMBER_TYPES, { scalar: true }), + ...getFieldNamesByType(avgTypes), + ...getFunctionSignaturesByReturnType('eval', avgTypes, { + scalar: true, + }), ]); await assertSuggestions('from a | stats round(avg(/', [ - ...getFieldNamesByType(ESQL_NUMBER_TYPES), - ...getFunctionSignaturesByReturnType( - 'eval', - ESQL_NUMBER_TYPES, - { scalar: true }, - undefined, - ['round'] - ), + ...getFieldNamesByType(avgTypes), + ...getFunctionSignaturesByReturnType('eval', avgTypes, { scalar: true }, undefined, [ + 'round', + ]), ]); }); @@ -150,16 +153,7 @@ describe('autocomplete.suggest', () => { ]), ...getFunctionSignaturesByReturnType( 'stats', - [ - ...ESQL_COMMON_NUMERIC_TYPES, - 'date', - 'date_period', - 'boolean', - 'ip', - 'version', - 'text', - 'keyword', - ], + [...ESQL_COMMON_NUMERIC_TYPES, 'date', 'boolean', 'ip', 'version', 'text', 'keyword'], { scalar: true, } @@ -175,14 +169,10 @@ describe('autocomplete.suggest', () => { const { assertSuggestions } = await setup(); await assertSuggestions('from a | stats avg(b/) by stringField', [ - ...getFieldNamesByType(ESQL_NUMBER_TYPES), - ...getFunctionSignaturesByReturnType( - 'eval', - ['double', 'integer', 'long', 'unsigned_long'], - { - scalar: true, - } - ), + ...getFieldNamesByType(avgTypes), + ...getFunctionSignaturesByReturnType('eval', avgTypes, { + scalar: true, + }), ]); }); @@ -297,15 +287,9 @@ describe('autocomplete.suggest', () => { }); test('count(/) to suggest * for all', async () => { - const { assertSuggestions } = await setup(); - - const expected = [ - '*', - ...getFieldNamesByType(['any']).map((field) => `${field}`), - ...allEvaFunctions, - ]; - await assertSuggestions('from a | stats count(/)', expected); - await assertSuggestions('from a | stats var0 = count(/)', expected); + const { suggest } = await setup(); + const suggestions = await suggest('from a | stats count(/)'); + expect(suggestions).toContain(allStarConstant); }); }); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.eval.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.eval.test.ts index 356761966994a..c07b065b23ce8 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.eval.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.eval.test.ts @@ -17,7 +17,7 @@ import { getDateLiteralsByFieldType, } from './helpers'; import { ESQL_COMMON_NUMERIC_TYPES } from '../../shared/esql_types'; -import { evalFunctionDefinitions } from '../../definitions/functions'; +import { scalarFunctionDefinitions } from '../../definitions/generated/scalar_functions'; import { timeUnitsToSuggest } from '../../definitions/literals'; import { getCompatibleTypesToSuggestNext, @@ -361,7 +361,7 @@ describe('autocomplete.suggest', () => { describe('eval functions', () => { // // Test suggestions for each possible param, within each signature variation, for each function - for (const fn of evalFunctionDefinitions) { + for (const fn of scalarFunctionDefinitions) { // skip this fn for the moment as it's quite hard to test // if (!['bucket', 'date_extract', 'date_diff', 'case'].includes(fn.name)) { if (!['bucket', 'date_extract', 'date_diff', 'case'].includes(fn.name)) { @@ -541,7 +541,12 @@ describe('autocomplete.suggest', () => { ); await assertSuggestions( 'from a | eval var0=date_trunc(/)', - getLiteralsByType('time_literal').map((t) => `${t}, `), + [ + ...getLiteralsByType('time_literal').map((t) => `${t}, `), + ...getFunctionSignaturesByReturnType('eval', 'time_duration', { scalar: true }).map( + (t) => `${t.text},` + ), + ], { triggerCharacter: '(' } ); await assertSuggestions( diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts index 989eca0240c9c..70b1d717f6e4e 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts @@ -9,9 +9,9 @@ import { camelCase } from 'lodash'; import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; -import { evalFunctionDefinitions } from '../../definitions/functions'; +import { scalarFunctionDefinitions } from '../../definitions/generated/scalar_functions'; import { builtinFunctions } from '../../definitions/builtin'; -import { statsAggregationFunctionDefinitions } from '../../definitions/aggs'; +import { aggregationFunctionDefinitions } from '../../definitions/generated/aggregation_functions'; import { timeUnitsToSuggest } from '../../definitions/literals'; import { groupingFunctionDefinitions } from '../../definitions/grouping'; import * as autocomplete from '../autocomplete'; @@ -149,7 +149,7 @@ export function getFunctionSignaturesByReturnType( const list = []; if (agg) { - list.push(...statsAggregationFunctionDefinitions); + list.push(...aggregationFunctionDefinitions); // right now all grouping functions are agg functions too list.push(...groupingFunctionDefinitions); } @@ -158,7 +158,7 @@ export function getFunctionSignaturesByReturnType( } // eval functions (eval is a special keyword in JS) if (scalar) { - list.push(...evalFunctionDefinitions); + list.push(...scalarFunctionDefinitions); } if (builtin) { list.push(...builtinFunctions.filter(({ name }) => (skipAssign ? name !== '=' : true))); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts index 2c5f4bda941ba..80ff7148f8623 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts @@ -8,7 +8,7 @@ */ import { suggest } from './autocomplete'; -import { evalFunctionDefinitions } from '../definitions/functions'; +import { scalarFunctionDefinitions } from '../definitions/generated/scalar_functions'; import { timeUnitsToSuggest } from '../definitions/literals'; import { commandDefinitions as unmodifiedCommandDefinitions } from '../definitions/commands'; import { @@ -747,8 +747,8 @@ describe('autocomplete', () => { describe('function arguments', () => { // literalSuggestions parameter const dateDiffFirstParamSuggestions = - evalFunctionDefinitions.find(({ name }) => name === 'date_diff')?.signatures[0].params?.[0] - .literalSuggestions ?? []; + scalarFunctionDefinitions.find(({ name }) => name === 'date_diff')?.signatures[0] + .params?.[0].literalSuggestions ?? []; testSuggestions( 'FROM a | EVAL DATE_DIFF(/)', dateDiffFirstParamSuggestions.map((s) => `"${s}", `).map(attachTriggerCommand) diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts index 3b5cb1e58e2e2..3e528036dcadc 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts @@ -10,8 +10,8 @@ import { i18n } from '@kbn/i18n'; import { SuggestionRawDefinition } from './types'; import { groupingFunctionDefinitions } from '../definitions/grouping'; -import { statsAggregationFunctionDefinitions } from '../definitions/aggs'; -import { evalFunctionDefinitions } from '../definitions/functions'; +import { aggregationFunctionDefinitions } from '../definitions/generated/aggregation_functions'; +import { scalarFunctionDefinitions } from '../definitions/generated/scalar_functions'; import { getFunctionSignatures, getCommandSignature } from '../definitions/helpers'; import { timeUnitsToSuggest } from '../definitions/literals'; import { @@ -26,8 +26,8 @@ import { DOUBLE_BACKTICK, SINGLE_TICK_REGEX } from '../shared/constants'; import { ESQLRealField } from '../validation/types'; import { isNumericType } from '../shared/esql_types'; -const allFunctions = statsAggregationFunctionDefinitions - .concat(evalFunctionDefinitions) +const allFunctions = aggregationFunctionDefinitions + .concat(scalarFunctionDefinitions) .concat(groupingFunctionDefinitions); export const TIME_SYSTEM_PARAMS = ['?t_start', '?t_end']; diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts deleted file mode 100644 index 912dbd401fe71..0000000000000 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { i18n } from '@kbn/i18n'; -import { ESQL_COMMON_NUMERIC_TYPES, ESQL_NUMBER_TYPES } from '../shared/esql_types'; -import type { FunctionDefinition, FunctionParameterType, FunctionReturnType } from './types'; - -function createNumericAggDefinition({ - name, - description, - returnType, - args = [], -}: { - name: string; - description: string; - returnType?: (numericType: FunctionParameterType) => FunctionReturnType; - args?: Array<{ - name: string; - type: FunctionParameterType; - value: string; - constantOnly?: boolean; - }>; -}): FunctionDefinition { - const extraParamsExample = args.length ? `, ${args.map(({ value }) => value).join(',')}` : ''; - return { - name, - type: 'agg', - description, - supportedCommands: ['stats', 'inlinestats', 'metrics'], - signatures: [ - ...ESQL_NUMBER_TYPES.map((numericType) => ({ - params: [ - { name: 'column', type: numericType, noNestingFunctions: true }, - ...args.map(({ name: paramName, type, constantOnly }) => ({ - name: paramName, - type, - noNestingFunctions: true, - constantOnly, - })), - ], - returnType: returnType ? returnType(numericType) : numericType, - })), - ], - examples: [ - `from index | stats result = ${name}(field${extraParamsExample})`, - `from index | stats ${name}(field${extraParamsExample})`, - ], - }; -} - -export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ - { - name: 'avg', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.avgDoc', { - defaultMessage: 'Returns the average of the values in a field', - }), - returnType: () => 'double' as FunctionReturnType, - }, - { - name: 'sum', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sumDoc', { - defaultMessage: 'Returns the sum of the values in a field.', - }), - returnType: (numericType: FunctionParameterType): FunctionReturnType => { - switch (numericType) { - case 'double': - return 'double'; - default: - return 'long'; - } - }, - }, - { - name: 'median', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.medianDoc', { - defaultMessage: 'Returns the 50% percentile.', - }), - returnType: () => 'double' as FunctionReturnType, - }, - { - name: 'median_absolute_deviation', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.medianDeviationDoc', - { - defaultMessage: - 'Returns the median of each data point’s deviation from the median of the entire sample.', - } - ), - returnType: () => 'double' as FunctionReturnType, - }, -] - .map(createNumericAggDefinition) - .concat([ - { - name: 'percentile', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc', - { - defaultMessage: 'Returns the n percentile of a field.', - } - ), - type: 'agg', - supportedCommands: ['stats', 'inlinestats', 'metrics'], - signatures: [ - ...ESQL_COMMON_NUMERIC_TYPES.map((numericType: FunctionParameterType) => { - return ESQL_COMMON_NUMERIC_TYPES.map((weightType: FunctionParameterType) => ({ - params: [ - { - name: 'column', - type: numericType, - noNestingFunctions: true, - }, - { - name: 'percentile', - type: weightType, - noNestingFunctions: true, - constantOnly: true, - }, - ], - returnType: 'double' as FunctionReturnType, - })); - }).flat(), - ], - }, - { - name: 'max', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.maxDoc', { - defaultMessage: 'Returns the maximum value in a field.', - }), - type: 'agg', - supportedCommands: ['stats', 'inlinestats', 'metrics'], - signatures: [ - ...ESQL_COMMON_NUMERIC_TYPES.map((type) => ({ - params: [{ name: 'column', type, noNestingFunctions: true }], - returnType: type, - })), - { - params: [{ name: 'column', type: 'date', noNestingFunctions: true }], - returnType: 'date', - }, - { - params: [{ name: 'column', type: 'date_period', noNestingFunctions: true }], - returnType: 'date_period', - }, - { - params: [{ name: 'column', type: 'boolean', noNestingFunctions: true }], - returnType: 'boolean', - }, - { - params: [{ name: 'column', type: 'ip', noNestingFunctions: true }], - returnType: 'ip', - }, - { - params: [{ name: 'column', type: 'version', noNestingFunctions: true }], - returnType: 'version', - }, - { - params: [{ name: 'column', type: 'keyword', noNestingFunctions: true }], - returnType: 'keyword', - }, - { - params: [{ name: 'column', type: 'text', noNestingFunctions: true }], - returnType: 'text', - }, - ], - examples: [`from index | stats result = max(field)`, `from index | stats max(field)`], - }, - { - name: 'min', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.minDoc', { - defaultMessage: 'Returns the minimum value in a field.', - }), - type: 'agg', - supportedCommands: ['stats', 'inlinestats', 'metrics'], - signatures: [ - ...ESQL_COMMON_NUMERIC_TYPES.map((type) => ({ - params: [{ name: 'column', type, noNestingFunctions: true }], - returnType: type, - })), - { - params: [{ name: 'column', type: 'date', noNestingFunctions: true }], - returnType: 'date', - }, - { - params: [{ name: 'column', type: 'date_period', noNestingFunctions: true }], - returnType: 'date_period', - }, - { - params: [{ name: 'column', type: 'boolean', noNestingFunctions: true }], - returnType: 'boolean', - }, - { - params: [{ name: 'column', type: 'ip', noNestingFunctions: true }], - returnType: 'ip', - }, - { - params: [{ name: 'column', type: 'version', noNestingFunctions: true }], - returnType: 'version', - }, - { - params: [{ name: 'column', type: 'keyword', noNestingFunctions: true }], - returnType: 'keyword', - }, - { - params: [{ name: 'column', type: 'text', noNestingFunctions: true }], - returnType: 'text', - }, - ], - examples: [`from index | stats result = min(field)`, `from index | stats min(field)`], - }, - ]) - .concat([ - { - name: 'count', - type: 'agg', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.countDoc', { - defaultMessage: 'Returns the count of the values in a field.', - }), - supportedCommands: ['stats', 'inlinestats', 'metrics'], - signatures: [ - { - params: [ - { - name: 'column', - type: 'any', - noNestingFunctions: true, - supportsWildcard: true, - optional: true, - }, - ], - returnType: 'long', - }, - ], - examples: [`from index | stats result = count(field)`, `from index | stats count(field)`], - }, - { - name: 'count_distinct', - type: 'agg', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.countDistinctDoc', - { - defaultMessage: 'Returns the count of distinct values in a field.', - } - ), - supportedCommands: ['stats', 'inlinestats', 'metrics'], - signatures: [ - { - params: [ - { name: 'column', type: 'any', noNestingFunctions: true }, - ...ESQL_NUMBER_TYPES.map((type) => ({ - name: 'precision', - type, - noNestingFunctions: true, - optional: true, - })), - ], - returnType: 'long', - }, - ], - examples: [ - `from index | stats result = count_distinct(field)`, - `from index | stats count_distinct(field)`, - ], - }, - { - name: 'st_centroid_agg', - type: 'agg', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.stCentroidDoc', - { - defaultMessage: 'Returns the count of distinct values in a field.', - } - ), - supportedCommands: ['stats', 'inlinestats', 'metrics'], - signatures: [ - { - params: [{ name: 'column', type: 'cartesian_point', noNestingFunctions: true }], - returnType: 'cartesian_point', - }, - { - params: [{ name: 'column', type: 'geo_point', noNestingFunctions: true }], - returnType: 'geo_point', - }, - ], - examples: [ - `from index | stats result = st_centroid_agg(cartesian_field)`, - `from index | stats st_centroid_agg(cartesian_field)`, - `from index | stats result = st_centroid_agg(geo_field)`, - `from index | stats st_centroid_agg(geo_field)`, - ], - }, - { - name: 'values', - type: 'agg', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.values', { - defaultMessage: 'Returns all values in a group as an array.', - }), - supportedCommands: ['stats', 'metrics'], - signatures: [ - { - params: [{ name: 'expression', type: 'any', noNestingFunctions: true }], - returnType: 'any', - }, - ], - examples: [ - 'from index | stats all_agents=values(agents.keyword)', - 'from index | stats all_sorted_agents=mv_sort(values(agents.keyword))', - ], - }, - { - name: 'top', - type: 'agg', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.topListDoc', { - defaultMessage: 'Collects top N values per bucket.', - }), - supportedCommands: ['stats', 'metrics'], - signatures: [ - { - params: [ - { - name: 'field', - type: 'any', - noNestingFunctions: true, - optional: false, - }, - { - name: 'limit', - type: 'integer', - noNestingFunctions: true, - optional: false, - constantOnly: true, - }, - { - name: 'order', - type: 'keyword', - noNestingFunctions: true, - optional: false, - constantOnly: true, - acceptedValues: ['asc', 'desc'], - }, - ], - returnType: 'any', - }, - ], - examples: [ - `from employees | stats top_salaries = top(salary, 10, "desc")`, - `from employees | stats date = top(hire_date, 2, "asc"), double = top(salary_change, 2, "asc"),`, - ], - }, - { - name: 'weighted_avg', - type: 'agg', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.weightedAvgDoc', - { - defaultMessage: - 'An aggregation that computes the weighted average of numeric values that are extracted from the aggregated documents.', - } - ), - supportedCommands: ['stats', 'inlinestats', 'metrics'], - signatures: [ - ...ESQL_COMMON_NUMERIC_TYPES.map((numericType: FunctionParameterType) => { - return ESQL_COMMON_NUMERIC_TYPES.map((weightType: FunctionParameterType) => ({ - params: [ - { - name: 'number', - type: numericType, - noNestingFunctions: true, - optional: false, - }, - { - name: 'weight', - type: weightType, - noNestingFunctions: true, - optional: false, - }, - ], - returnType: 'double' as FunctionReturnType, - })); - }).flat(), - ], - examples: [ - `from employees | stats w_avg = weighted_avg(salary, height) by languages | eval w_avg = round(w_avg)`, - `from employees | stats w_avg_1 = weighted_avg(salary, 1), avg = avg(salary), w_avg_2 = weighted_avg(salary, height)`, - ], - }, - ]); diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts new file mode 100644 index 0000000000000..210eec36811de --- /dev/null +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts @@ -0,0 +1,1740 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +/** + * __AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.__ + * + * @note This file is generated by the `generate_function_definitions.ts` + * script. Do not edit it manually. + * + * + * + * + * + * + * + * + * + * + * + * + */ + +import { i18n } from '@kbn/i18n'; +import type { FunctionDefinition } from '../types'; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const avgDefinition: FunctionDefinition = { + type: 'agg', + name: 'avg', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.avg', { + defaultMessage: 'The average of a numeric field.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS AVG(height)', + 'FROM employees\n| STATS avg_salary_change = ROUND(AVG(MV_AVG(salary_change)), 10)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const countDefinition: FunctionDefinition = { + type: 'agg', + name: 'count', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.count', { + defaultMessage: 'Returns the total number (count) of input values.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: true, + supportsWildcard: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: true, + }, + ], + returnType: 'long', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS COUNT(height)', + 'FROM employees \n| STATS count = COUNT(*) BY languages \n| SORT languages DESC', + 'ROW words="foo;bar;baz;qux;quux;foo"\n| STATS word_count = COUNT(SPLIT(words, ";"))', + 'ROW n=1\n| WHERE n < 0\n| STATS COUNT(n)', + 'ROW n=1\n| STATS COUNT(n > 0 OR NULL), COUNT(n < 0 OR NULL)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const countDistinctDefinition: FunctionDefinition = { + type: 'agg', + name: 'count_distinct', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.count_distinct', { + defaultMessage: 'Returns the approximate number of distinct values.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + { + name: 'precision', + type: 'integer', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + { + name: 'precision', + type: 'long', + optional: true, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + { + name: 'precision', + type: 'unsigned_long', + optional: true, + }, + ], + returnType: 'long', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM hosts\n| STATS COUNT_DISTINCT(ip0), COUNT_DISTINCT(ip1)', + 'FROM hosts\n| STATS COUNT_DISTINCT(ip0, 80000), COUNT_DISTINCT(ip1, 5)', + 'ROW words="foo;bar;baz;qux;quux;foo"\n| STATS distinct_word_count = COUNT_DISTINCT(SPLIT(words, ";"))', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const maxDefinition: FunctionDefinition = { + type: 'agg', + name: 'max', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.max', { + defaultMessage: 'The maximum value of a field.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS MAX(languages)', + 'FROM employees\n| STATS max_avg_salary_change = MAX(MV_AVG(salary_change))', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const medianDefinition: FunctionDefinition = { + type: 'agg', + name: 'median', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.median', { + defaultMessage: + 'The value that is greater than half of all values and less than half of all values, also known as the 50% `PERCENTILE`.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS MEDIAN(salary), PERCENTILE(salary, 50)', + 'FROM employees\n| STATS median_max_salary_change = MEDIAN(MV_MAX(salary_change))', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const medianAbsoluteDeviationDefinition: FunctionDefinition = { + type: 'agg', + name: 'median_absolute_deviation', + description: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.definitions.median_absolute_deviation', + { + defaultMessage: + "Returns the median absolute deviation, a measure of variability. It is a robust statistic, meaning that it is useful for describing data that may have outliers, or may not be normally distributed. For such data it can be more descriptive than standard deviation.\n\nIt is calculated as the median of each data point's deviation from the median of the entire sample. That is, for a random variable `X`, the median absolute deviation is `median(|median(X) - X|)`.", + } + ), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS MEDIAN(salary), MEDIAN_ABSOLUTE_DEVIATION(salary)', + 'FROM employees\n| STATS m_a_d_max_salary_change = MEDIAN_ABSOLUTE_DEVIATION(MV_MAX(salary_change))', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const minDefinition: FunctionDefinition = { + type: 'agg', + name: 'min', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.min', { + defaultMessage: 'The minimum value of a field.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS MIN(languages)', + 'FROM employees\n| STATS min_avg_salary_change = MIN(MV_AVG(salary_change))', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const percentileDefinition: FunctionDefinition = { + type: 'agg', + name: 'percentile', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.percentile', { + defaultMessage: + 'Returns the value at which a certain percentage of observed values occur. For example, the 95th percentile is the value which is greater than 95% of the observed values and the 50th percentile is the `MEDIAN`.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'percentile', + type: 'double', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'percentile', + type: 'integer', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'percentile', + type: 'long', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'percentile', + type: 'double', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'percentile', + type: 'integer', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'percentile', + type: 'long', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'percentile', + type: 'double', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'percentile', + type: 'integer', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'percentile', + type: 'long', + optional: false, + constantOnly: true, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS p0 = PERCENTILE(salary, 0)\n , p50 = PERCENTILE(salary, 50)\n , p99 = PERCENTILE(salary, 99)', + 'FROM employees\n| STATS p80_max_salary_change = PERCENTILE(MV_MAX(salary_change), 80)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const stCentroidAggDefinition: FunctionDefinition = { + type: 'agg', + name: 'st_centroid_agg', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_centroid_agg', { + defaultMessage: 'Calculate the spatial centroid over a field with spatial point geometry type.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: ['FROM airports\n| STATS centroid=ST_CENTROID_AGG(location)'], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const sumDefinition: FunctionDefinition = { + type: 'agg', + name: 'sum', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sum', { + defaultMessage: 'The sum of a numeric expression.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS SUM(languages)', + 'FROM employees\n| STATS total_salary_changes = SUM(MV_MAX(salary_change))', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const topDefinition: FunctionDefinition = { + type: 'agg', + name: 'top', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.top', { + defaultMessage: 'Collects the top values for a field. Includes repeated values.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + { + name: 'limit', + type: 'integer', + optional: false, + constantOnly: true, + }, + { + name: 'order', + type: 'keyword', + optional: false, + constantOnly: true, + acceptedValues: ['asc', 'desc'], + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + { + name: 'limit', + type: 'integer', + optional: false, + constantOnly: true, + }, + { + name: 'order', + type: 'keyword', + optional: false, + constantOnly: true, + acceptedValues: ['asc', 'desc'], + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + { + name: 'limit', + type: 'integer', + optional: false, + constantOnly: true, + }, + { + name: 'order', + type: 'keyword', + optional: false, + constantOnly: true, + acceptedValues: ['asc', 'desc'], + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + { + name: 'limit', + type: 'integer', + optional: false, + constantOnly: true, + }, + { + name: 'order', + type: 'keyword', + optional: false, + constantOnly: true, + acceptedValues: ['asc', 'desc'], + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + { + name: 'limit', + type: 'integer', + optional: false, + constantOnly: true, + }, + { + name: 'order', + type: 'keyword', + optional: false, + constantOnly: true, + acceptedValues: ['asc', 'desc'], + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + { + name: 'limit', + type: 'integer', + optional: false, + constantOnly: true, + }, + { + name: 'order', + type: 'keyword', + optional: false, + constantOnly: true, + acceptedValues: ['asc', 'desc'], + }, + ], + returnType: 'long', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS top_salaries = TOP(salary, 3, "desc"), top_salary = MAX(salary)', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const valuesDefinition: FunctionDefinition = { + type: 'agg', + name: 'values', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.values', { + defaultMessage: + "Returns all values in a group as a multivalued field. The order of the returned values isn't guaranteed. If you need the values returned in order use esql-mv_sort.", + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'field', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'keyword', + }, + { + params: [ + { + name: 'field', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'text', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + ' FROM employees\n| EVAL first_letter = SUBSTRING(first_name, 0, 1)\n| STATS first_name=MV_SORT(VALUES(first_name)) BY first_letter\n| SORT first_letter', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const weightedAvgDefinition: FunctionDefinition = { + type: 'agg', + name: 'weighted_avg', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.weighted_avg', { + defaultMessage: 'The weighted average of a numeric expression.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'weight', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'weight', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + { + name: 'weight', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'weight', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'weight', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + { + name: 'weight', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'weight', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'weight', + type: 'integer', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + { + name: 'weight', + type: 'long', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics'], + supportedOptions: undefined, + validate: undefined, + examples: [ + 'FROM employees\n| STATS w_avg = WEIGHTED_AVG(salary, height) by languages\n| EVAL w_avg = ROUND(w_avg)\n| KEEP w_avg, languages\n| SORT languages', + ], +}; +export const aggregationFunctionDefinitions = [ + avgDefinition, + countDefinition, + countDistinctDefinition, + maxDefinition, + medianDefinition, + medianAbsoluteDeviationDefinition, + minDefinition, + percentileDefinition, + stCentroidAggDefinition, + sumDefinition, + topDefinition, + valuesDefinition, + weightedAvgDefinition, +]; diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts similarity index 97% rename from packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts rename to packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts index 9cf2245fc2fad..3f5718b5417ba 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts @@ -26,10 +26,10 @@ * */ -import type { ESQLFunction } from '@kbn/esql-ast'; import { i18n } from '@kbn/i18n'; -import { isLiteralItem } from '../shared/helpers'; -import type { FunctionDefinition } from './types'; +import type { ESQLFunction } from '@kbn/esql-ast'; +import type { FunctionDefinition } from '../types'; +import { isLiteralItem } from '../../shared/helpers'; // Do not edit this manually... generated by scripts/generate_function_definitions.ts const absDefinition: FunctionDefinition = { @@ -1088,14 +1088,14 @@ const coshDefinition: FunctionDefinition = { type: 'eval', name: 'cosh', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cosh', { - defaultMessage: 'Returns the hyperbolic cosine of an angle.', + defaultMessage: 'Returns the hyperbolic cosine of a number.', }), alias: undefined, signatures: [ { params: [ { - name: 'angle', + name: 'number', type: 'double', optional: false, }, @@ -1105,7 +1105,7 @@ const coshDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'integer', optional: false, }, @@ -1115,7 +1115,7 @@ const coshDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'long', optional: false, }, @@ -1125,7 +1125,7 @@ const coshDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'unsigned_long', optional: false, }, @@ -4026,6 +4026,68 @@ const mvMedianDefinition: FunctionDefinition = { ], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const mvMedianAbsoluteDeviationDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_median_absolute_deviation', + description: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.definitions.mv_median_absolute_deviation', + { + defaultMessage: + "Converts a multivalued field into a single valued field containing the median absolute deviation.\n\nIt is calculated as the median of each data point's deviation from the median of the entire sample. That is, for a random variable `X`, the median absolute deviation is `median(|median(X) - X|)`.", + } + ), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'double', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'integer', + }, + { + params: [ + { + name: 'number', + type: 'long', + optional: false, + }, + ], + returnType: 'long', + }, + { + params: [ + { + name: 'number', + type: 'unsigned_long', + optional: false, + }, + ], + returnType: 'unsigned_long', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW values = [0, 2, 5, 6]\n| EVAL median_absolute_deviation = MV_MEDIAN_ABSOLUTE_DEVIATION(values), median = MV_MEDIAN(values)', + ], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const mvMinDefinition: FunctionDefinition = { type: 'eval', @@ -5849,7 +5911,7 @@ const sinDefinition: FunctionDefinition = { type: 'eval', name: 'sin', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sin', { - defaultMessage: 'Returns ths Sine trigonometric function of an angle.', + defaultMessage: 'Returns the sine of an angle.', }), alias: undefined, signatures: [ @@ -5905,14 +5967,14 @@ const sinhDefinition: FunctionDefinition = { type: 'eval', name: 'sinh', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sinh', { - defaultMessage: 'Returns the hyperbolic sine of an angle.', + defaultMessage: 'Returns the hyperbolic sine of a number.', }), alias: undefined, signatures: [ { params: [ { - name: 'angle', + name: 'number', type: 'double', optional: false, }, @@ -5922,7 +5984,7 @@ const sinhDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'integer', optional: false, }, @@ -5932,7 +5994,7 @@ const sinhDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'long', optional: false, }, @@ -5942,7 +6004,7 @@ const sinhDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'unsigned_long', optional: false, }, @@ -5956,6 +6018,32 @@ const sinhDefinition: FunctionDefinition = { examples: ['ROW a=1.8 \n| EVAL sinh=SINH(a)'], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const spaceDefinition: FunctionDefinition = { + type: 'eval', + name: 'space', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.space', { + defaultMessage: 'Returns a string made of `number` spaces.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'integer', + optional: false, + }, + ], + returnType: 'keyword', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW message = CONCAT("Hello", SPACE(1), "World!");'], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const splitDefinition: FunctionDefinition = { type: 'eval', @@ -6915,7 +7003,7 @@ const tanDefinition: FunctionDefinition = { type: 'eval', name: 'tan', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.tan', { - defaultMessage: 'Returns the Tangent trigonometric function of an angle.', + defaultMessage: 'Returns the tangent of an angle.', }), alias: undefined, signatures: [ @@ -6971,14 +7059,14 @@ const tanhDefinition: FunctionDefinition = { type: 'eval', name: 'tanh', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.tanh', { - defaultMessage: 'Returns the Tangent hyperbolic function of an angle.', + defaultMessage: 'Returns the hyperbolic tangent of a number.', }), alias: undefined, signatures: [ { params: [ { - name: 'angle', + name: 'number', type: 'double', optional: false, }, @@ -6988,7 +7076,7 @@ const tanhDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'integer', optional: false, }, @@ -6998,7 +7086,7 @@ const tanhDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'long', optional: false, }, @@ -7008,7 +7096,7 @@ const tanhDefinition: FunctionDefinition = { { params: [ { - name: 'angle', + name: 'number', type: 'unsigned_long', optional: false, }, @@ -7279,6 +7367,54 @@ const toCartesianshapeDefinition: FunctionDefinition = { ], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const toDateperiodDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_dateperiod', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_dateperiod', { + defaultMessage: 'Converts an input value into a `date_period` value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'date_period', + optional: false, + }, + ], + returnType: 'date_period', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'date_period', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'date_period', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'row x = "2024-01-01"::datetime | eval y = x + "3 DAYS"::date_period, z = x - to_dateperiod("3 days");', + ], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const toDatetimeDefinition: FunctionDefinition = { type: 'eval', @@ -8182,6 +8318,54 @@ const toStringDefinition: FunctionDefinition = { examples: ['ROW a=10\n| EVAL j = TO_STRING(a)', 'ROW a=[10, 9, 8]\n| EVAL j = TO_STRING(a)'], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const toTimedurationDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_timeduration', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_timeduration', { + defaultMessage: 'Converts an input value into a `time_duration` value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + ], + returnType: 'time_duration', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + ], + returnType: 'time_duration', + }, + { + params: [ + { + name: 'field', + type: 'time_duration', + optional: false, + }, + ], + returnType: 'time_duration', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'row x = "2024-01-01"::datetime | eval y = x + "3 hours"::time_duration, z = x - to_timeduration("3 hours");', + ], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const toUnsignedLongDefinition: FunctionDefinition = { type: 'eval', @@ -8436,7 +8620,7 @@ const caseDefinition: FunctionDefinition = { 'from index | eval type = case(languages <= 1, "monolingual", languages <= 2, "bilingual", "polyglot")', ], }; -export const evalFunctionDefinitions = [ +export const scalarFunctionDefinitions = [ absDefinition, acosDefinition, asinDefinition, @@ -8477,6 +8661,7 @@ export const evalFunctionDefinitions = [ mvLastDefinition, mvMaxDefinition, mvMedianDefinition, + mvMedianAbsoluteDeviationDefinition, mvMinDefinition, mvPercentileDefinition, mvPseriesWeightedSumDefinition, @@ -8495,6 +8680,7 @@ export const evalFunctionDefinitions = [ signumDefinition, sinDefinition, sinhDefinition, + spaceDefinition, splitDefinition, sqrtDefinition, stContainsDefinition, @@ -8513,6 +8699,7 @@ export const evalFunctionDefinitions = [ toBooleanDefinition, toCartesianpointDefinition, toCartesianshapeDefinition, + toDateperiodDefinition, toDatetimeDefinition, toDegreesDefinition, toDoubleDefinition, @@ -8524,6 +8711,7 @@ export const evalFunctionDefinitions = [ toLowerDefinition, toRadiansDefinition, toStringDefinition, + toTimedurationDefinition, toUnsignedLongDefinition, toUpperDefinition, toVersionDefinition, diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts index 0ac850ef4862f..a6e297771cebe 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts @@ -120,7 +120,6 @@ export interface FunctionDefinition { name: string; type: FunctionParameterType; optional?: boolean; - noNestingFunctions?: boolean; supportsWildcard?: boolean; /** * If set, this parameter does not accept a field. It only accepts a constant, diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts index 052ceb6f18fe0..0a7a2824d7b2e 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts @@ -19,10 +19,10 @@ import type { ESQLTimeInterval, } from '@kbn/esql-ast'; import { ESQLInlineCast, ESQLParamLiteral } from '@kbn/esql-ast/src/types'; -import { statsAggregationFunctionDefinitions } from '../definitions/aggs'; +import { aggregationFunctionDefinitions } from '../definitions/generated/aggregation_functions'; import { builtinFunctions } from '../definitions/builtin'; import { commandDefinitions } from '../definitions/commands'; -import { evalFunctionDefinitions } from '../definitions/functions'; +import { scalarFunctionDefinitions } from '../definitions/generated/scalar_functions'; import { groupingFunctionDefinitions } from '../definitions/grouping'; import { getTestFunctions } from './test_functions'; import { getFunctionSignatures } from '../definitions/helpers'; @@ -141,8 +141,8 @@ function buildFunctionLookup() { if (!fnLookups || getTestFunctions().length) { fnLookups = builtinFunctions .concat( - evalFunctionDefinitions, - statsAggregationFunctionDefinitions, + scalarFunctionDefinitions, + aggregationFunctionDefinitions, groupingFunctionDefinitions, getTestFunctions() ) diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/functions.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/functions.test.ts index 61a4d66a3a65f..9cf211315757e 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/functions.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/__tests__/functions.test.ts @@ -141,6 +141,60 @@ describe('function validation', () => { }); }); + describe('special parameter types', () => { + it('any type', async () => { + const testFn: FunctionDefinition = { + name: 'test', + type: 'eval', + description: '', + supportedCommands: ['eval'], + signatures: [ + { + params: [{ name: 'arg1', type: 'any' }], + returnType: 'integer', + }, + ], + }; + + setTestFunctions([testFn]); + + const { expectErrors } = await setup(); + + await expectErrors('FROM a_index | EVAL TEST(1)', []); + await expectErrors('FROM a_index | EVAL TEST("keyword")', []); + await expectErrors('FROM a_index | EVAL TEST(2.)', []); + await expectErrors('FROM a_index | EVAL TEST(to_cartesianpoint(""))', []); + await expectErrors('FROM a_index | EVAL TEST(NOW())', []); + }); + + it('list type', async () => { + const testFn: FunctionDefinition = { + name: 'in', + type: 'builtin', + description: '', + supportedCommands: ['row'], + signatures: [ + { + params: [ + { name: 'arg1', type: 'keyword' }, + { name: 'arg2', type: 'keyword[]' }, + ], + returnType: 'boolean', + }, + ], + }; + + setTestFunctions([testFn]); + + const { expectErrors } = await setup(); + + await expectErrors('ROW "a" IN ("a", "b", "c")', []); + await expectErrors('ROW "a" IN (1, "b", "c")', [ + 'Argument of [in] must be [keyword[]], found value [(1, "b", "c")] type [(integer, string, string)]', + ]); + }); + }); + it('checks types by signature', async () => { const testFn: FunctionDefinition = { name: 'test', @@ -605,16 +659,28 @@ describe('function validation', () => { supportedCommands: ['eval'], signatures: [ { - params: [{ name: 'arg1', type: 'integer' }], + params: [{ name: 'arg1', type: 'keyword' }], returnType: 'integer', }, ], }, + { + name: 'test2', + type: 'eval', + description: '', + supportedCommands: ['eval'], + signatures: [ + { + params: [{ name: 'arg1', type: 'integer' }], + returnType: 'keyword', + }, + ], + }, ]); const { expectErrors } = await setup(); - await expectErrors('FROM a_index | EVAL TEST(TEST(TEST(1)))', []); + await expectErrors('FROM a_index | EVAL TEST(TEST2(TEST(TEST2(1))))', []); }); it("doesn't allow nested aggregation functions", async () => { @@ -626,7 +692,7 @@ describe('function validation', () => { supportedCommands: ['stats'], signatures: [ { - params: [{ name: 'arg1', type: 'keyword', noNestingFunctions: true }], + params: [{ name: 'arg1', type: 'keyword' }], returnType: 'keyword', }, ], diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index fd04d1f5646d7..1eb861168a13a 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -9685,27990 +9685,6 @@ ], "warning": [] }, - { - "query": "row var = abs(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row abs(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = abs(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = abs(5)", - "error": [], - "warning": [] - }, - { - "query": "row abs(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = abs(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = abs(true)", - "error": [ - "Argument of [abs] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where abs(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where abs(booleanField) > 0", - "error": [ - "Argument of [abs] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where abs(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where abs(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where abs(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = abs(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = abs(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(booleanField)", - "error": [ - "Argument of [abs] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = abs(*)", - "error": [ - "Using wildcards (*) in abs is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = abs(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = abs(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = abs(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = abs(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(doubleField, extraArg)", - "error": [ - "Error: [abs] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort abs(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval abs(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row acos(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(5)", - "error": [], - "warning": [] - }, - { - "query": "row acos(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = acos(true)", - "error": [ - "Argument of [acos] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where acos(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where acos(booleanField) > 0", - "error": [ - "Argument of [acos] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where acos(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where acos(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where acos(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = acos(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval acos(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = acos(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval acos(booleanField)", - "error": [ - "Argument of [acos] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = acos(*)", - "error": [ - "Using wildcards (*) in acos is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = acos(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval acos(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = acos(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = acos(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval acos(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = acos(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval acos(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval acos(doubleField, extraArg)", - "error": [ - "Error: [acos] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort acos(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval acos(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval acos(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = asin(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row asin(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = asin(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = asin(5)", - "error": [], - "warning": [] - }, - { - "query": "row asin(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = asin(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = asin(true)", - "error": [ - "Argument of [asin] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where asin(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where asin(booleanField) > 0", - "error": [ - "Argument of [asin] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where asin(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where asin(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where asin(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = asin(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval asin(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = asin(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval asin(booleanField)", - "error": [ - "Argument of [asin] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = asin(*)", - "error": [ - "Using wildcards (*) in asin is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = asin(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval asin(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = asin(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = asin(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval asin(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = asin(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval asin(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval asin(doubleField, extraArg)", - "error": [ - "Error: [asin] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort asin(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval asin(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval asin(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row atan(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = atan(5)", - "error": [], - "warning": [] - }, - { - "query": "row atan(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = atan(true)", - "error": [ - "Argument of [atan] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where atan(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan(booleanField) > 0", - "error": [ - "Argument of [atan] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where atan(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan(booleanField)", - "error": [ - "Argument of [atan] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = atan(*)", - "error": [ - "Using wildcards (*) in atan is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = atan(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan(doubleField, extraArg)", - "error": [ - "Error: [atan] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort atan(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval atan(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row atan2(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(to_double(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row atan2(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(to_double(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(to_double(true), 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row atan2(5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(to_integer(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row atan2(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(to_integer(true), 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(5, to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(5, to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = atan2(true, true)", - "error": [ - "Argument of [atan2] must be [double], found value [true] type [boolean]", - "Argument of [atan2] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where atan2(doubleField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(booleanField, booleanField) > 0", - "error": [ - "Argument of [atan2] must be [double], found value [booleanField] type [boolean]", - "Argument of [atan2] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where atan2(doubleField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(doubleField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(doubleField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(integerField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(integerField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(integerField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(longField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(longField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(longField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(longField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(unsignedLongField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(unsignedLongField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(unsignedLongField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where atan2(unsignedLongField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(to_double(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(booleanField, booleanField)", - "error": [ - "Argument of [atan2] must be [double], found value [booleanField] type [boolean]", - "Argument of [atan2] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(to_double(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(to_double(booleanField), longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(doubleField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(doubleField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(to_double(booleanField), unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(to_integer(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(to_integer(booleanField), longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(integerField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(integerField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(to_integer(booleanField), unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(longField, to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(longField, to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(longField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(longField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(unsignedLongField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(unsignedLongField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(unsignedLongField, to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(unsignedLongField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(unsignedLongField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(unsignedLongField, to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(unsignedLongField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(unsignedLongField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = atan2(unsignedLongField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(unsignedLongField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(doubleField, doubleField, extraArg)", - "error": [ - "Error: [atan2] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort atan2(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval atan2(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval atan2(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = cbrt(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row cbrt(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = cbrt(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = cbrt(5)", - "error": [], - "warning": [] - }, - { - "query": "row cbrt(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = cbrt(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = cbrt(true)", - "error": [ - "Argument of [cbrt] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where cbrt(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cbrt(booleanField) > 0", - "error": [ - "Argument of [cbrt] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where cbrt(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cbrt(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cbrt(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cbrt(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cbrt(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cbrt(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cbrt(booleanField)", - "error": [ - "Argument of [cbrt] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = cbrt(*)", - "error": [ - "Using wildcards (*) in cbrt is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = cbrt(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cbrt(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cbrt(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cbrt(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cbrt(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cbrt(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cbrt(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cbrt(doubleField, extraArg)", - "error": [ - "Error: [cbrt] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort cbrt(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cbrt(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval cbrt(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = ceil(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row ceil(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = ceil(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = ceil(5)", - "error": [], - "warning": [] - }, - { - "query": "row ceil(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = ceil(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = ceil(true)", - "error": [ - "Argument of [ceil] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where ceil(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where ceil(booleanField) > 0", - "error": [ - "Argument of [ceil] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where ceil(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where ceil(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where ceil(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ceil(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ceil(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ceil(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ceil(booleanField)", - "error": [ - "Argument of [ceil] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ceil(*)", - "error": [ - "Using wildcards (*) in ceil is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ceil(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ceil(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ceil(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ceil(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ceil(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ceil(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ceil(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ceil(doubleField, extraArg)", - "error": [ - "Error: [ceil] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort ceil(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ceil(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval ceil(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = cidr_match(to_ip(\"127.0.0.1\"), \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row cidr_match(to_ip(\"127.0.0.1\"), \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = cidr_match(to_ip(to_ip(\"127.0.0.1\")), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = cidr_match(true, true)", - "error": [ - "Argument of [cidr_match] must be [ip], found value [true] type [boolean]", - "Argument of [cidr_match] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = cidr_match(ipField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cidr_match(ipField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cidr_match(to_ip(ipField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cidr_match(booleanField, booleanField)", - "error": [ - "Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]", - "Argument of [cidr_match] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = cidr_match(ipField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cidr_match(ipField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort cidr_match(ipField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cidr_match(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval cidr_match(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(true)", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(true, true)", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(true, true)", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_boolean(true), to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row coalesce(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = coalesce(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row coalesce(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = coalesce(5)", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_version(\"a\"), to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where coalesce(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where coalesce(counterDoubleField) > 0", - "error": [ - "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | where coalesce(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where coalesce(counterDoubleField, counterDoubleField) > 0", - "error": [ - "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]", - "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | where coalesce(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where coalesce(longField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(counterDoubleField)", - "error": [ - "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_boolean(booleanField), to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(counterDoubleField, counterDoubleField)", - "error": [ - "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]", - "Argument of [coalesce] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_datetime(dateField), to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(ipField, ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(ipField, ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_ip(ipField), to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(versionField, versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(versionField, versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(to_version(keywordField), to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort coalesce(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval coalesce(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(\"2022\", \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval coalesce(concat(\"20\", \"22\"), concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = coalesce(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = concat(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row concat(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = concat(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = concat(true, true)", - "error": [ - "Argument of [concat] must be [keyword], found value [true] type [boolean]", - "Argument of [concat] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = concat(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval concat(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval concat(booleanField, booleanField)", - "error": [ - "Argument of [concat] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [concat] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = concat(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval concat(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = concat(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval concat(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = concat(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval concat(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort concat(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval concat(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval concat(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = cos(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row cos(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = cos(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = cos(5)", - "error": [], - "warning": [] - }, - { - "query": "row cos(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = cos(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = cos(true)", - "error": [ - "Argument of [cos] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where cos(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cos(booleanField) > 0", - "error": [ - "Argument of [cos] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where cos(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cos(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cos(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cos(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cos(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cos(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cos(booleanField)", - "error": [ - "Argument of [cos] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = cos(*)", - "error": [ - "Using wildcards (*) in cos is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = cos(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cos(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cos(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cos(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cos(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cos(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cos(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cos(doubleField, extraArg)", - "error": [ - "Error: [cos] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort cos(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cos(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval cos(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = cosh(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row cosh(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = cosh(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = cosh(5)", - "error": [], - "warning": [] - }, - { - "query": "row cosh(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = cosh(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = cosh(true)", - "error": [ - "Argument of [cosh] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where cosh(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cosh(booleanField) > 0", - "error": [ - "Argument of [cosh] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where cosh(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cosh(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where cosh(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cosh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cosh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cosh(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cosh(booleanField)", - "error": [ - "Argument of [cosh] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = cosh(*)", - "error": [ - "Using wildcards (*) in cosh is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = cosh(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cosh(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cosh(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cosh(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cosh(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = cosh(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cosh(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cosh(doubleField, extraArg)", - "error": [ - "Error: [cosh] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort cosh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval cosh(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval cosh(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_diff(\"year\", dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(\"year\", dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_diff(\"year\", to_datetime(dateField), to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [date_diff] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]", - "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_diff(textField, dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(textField, dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_diff(to_string(booleanField), to_datetime(dateField), to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(\"year\", dateField, dateField, extraArg)", - "error": [ - "Error: [date_diff] function expects exactly 3 arguments, got 4." - ], - "warning": [] - }, - { - "query": "from a_index | sort date_diff(\"year\", dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval date_diff(nullVar, nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(\"year\", \"2022\", \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(\"year\", concat(\"20\", \"22\"), concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(textField, \"2022\", \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_diff(textField, concat(\"20\", \"22\"), concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [date_diff] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_diff(to_string(booleanField), dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = date_extract(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row date_extract(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = date_extract(true, true)", - "error": [ - "Argument of [date_extract] must be [keyword], found value [true] type [boolean]", - "Argument of [date_extract] must be [date], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(booleanField, booleanField)", - "error": [ - "Argument of [date_extract] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [date_extract] must be [date], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_extract(textField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(textField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_extract(to_string(booleanField), to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField, extraArg)", - "error": [ - "Error: [date_extract] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval date_extract(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_extract] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(textField, \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_extract(textField, concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_extract] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_extract(to_string(booleanField), dateField)", - "error": [], - "warning": [] - }, - { - "query": "row var = date_format(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row date_format(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = date_format(true, true)", - "error": [ - "Argument of [date_format] must be [keyword], found value [true] type [boolean]", - "Argument of [date_format] must be [date], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_format(keywordField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_format(keywordField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_format(booleanField, booleanField)", - "error": [ - "Argument of [date_format] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [date_format] must be [date], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_format(textField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_format(textField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_format(keywordField, dateField, extraArg)", - "error": [ - "Error: [date_format] function expects no more than 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort date_format(keywordField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_format(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval date_format(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_format(keywordField, \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_format(keywordField, concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_format] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_format(textField, \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_format(textField, concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_format] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_format(to_string(booleanField), dateField)", - "error": [], - "warning": [] - }, - { - "query": "row var = date_parse(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row date_parse(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = date_parse(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = date_parse(true, true)", - "error": [ - "Argument of [date_parse] must be [keyword], found value [true] type [boolean]", - "Argument of [date_parse] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_parse(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_parse(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_parse(booleanField, booleanField)", - "error": [ - "Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [date_parse] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_parse(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_parse(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_parse(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_parse(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_parse(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_parse(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_parse(keywordField, keywordField, extraArg)", - "error": [ - "Error: [date_parse] function expects no more than 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort date_parse(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_parse(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval date_parse(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = date_trunc(1 year, to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row date_trunc(1 year, to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = date_trunc(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "row date_trunc(\"a\", to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "row var = date_trunc(true, true)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]", - "Argument of [date_trunc] must be [date], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_trunc(1 year, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(1 year, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = date_trunc(1 year, to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(booleanField, booleanField)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [booleanField] type [boolean]", - "Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_trunc(textField, dateField)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(textField, dateField)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = date_trunc(textField, to_datetime(dateField))", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", - "error": [ - "Error: [date_trunc] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort date_trunc(1 year, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval date_trunc(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(1 year, \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(1 year, concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(textField, \"2022\")", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]" - ], - "warning": [] - }, - { - "query": "from a_index | eval date_trunc(textField, concat(\"20\", \"22\"))", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [textField] type [text]", - "Argument of [date_trunc] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "row var = date_trunc(1 day, to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row date_trunc(1 day, to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = e()", - "error": [], - "warning": [] - }, - { - "query": "row e()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where e() > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = e()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval e()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval e(extraArg)", - "error": [ - "Error: [e] function expects exactly 0 arguments, got 1." - ], - "warning": [] - }, - { - "query": "from a_index | sort e()", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval e()", - "error": [], - "warning": [] - }, - { - "query": "row var = ends_with(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row ends_with(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = ends_with(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = ends_with(true, true)", - "error": [ - "Argument of [ends_with] must be [keyword], found value [true] type [boolean]", - "Argument of [ends_with] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ends_with(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(booleanField, booleanField)", - "error": [ - "Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [ends_with] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ends_with(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(keywordField, keywordField, extraArg)", - "error": [ - "Error: [ends_with] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort ends_with(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval ends_with(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ends_with(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ends_with(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ends_with(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "row var = exp(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row exp(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = exp(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = exp(5)", - "error": [], - "warning": [] - }, - { - "query": "row exp(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = exp(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = exp(true)", - "error": [ - "Argument of [exp] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where exp(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where exp(booleanField) > 0", - "error": [ - "Argument of [exp] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where exp(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where exp(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where exp(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = exp(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval exp(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = exp(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval exp(booleanField)", - "error": [ - "Argument of [exp] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = exp(*)", - "error": [ - "Using wildcards (*) in exp is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = exp(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval exp(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = exp(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = exp(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval exp(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = exp(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval exp(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval exp(doubleField, extraArg)", - "error": [ - "Error: [exp] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort exp(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval exp(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval exp(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = floor(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row floor(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = floor(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = floor(5)", - "error": [], - "warning": [] - }, - { - "query": "row floor(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = floor(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = floor(true)", - "error": [ - "Argument of [floor] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where floor(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where floor(booleanField) > 0", - "error": [ - "Argument of [floor] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where floor(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where floor(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where floor(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = floor(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval floor(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = floor(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval floor(booleanField)", - "error": [ - "Argument of [floor] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = floor(*)", - "error": [ - "Using wildcards (*) in floor is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = floor(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval floor(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = floor(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = floor(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval floor(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = floor(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval floor(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval floor(doubleField, extraArg)", - "error": [ - "Error: [floor] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort floor(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval floor(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval floor(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = from_base64(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row from_base64(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = from_base64(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = from_base64(true)", - "error": [ - "Argument of [from_base64] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = from_base64(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval from_base64(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = from_base64(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval from_base64(booleanField)", - "error": [ - "Argument of [from_base64] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = from_base64(*)", - "error": [ - "Using wildcards (*) in from_base64 is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = from_base64(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval from_base64(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval from_base64(keywordField, extraArg)", - "error": [ - "Error: [from_base64] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort from_base64(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval from_base64(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval from_base64(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(true)", - "error": [], - "warning": [] - }, - { - "query": "row greatest(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(true, true)", - "error": [], - "warning": [] - }, - { - "query": "row greatest(true, true)", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_boolean(true), to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row greatest(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_double(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(5)", - "error": [], - "warning": [] - }, - { - "query": "row greatest(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row greatest(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row greatest(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row greatest(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_version(\"a\"), to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = greatest(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where greatest(doubleField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where greatest(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where greatest(cartesianPointField) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where greatest(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where greatest(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where greatest(longField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(cartesianPointField)", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_boolean(booleanField), to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(cartesianPointField, cartesianPointField)", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_double(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(ipField, ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(ipField, ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(versionField, versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(versionField, versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = greatest(to_version(keywordField), to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort greatest(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval greatest(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where greatest(cartesianPointField, cartesianPointField) > 0", - "error": [ - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "row var = ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row ip_prefix(to_ip(\"127.0.0.1\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = ip_prefix(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = ip_prefix(true, true, true)", - "error": [ - "Argument of [ip_prefix] must be [ip], found value [true] type [boolean]", - "Argument of [ip_prefix] must be [integer], found value [true] type [boolean]", - "Argument of [ip_prefix] must be [integer], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ip_prefix(ipField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ip_prefix(ipField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ip_prefix(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ip_prefix(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [ip_prefix] must be [ip], found value [booleanField] type [boolean]", - "Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]", - "Argument of [ip_prefix] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval ip_prefix(ipField, integerField, integerField, extraArg)", - "error": [ - "Error: [ip_prefix] function expects exactly 3 arguments, got 4." - ], - "warning": [] - }, - { - "query": "from a_index | sort ip_prefix(ipField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ip_prefix(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval ip_prefix(nullVar, nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = least(true)", - "error": [], - "warning": [] - }, - { - "query": "row least(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(true, true)", - "error": [], - "warning": [] - }, - { - "query": "row least(true, true)", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_boolean(true), to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row least(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_double(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(5)", - "error": [], - "warning": [] - }, - { - "query": "row least(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row least(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row least(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row least(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_version(\"a\"), to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = least(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where least(doubleField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where least(cartesianPointField, cartesianPointField) > 0", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where least(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where least(cartesianPointField) > 0", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where least(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where least(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where least(longField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(cartesianPointField)", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = least(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_boolean(booleanField), to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(cartesianPointField, cartesianPointField)", - "error": [ - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = least(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_double(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(ipField, ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(ipField, ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_ip(ipField), to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(versionField, versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(versionField, versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = least(to_version(keywordField), to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort least(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval least(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval least(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = left(\"a\", 5)", - "error": [], - "warning": [] - }, - { - "query": "row left(\"a\", 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = left(to_string(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = left(true, true)", - "error": [ - "Argument of [left] must be [keyword], found value [true] type [boolean]", - "Argument of [left] must be [integer], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = left(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval left(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval left(booleanField, booleanField)", - "error": [ - "Argument of [left] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [left] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = left(textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval left(textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval left(keywordField, integerField, extraArg)", - "error": [ - "Error: [left] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort left(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval left(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval left(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = length(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row length(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = length(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = length(true)", - "error": [ - "Argument of [length] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = length(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval length(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = length(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval length(booleanField)", - "error": [ - "Argument of [length] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = length(*)", - "error": [ - "Using wildcards (*) in length is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = length(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval length(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval length(keywordField, extraArg)", - "error": [ - "Error: [length] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort length(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval length(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval length(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = locate(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row locate(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = locate(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = locate(\"a\", \"a\", 5)", - "error": [], - "warning": [] - }, - { - "query": "row locate(\"a\", \"a\", 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = locate(to_string(true), to_string(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = locate(true, true, true)", - "error": [ - "Argument of [locate] must be [keyword], found value [true] type [boolean]", - "Argument of [locate] must be [keyword], found value [true] type [boolean]", - "Argument of [locate] must be [integer], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(booleanField, booleanField)", - "error": [ - "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(keywordField, keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(keywordField, keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [locate] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [locate] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(keywordField, textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(keywordField, textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(textField, keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(textField, keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = locate(textField, textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(textField, textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(keywordField, keywordField, integerField, extraArg)", - "error": [ - "Error: [locate] function expects no more than 3 arguments, got 4." - ], - "warning": [] - }, - { - "query": "from a_index | sort locate(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval locate(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval locate(nullVar, nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row log(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row log(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(to_double(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row log(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(to_double(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log(to_double(true), 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(5)", - "error": [], - "warning": [] - }, - { - "query": "row log(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log(5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row log(5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(to_integer(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row log(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log(to_integer(true), 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log(5, to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log(5, to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log(true, true)", - "error": [ - "Argument of [log] must be [double], found value [true] type [boolean]", - "Argument of [log] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where log(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(booleanField) > 0", - "error": [ - "Argument of [log] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where log(doubleField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(booleanField, booleanField) > 0", - "error": [ - "Argument of [log] must be [double], found value [booleanField] type [boolean]", - "Argument of [log] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where log(doubleField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(doubleField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(doubleField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(integerField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(integerField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(integerField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(longField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(longField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(longField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(longField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(unsignedLongField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(unsignedLongField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(unsignedLongField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log(unsignedLongField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(booleanField)", - "error": [ - "Argument of [log] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = log(*)", - "error": [ - "Using wildcards (*) in log is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = log(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_double(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(booleanField, booleanField)", - "error": [ - "Argument of [log] must be [double], found value [booleanField] type [boolean]", - "Argument of [log] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = log(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_double(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_double(booleanField), longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(doubleField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(doubleField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_double(booleanField), unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_integer(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_integer(booleanField), longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(integerField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(integerField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_integer(booleanField), unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(longField, to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(longField, to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(longField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(longField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(unsignedLongField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(unsignedLongField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(unsignedLongField, to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(unsignedLongField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(unsignedLongField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(unsignedLongField, to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(unsignedLongField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(unsignedLongField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(unsignedLongField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(unsignedLongField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(doubleField, doubleField, extraArg)", - "error": [ - "Error: [log] function expects no more than 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort log(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval log(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = log10(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row log10(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log10(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log10(5)", - "error": [], - "warning": [] - }, - { - "query": "row log10(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = log10(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = log10(true)", - "error": [ - "Argument of [log10] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where log10(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log10(booleanField) > 0", - "error": [ - "Argument of [log10] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where log10(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log10(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where log10(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log10(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log10(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log10(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log10(booleanField)", - "error": [ - "Argument of [log10] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = log10(*)", - "error": [ - "Using wildcards (*) in log10 is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = log10(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log10(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log10(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log10(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log10(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log10(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log10(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log10(doubleField, extraArg)", - "error": [ - "Error: [log10] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort log10(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log10(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval log10(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = ltrim(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row ltrim(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = ltrim(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = ltrim(true)", - "error": [ - "Argument of [ltrim] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ltrim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ltrim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ltrim(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ltrim(booleanField)", - "error": [ - "Argument of [ltrim] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ltrim(*)", - "error": [ - "Using wildcards (*) in ltrim is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = ltrim(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ltrim(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ltrim(keywordField, extraArg)", - "error": [ - "Error: [ltrim] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort ltrim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval ltrim(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval ltrim(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(true, true)", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(true, true)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_boolean(true), to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row mv_append(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_append(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(to_datetime(\"2021-01-01T00:00:00Z\"), to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_double(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row mv_append(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_append(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_version(\"a\"), to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_append(doubleField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_append(counterDoubleField, counterDoubleField) > 0", - "error": [ - "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]", - "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_append(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_append(longField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_boolean(booleanField), to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(counterDoubleField, counterDoubleField)", - "error": [ - "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]", - "Argument of [mv_append] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(dateField, dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_datetime(dateField), to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_double(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(ipField, ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(ipField, ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_ip(ipField), to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(versionField, versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(versionField, versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_append(to_version(keywordField), to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(booleanField, booleanField, extraArg)", - "error": [ - "Error: [mv_append] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_append(booleanField, booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_append(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(\"2022\", \"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_append(concat(\"20\", \"22\"), concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_append(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_append(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_avg(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_avg(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_avg(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_avg(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_avg(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_avg(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_avg(true)", - "error": [ - "Argument of [mv_avg] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_avg(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_avg(booleanField) > 0", - "error": [ - "Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_avg(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_avg(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_avg(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_avg(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_avg(booleanField)", - "error": [ - "Argument of [mv_avg] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_avg(*)", - "error": [ - "Using wildcards (*) in mv_avg is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_avg(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_avg(doubleField, extraArg)", - "error": [ - "Error: [mv_avg] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_avg(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_avg(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_concat(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_concat(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_concat(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_concat(true, true)", - "error": [ - "Argument of [mv_concat] must be [keyword], found value [true] type [boolean]", - "Argument of [mv_concat] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_concat(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_concat(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_concat(booleanField, booleanField)", - "error": [ - "Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [mv_concat] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_concat(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_concat(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_concat(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_concat(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_concat(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_concat(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_concat(keywordField, keywordField, extraArg)", - "error": [ - "Error: [mv_concat] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_concat(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_concat(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_concat(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(true)", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row mv_count(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_count(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_count(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_count(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row mv_count(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_count(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_count(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_count(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(booleanField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(counterDoubleField) > 0", - "error": [ - "Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_count(cartesianPointField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(cartesianShapeField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(dateField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(geoPointField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(geoShapeField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(ipField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(keywordField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(textField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_count(versionField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(counterDoubleField)", - "error": [ - "Argument of [mv_count] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(*)", - "error": [ - "Using wildcards (*) in mv_count is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_count(to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(booleanField, extraArg)", - "error": [ - "Error: [mv_count] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_count(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_count(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_count(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_count(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_count(to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(true)", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row mv_dedupe(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row mv_dedupe(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_dedupe(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_dedupe(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_dedupe(counterDoubleField) > 0", - "error": [ - "Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_dedupe(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_dedupe(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(counterDoubleField)", - "error": [ - "Argument of [mv_dedupe] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(*)", - "error": [ - "Using wildcards (*) in mv_dedupe is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_dedupe(to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(booleanField, extraArg)", - "error": [ - "Error: [mv_dedupe] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_dedupe(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_dedupe(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_dedupe(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_dedupe(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_dedupe(to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(true)", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row mv_first(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_first(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_first(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_first(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row mv_first(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_first(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_first(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_first(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_first(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_first(counterDoubleField) > 0", - "error": [ - "Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_first(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_first(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_first(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(counterDoubleField)", - "error": [ - "Argument of [mv_first] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(*)", - "error": [ - "Using wildcards (*) in mv_first is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_first(to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(booleanField, extraArg)", - "error": [ - "Error: [mv_first] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_first(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_first(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_first(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_first(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(true)", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row mv_last(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_last(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_last(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_last(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row mv_last(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_last(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_last(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_last(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_last(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_last(counterDoubleField) > 0", - "error": [ - "Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_last(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_last(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_last(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(counterDoubleField)", - "error": [ - "Argument of [mv_last] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(*)", - "error": [ - "Using wildcards (*) in mv_last is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_last(to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(booleanField, extraArg)", - "error": [ - "Error: [mv_last] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_last(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_last(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_last(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_last(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(true)", - "error": [], - "warning": [] - }, - { - "query": "row mv_max(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_max(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_max(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_max(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_max(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_max(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_max(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_max(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [mv_max] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_max(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_max(cartesianPointField) > 0", - "error": [ - "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_max(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_max(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_max(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(cartesianPointField)", - "error": [ - "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(*)", - "error": [ - "Using wildcards (*) in mv_max is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_max(to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(booleanField, extraArg)", - "error": [ - "Error: [mv_max] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_max(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_max(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_max(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_median(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_median(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_median(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_median(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_median(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_median(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_median(true)", - "error": [ - "Argument of [mv_median] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_median(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_median(booleanField) > 0", - "error": [ - "Argument of [mv_median] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_median(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_median(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_median(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_median(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_median(booleanField)", - "error": [ - "Argument of [mv_median] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_median(*)", - "error": [ - "Using wildcards (*) in mv_median is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_median(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_median(doubleField, extraArg)", - "error": [ - "Error: [mv_median] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_median(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_median(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(true)", - "error": [], - "warning": [] - }, - { - "query": "row mv_min(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_min(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_min(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_min(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_min(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_min(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row mv_min(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_min(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [mv_min] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_min(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_min(cartesianPointField) > 0", - "error": [ - "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_min(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_min(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_min(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(cartesianPointField)", - "error": [ - "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(*)", - "error": [ - "Using wildcards (*) in mv_min is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_min(to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(booleanField, extraArg)", - "error": [ - "Error: [mv_min] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_min(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_min(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_min(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(true, 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(true, 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(cartesianPointField, 5, 5)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row mv_slice(cartesianPointField, 5, 5)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(true), to_integer(true))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(true), to_integer(true))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_slice(to_datetime(\"2021-01-01T00:00:00Z\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(to_datetime(\"2021-01-01T00:00:00Z\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(5.5, 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(5.5, 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_double(true), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(geoPointField, 5, 5)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row mv_slice(geoPointField, 5, 5)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_slice(to_geopoint(geoPointField), to_integer(true), to_integer(true))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_geoshape(geoPointField), to_integer(true), to_integer(true))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = mv_slice(5, 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(5, 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(\"a\", 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(\"a\", 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_string(true), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(5, to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_version(\"1.0.0\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(to_version(\"1.0.0\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_version(\"a\"), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(5.5, true, true)", - "error": [ - "Argument of [mv_slice] must be [integer], found value [true] type [boolean]", - "Argument of [mv_slice] must be [integer], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_slice(doubleField, integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_slice(counterDoubleField, booleanField, booleanField) > 0", - "error": [ - "Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]", - "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_slice(integerField, integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_slice(longField, integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(booleanField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(booleanField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(counterDoubleField, booleanField, booleanField)", - "error": [ - "Argument of [mv_slice] must be [boolean], found value [counterDoubleField] type [counter_double]", - "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]", - "Argument of [mv_slice] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(cartesianPointField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(cartesianPointField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(cartesianShapeField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(cartesianShapeField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(dateField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(dateField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(doubleField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(doubleField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_double(booleanField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(geoPointField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(geoPointField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(geoShapeField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(geoShapeField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(integerField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(integerField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(ipField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(ipField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(keywordField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(keywordField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(longField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(longField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(longField, to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(textField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(textField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(versionField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(versionField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(to_version(keywordField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(booleanField, integerField, integerField, extraArg)", - "error": [ - "Error: [mv_slice] function expects no more than 3 arguments, got 4." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_slice(booleanField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_slice(nullVar, nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(\"2022\", integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_slice(concat(\"20\", \"22\"), integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_cartesianpoint(\"POINT (30 10)\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(to_cartesianpoint(\"POINT (30 10)\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_datetime(\"2021-01-01T00:00:00Z\"), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_geopoint(\"POINT (30 10)\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_slice(to_geopoint(\"POINT (30 10)\"), 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_slice(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_slice(dateField, to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(true, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_sort(true, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(to_datetime(\"2021-01-01T00:00:00Z\"), \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_sort(to_datetime(\"2021-01-01T00:00:00Z\"), \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(5.5, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_sort(5.5, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(5, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_sort(5, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(\"a\", \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_sort(\"a\", \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(to_version(\"1.0.0\"), \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_sort(to_version(\"1.0.0\"), \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(to_cartesianpoint(\"POINT (30 10)\"), true)", - "error": [ - "Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", - "Argument of [mv_sort] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(booleanField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(booleanField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(dateField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(dateField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(doubleField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(doubleField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(integerField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(integerField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(ipField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(ipField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(keywordField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(keywordField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(longField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(longField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(textField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(textField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(versionField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(versionField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(booleanField, \"asc\", extraArg)", - "error": [ - "Error: [mv_sort] function expects no more than 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_sort(booleanField, \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_sort(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(\"2022\", \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(concat(\"20\", \"22\"), \"asc\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sort(5, \"a\")", - "error": [], - "warning": [ - "Invalid option [\"a\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "row mv_sort(5, \"a\")", - "error": [], - "warning": [ - "Invalid option [\"a\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "row var = mv_sort(\"a\", \"a\")", - "error": [], - "warning": [ - "Invalid option [\"a\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "row mv_sort(\"a\", \"a\")", - "error": [], - "warning": [ - "Invalid option [\"a\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "row var = mv_sort(to_version(\"1.0.0\"), \"a\")", - "error": [], - "warning": [ - "Invalid option [\"a\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "row mv_sort(to_version(\"1.0.0\"), \"a\")", - "error": [], - "warning": [ - "Invalid option [\"a\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "from a_index | eval var = mv_sort(longField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(longField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sort(versionField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sort(versionField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sum(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_sum(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sum(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sum(5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_sum(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sum(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_sum(true)", - "error": [ - "Argument of [mv_sum] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_sum(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_sum(booleanField) > 0", - "error": [ - "Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_sum(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_sum(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_sum(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sum(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sum(booleanField)", - "error": [ - "Argument of [mv_sum] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sum(*)", - "error": [ - "Using wildcards (*) in mv_sum is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sum(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sum(doubleField, extraArg)", - "error": [ - "Error: [mv_sum] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_sum(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_sum(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_zip(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(\"a\", \"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row mv_zip(\"a\", \"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(to_string(true), to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_zip(true, true, true)", - "error": [ - "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]", - "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]", - "Argument of [mv_zip] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(booleanField, booleanField)", - "error": [ - "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(keywordField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(keywordField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [mv_zip] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(keywordField, keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(keywordField, keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(keywordField, textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(keywordField, textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(keywordField, textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(keywordField, textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(textField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(textField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(textField, keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(textField, keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(textField, textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(textField, textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_zip(textField, textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(textField, textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(keywordField, keywordField, keywordField, extraArg)", - "error": [ - "Error: [mv_zip] function expects no more than 3 arguments, got 4." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_zip(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_zip(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_zip(nullVar, nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = now()", - "error": [], - "warning": [] - }, - { - "query": "row now()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = now()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval now()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval now(extraArg)", - "error": [ - "Error: [now] function expects exactly 0 arguments, got 1." - ], - "warning": [] - }, - { - "query": "from a_index | sort now()", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval now()", - "error": [], - "warning": [] - }, - { - "query": "row var = pi()", - "error": [], - "warning": [] - }, - { - "query": "row pi()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pi() > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pi()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pi()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pi(extraArg)", - "error": [ - "Error: [pi] function expects exactly 0 arguments, got 1." - ], - "warning": [] - }, - { - "query": "from a_index | sort pi()", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval pi()", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row pow(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(to_double(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row pow(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(to_double(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(to_double(true), 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row pow(5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(to_integer(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row pow(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(to_integer(true), 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(5, to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(5, to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = pow(true, true)", - "error": [ - "Argument of [pow] must be [double], found value [true] type [boolean]", - "Argument of [pow] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where pow(doubleField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(booleanField, booleanField) > 0", - "error": [ - "Argument of [pow] must be [double], found value [booleanField] type [boolean]", - "Argument of [pow] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where pow(doubleField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(doubleField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(doubleField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(integerField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(integerField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(integerField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(longField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(longField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(longField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(longField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(unsignedLongField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(unsignedLongField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(unsignedLongField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where pow(unsignedLongField, unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(to_double(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(booleanField, booleanField)", - "error": [ - "Argument of [pow] must be [double], found value [booleanField] type [boolean]", - "Argument of [pow] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(to_double(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(to_double(booleanField), longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(doubleField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(doubleField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(to_double(booleanField), unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(to_integer(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(to_integer(booleanField), longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(integerField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(integerField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(to_integer(booleanField), unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(longField, to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(longField, to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(longField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(longField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(unsignedLongField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(unsignedLongField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(unsignedLongField, to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(unsignedLongField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(unsignedLongField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(unsignedLongField, to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(unsignedLongField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(unsignedLongField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = pow(unsignedLongField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(unsignedLongField, unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(doubleField, doubleField, extraArg)", - "error": [ - "Error: [pow] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort pow(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval pow(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval pow(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = repeat(\"a\", 5)", - "error": [], - "warning": [] - }, - { - "query": "row repeat(\"a\", 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = repeat(to_string(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = repeat(true, true)", - "error": [ - "Argument of [repeat] must be [keyword], found value [true] type [boolean]", - "Argument of [repeat] must be [integer], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = repeat(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval repeat(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = repeat(to_string(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval repeat(booleanField, booleanField)", - "error": [ - "Argument of [repeat] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [repeat] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = repeat(textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval repeat(textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval repeat(keywordField, integerField, extraArg)", - "error": [ - "Error: [repeat] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort repeat(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval repeat(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval repeat(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = replace(\"a\", \"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row replace(\"a\", \"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = replace(to_string(true), to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = replace(true, true, true)", - "error": [ - "Argument of [replace] must be [keyword], found value [true] type [boolean]", - "Argument of [replace] must be [keyword], found value [true] type [boolean]", - "Argument of [replace] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(keywordField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(keywordField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [replace] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(keywordField, keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(keywordField, keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(keywordField, textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(keywordField, textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(keywordField, textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(keywordField, textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(textField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(textField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(textField, keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(textField, keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(textField, textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(textField, textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = replace(textField, textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(textField, textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(keywordField, keywordField, keywordField, extraArg)", - "error": [ - "Error: [replace] function expects exactly 3 arguments, got 4." - ], - "warning": [] - }, - { - "query": "from a_index | sort replace(keywordField, keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval replace(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval replace(nullVar, nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = right(\"a\", 5)", - "error": [], - "warning": [] - }, - { - "query": "row right(\"a\", 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = right(to_string(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = right(true, true)", - "error": [ - "Argument of [right] must be [keyword], found value [true] type [boolean]", - "Argument of [right] must be [integer], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = right(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval right(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval right(booleanField, booleanField)", - "error": [ - "Argument of [right] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [right] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = right(textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval right(textField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval right(keywordField, integerField, extraArg)", - "error": [ - "Error: [right] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort right(keywordField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval right(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval right(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = round(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row round(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = round(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = round(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row round(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = round(to_double(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = round(5)", - "error": [], - "warning": [] - }, - { - "query": "row round(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = round(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = round(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row round(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = round(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = round(5, to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = round(true, true)", - "error": [ - "Argument of [round] must be [double], found value [true] type [boolean]", - "Argument of [round] must be [integer], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where round(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where round(booleanField) > 0", - "error": [ - "Argument of [round] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where round(doubleField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where round(booleanField, booleanField) > 0", - "error": [ - "Argument of [round] must be [double], found value [booleanField] type [boolean]", - "Argument of [round] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where round(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where round(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where round(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where round(longField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where round(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(booleanField)", - "error": [ - "Argument of [round] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = round(*)", - "error": [ - "Using wildcards (*) in round is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = round(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(to_double(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(booleanField, booleanField)", - "error": [ - "Argument of [round] must be [double], found value [booleanField] type [boolean]", - "Argument of [round] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = round(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(longField, to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = round(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(doubleField, integerField, extraArg)", - "error": [ - "Error: [round] function expects no more than 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort round(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval round(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval round(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = rtrim(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row rtrim(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = rtrim(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = rtrim(true)", - "error": [ - "Argument of [rtrim] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = rtrim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval rtrim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = rtrim(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval rtrim(booleanField)", - "error": [ - "Argument of [rtrim] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = rtrim(*)", - "error": [ - "Using wildcards (*) in rtrim is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = rtrim(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval rtrim(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval rtrim(keywordField, extraArg)", - "error": [ - "Error: [rtrim] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort rtrim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval rtrim(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval rtrim(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = signum(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row signum(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = signum(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = signum(5)", - "error": [], - "warning": [] - }, - { - "query": "row signum(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = signum(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = signum(true)", - "error": [ - "Argument of [signum] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where signum(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where signum(booleanField) > 0", - "error": [ - "Argument of [signum] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where signum(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where signum(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where signum(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = signum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval signum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = signum(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval signum(booleanField)", - "error": [ - "Argument of [signum] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = signum(*)", - "error": [ - "Using wildcards (*) in signum is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = signum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval signum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = signum(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = signum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval signum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = signum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval signum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval signum(doubleField, extraArg)", - "error": [ - "Error: [signum] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort signum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval signum(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval signum(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = sin(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row sin(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = sin(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = sin(5)", - "error": [], - "warning": [] - }, - { - "query": "row sin(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = sin(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = sin(true)", - "error": [ - "Argument of [sin] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where sin(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sin(booleanField) > 0", - "error": [ - "Argument of [sin] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where sin(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sin(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sin(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sin(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sin(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(booleanField)", - "error": [ - "Argument of [sin] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sin(*)", - "error": [ - "Using wildcards (*) in sin is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sin(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sin(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sin(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sin(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(doubleField, extraArg)", - "error": [ - "Error: [sin] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort sin(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sin(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval sin(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = sinh(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row sinh(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = sinh(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = sinh(5)", - "error": [], - "warning": [] - }, - { - "query": "row sinh(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = sinh(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = sinh(true)", - "error": [ - "Argument of [sinh] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where sinh(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sinh(booleanField) > 0", - "error": [ - "Argument of [sinh] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where sinh(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sinh(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sinh(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sinh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sinh(booleanField)", - "error": [ - "Argument of [sinh] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(*)", - "error": [ - "Using wildcards (*) in sinh is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sinh(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sinh(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sinh(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sinh(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sinh(doubleField, extraArg)", - "error": [ - "Error: [sinh] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort sinh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sinh(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval sinh(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = split(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row split(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = split(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = split(true, true)", - "error": [ - "Argument of [split] must be [keyword], found value [true] type [boolean]", - "Argument of [split] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = split(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval split(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = split(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval split(booleanField, booleanField)", - "error": [ - "Argument of [split] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [split] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = split(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval split(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = split(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval split(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = split(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval split(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval split(keywordField, keywordField, extraArg)", - "error": [ - "Error: [split] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort split(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval split(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval split(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = sqrt(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row sqrt(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = sqrt(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = sqrt(5)", - "error": [], - "warning": [] - }, - { - "query": "row sqrt(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = sqrt(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = sqrt(true)", - "error": [ - "Argument of [sqrt] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where sqrt(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sqrt(booleanField) > 0", - "error": [ - "Argument of [sqrt] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where sqrt(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sqrt(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where sqrt(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sqrt(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sqrt(booleanField)", - "error": [ - "Argument of [sqrt] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(*)", - "error": [ - "Using wildcards (*) in sqrt is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sqrt(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sqrt(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = sqrt(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sqrt(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sqrt(doubleField, extraArg)", - "error": [ - "Error: [sqrt] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort sqrt(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval sqrt(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval sqrt(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_contains(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_contains(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_contains(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(geoPointField, to_geoshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_contains(geoPointField, to_geoshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(true, true)", - "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(booleanField, booleanField)", - "error": [ - "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(geoShapeField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_contains(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval st_contains(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_contains(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_disjoint(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_disjoint(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_disjoint(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(geoPointField, to_geoshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_disjoint(geoPointField, to_geoshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(true, true)", - "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(booleanField, booleanField)", - "error": [ - "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval st_disjoint(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_distance(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_distance(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_distance(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_distance(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_distance(true, true)", - "error": [ - "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_distance] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_distance(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_distance(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_distance(booleanField, booleanField)", - "error": [ - "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_distance] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_distance(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_distance(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_distance(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_distance(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_distance] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_distance(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_distance(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval st_distance(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_distance(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_distance(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_distance(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_distance(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_distance(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_distance(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_intersects(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_intersects(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_intersects(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(geoPointField, to_geoshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_intersects(geoPointField, to_geoshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(true, true)", - "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(booleanField, booleanField)", - "error": [ - "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_intersects(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_intersects(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval st_intersects(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_within(cartesianPointField, cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_within(cartesianPointField, to_cartesianshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]", - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_within(geoPointField, geoPointField)", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(geoPointField, to_geoshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_within(geoPointField, to_geoshape(\"POINT (30 10)\"))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]", - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_within(true, true)", - "error": [ - "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]", - "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(booleanField, booleanField)", - "error": [ - "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]", - "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(geoPointField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(geoShapeField, geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_within(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval st_within(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_within(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_x(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_x(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_x(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_x(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_x(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_x(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_x(true)", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_x(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_x(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_x(booleanField)", - "error": [ - "Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_x(*)", - "error": [ - "Using wildcards (*) in st_x is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_x(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_x(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_x(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_x(cartesianPointField, extraArg)", - "error": [ - "Error: [st_x] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_x(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_x(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval st_x(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_x(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_x(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_x(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_x(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_x(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_x(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_y(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row st_y(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_y(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_y(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row st_y(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_y(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = st_y(true)", - "error": [ - "Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_y(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_y(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_y(booleanField)", - "error": [ - "Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_y(*)", - "error": [ - "Using wildcards (*) in st_y is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_y(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_y(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = st_y(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_y(cartesianPointField, extraArg)", - "error": [ - "Error: [st_y] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_y(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_y(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval st_y(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = st_y(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_y(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_y(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_y(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row st_y(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_y(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = starts_with(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row starts_with(\"a\", \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = starts_with(to_string(true), to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = starts_with(true, true)", - "error": [ - "Argument of [starts_with] must be [keyword], found value [true] type [boolean]", - "Argument of [starts_with] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = starts_with(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval starts_with(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval starts_with(booleanField, booleanField)", - "error": [ - "Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [starts_with] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = starts_with(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval starts_with(textField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval starts_with(keywordField, keywordField, extraArg)", - "error": [ - "Error: [starts_with] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort starts_with(keywordField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval starts_with(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval starts_with(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = starts_with(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval starts_with(keywordField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = starts_with(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval starts_with(textField, keywordField)", - "error": [], - "warning": [] - }, - { - "query": "row var = substring(\"a\", 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row substring(\"a\", 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = substring(to_string(true), to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = substring(true, true, true)", - "error": [ - "Argument of [substring] must be [keyword], found value [true] type [boolean]", - "Argument of [substring] must be [integer], found value [true] type [boolean]", - "Argument of [substring] must be [integer], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = substring(keywordField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval substring(keywordField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval substring(booleanField, booleanField, booleanField)", - "error": [ - "Argument of [substring] must be [keyword], found value [booleanField] type [boolean]", - "Argument of [substring] must be [integer], found value [booleanField] type [boolean]", - "Argument of [substring] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = substring(textField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval substring(textField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval substring(keywordField, integerField, integerField, extraArg)", - "error": [ - "Error: [substring] function expects no more than 3 arguments, got 4." - ], - "warning": [] - }, - { - "query": "from a_index | sort substring(keywordField, integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval substring(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval substring(nullVar, nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = tan(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row tan(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = tan(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = tan(5)", - "error": [], - "warning": [] - }, - { - "query": "row tan(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = tan(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = tan(true)", - "error": [ - "Argument of [tan] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where tan(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where tan(booleanField) > 0", - "error": [ - "Argument of [tan] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where tan(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where tan(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where tan(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tan(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tan(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tan(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tan(booleanField)", - "error": [ - "Argument of [tan] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = tan(*)", - "error": [ - "Using wildcards (*) in tan is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = tan(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tan(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tan(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tan(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tan(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tan(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tan(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tan(doubleField, extraArg)", - "error": [ - "Error: [tan] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort tan(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tan(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval tan(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = tanh(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row tanh(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = tanh(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = tanh(5)", - "error": [], - "warning": [] - }, - { - "query": "row tanh(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = tanh(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = tanh(true)", - "error": [ - "Argument of [tanh] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where tanh(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where tanh(booleanField) > 0", - "error": [ - "Argument of [tanh] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where tanh(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where tanh(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where tanh(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tanh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tanh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tanh(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tanh(booleanField)", - "error": [ - "Argument of [tanh] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = tanh(*)", - "error": [ - "Using wildcards (*) in tanh is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = tanh(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tanh(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tanh(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tanh(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tanh(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tanh(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tanh(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tanh(doubleField, extraArg)", - "error": [ - "Error: [tanh] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort tanh(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tanh(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval tanh(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = tau()", - "error": [], - "warning": [] - }, - { - "query": "row tau()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where tau() > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = tau()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tau()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval tau(extraArg)", - "error": [ - "Error: [tau] function expects exactly 0 arguments, got 1." - ], - "warning": [] - }, - { - "query": "from a_index | sort tau()", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval tau()", - "error": [], - "warning": [] - }, - { - "query": "row var = to_base64(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_base64(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_base64(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_base64(true)", - "error": [ - "Argument of [to_base64] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_base64(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_base64(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_base64(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_base64(booleanField)", - "error": [ - "Argument of [to_base64] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_base64(*)", - "error": [ - "Using wildcards (*) in to_base64 is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_base64(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_base64(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_base64(keywordField, extraArg)", - "error": [ - "Error: [to_base64] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_base64(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_base64(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_base64(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(true)", - "error": [], - "warning": [] - }, - { - "query": "row to_boolean(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_bool(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_boolean(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_bool(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_boolean(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_bool(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_boolean(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_bool(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_boolean(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_bool(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(cartesianPointField)", - "error": [ - "Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(*)", - "error": [ - "Using wildcards (*) in to_boolean is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_bool(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_bool(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_bool(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_bool(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_bool(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_boolean(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_bool(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(booleanField, extraArg)", - "error": [ - "Error: [to_boolean] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_boolean(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_boolean(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_boolean(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianpoint(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row to_cartesianpoint(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_cartesianpoint(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_cartesianpoint(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianpoint(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianpoint(true)", - "error": [ - "Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianpoint(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianpoint(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianpoint(booleanField)", - "error": [ - "Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianpoint(*)", - "error": [ - "Using wildcards (*) in to_cartesianpoint is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianpoint(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianpoint(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianpoint(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianpoint(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianpoint(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)", - "error": [ - "Error: [to_cartesianpoint] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_cartesianpoint(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianpoint(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_cartesianpoint(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianpoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row to_cartesianshape(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_cartesianshape(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(true)", - "error": [ - "Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianshape(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianshape(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianshape(booleanField)", - "error": [ - "Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianshape(*)", - "error": [ - "Using wildcards (*) in to_cartesianshape is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianshape(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianshape(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianshape(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianshape(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianshape(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianshape(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianshape(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianshape(cartesianPointField, extraArg)", - "error": [ - "Error: [to_cartesianshape] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_cartesianshape(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_cartesianshape(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_cartesianshape(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_datetime(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dt(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_datetime(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dt(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_datetime(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dt(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_datetime(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dt(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_datetime(true)", - "error": [ - "Argument of [to_datetime] must be [date], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dt(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(booleanField)", - "error": [ - "Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(*)", - "error": [ - "Using wildcards (*) in to_datetime is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dt(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dt(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dt(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dt(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dt(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_datetime(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dt(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(dateField, extraArg)", - "error": [ - "Error: [to_datetime] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_datetime(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_datetime(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_datetime(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_degrees(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_degrees(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_degrees(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_degrees(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_degrees(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_degrees(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_degrees(true)", - "error": [ - "Argument of [to_degrees] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_degrees(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_degrees(booleanField) > 0", - "error": [ - "Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_degrees(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_degrees(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_degrees(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_degrees(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_degrees(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_degrees(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_degrees(booleanField)", - "error": [ - "Argument of [to_degrees] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_degrees(*)", - "error": [ - "Using wildcards (*) in to_degrees is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_degrees(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_degrees(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_degrees(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_degrees(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_degrees(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_degrees(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_degrees(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_degrees(doubleField, extraArg)", - "error": [ - "Error: [to_degrees] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_degrees(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_degrees(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_degrees(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(true)", - "error": [], - "warning": [] - }, - { - "query": "row to_double(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dbl(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_double(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dbl(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_double(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dbl(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_double(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dbl(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_double(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dbl(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_double(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_double] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_double(booleanField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(cartesianPointField) > 0", - "error": [ - "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_double(counterDoubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(counterIntegerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(counterLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(dateField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(keywordField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(textField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_double(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(cartesianPointField)", - "error": [ - "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(*)", - "error": [ - "Using wildcards (*) in to_double is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_double(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_dbl(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(booleanField, extraArg)", - "error": [ - "Error: [to_double] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_double(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_double(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_double(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geopoint(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row to_geopoint(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_geopoint(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_geopoint(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_geopoint(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geopoint(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geopoint(true)", - "error": [ - "Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geopoint(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geopoint(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geopoint(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geopoint(booleanField)", - "error": [ - "Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geopoint(*)", - "error": [ - "Using wildcards (*) in to_geopoint is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geopoint(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geopoint(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geopoint(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geopoint(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geopoint(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geopoint(geoPointField, extraArg)", - "error": [ - "Error: [to_geopoint] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_geopoint(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geopoint(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_geopoint(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geopoint(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_geopoint(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geopoint(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geoshape(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row to_geoshape(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_geoshape(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_geoshape(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_geoshape(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geoshape(to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_geoshape(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_geoshape(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geoshape(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geoshape(true)", - "error": [ - "Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geoshape(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geoshape(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geoshape(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geoshape(booleanField)", - "error": [ - "Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geoshape(*)", - "error": [ - "Using wildcards (*) in to_geoshape is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geoshape(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geoshape(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geoshape(to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geoshape(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geoshape(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geoshape(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geoshape(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geoshape(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geoshape(geoPointField, extraArg)", - "error": [ - "Error: [to_geoshape] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_geoshape(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_geoshape(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_geoshape(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geoshape(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_geoshape(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geoshape(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geoshape(to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(true)", - "error": [], - "warning": [] - }, - { - "query": "row to_integer(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_int(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_integer(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_int(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_integer(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_int(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_integer(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_int(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_integer(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_int(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_integer(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_integer] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_integer(booleanField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(cartesianPointField) > 0", - "error": [ - "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_integer(counterIntegerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(dateField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(keywordField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(textField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_integer(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(cartesianPointField)", - "error": [ - "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(*)", - "error": [ - "Using wildcards (*) in to_integer is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_int(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(booleanField, extraArg)", - "error": [ - "Error: [to_integer] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_integer(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_integer(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_integer(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ip(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_ip(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ip(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ip(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_ip(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ip(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ip(true)", - "error": [ - "Argument of [to_ip] must be [ip], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ip(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_ip(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ip(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_ip(booleanField)", - "error": [ - "Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ip(*)", - "error": [ - "Using wildcards (*) in to_ip is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ip(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_ip(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ip(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ip(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_ip(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_ip(ipField, extraArg)", - "error": [ - "Error: [to_ip] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_ip(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_ip(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_ip(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(true)", - "error": [], - "warning": [] - }, - { - "query": "row to_long(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_long(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_long(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_long(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_long(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_long(booleanField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(cartesianPointField) > 0", - "error": [ - "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_long(counterIntegerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(counterLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(dateField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(keywordField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(textField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_long(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(cartesianPointField)", - "error": [ - "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(*)", - "error": [ - "Using wildcards (*) in to_long is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_long(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(booleanField, extraArg)", - "error": [ - "Error: [to_long] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_long(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_long(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_long(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_lower(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_lower(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_lower(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_lower(true)", - "error": [ - "Argument of [to_lower] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_lower(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_lower(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_lower(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_lower(booleanField)", - "error": [ - "Argument of [to_lower] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_lower(*)", - "error": [ - "Using wildcards (*) in to_lower is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_lower(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_lower(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_lower(keywordField, extraArg)", - "error": [ - "Error: [to_lower] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_lower(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_lower(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_lower(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_radians(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_radians(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_radians(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_radians(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_radians(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_radians(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_radians(true)", - "error": [ - "Argument of [to_radians] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_radians(doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_radians(booleanField) > 0", - "error": [ - "Argument of [to_radians] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_radians(integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_radians(longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where to_radians(unsignedLongField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_radians(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_radians(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_radians(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_radians(booleanField)", - "error": [ - "Argument of [to_radians] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_radians(*)", - "error": [ - "Using wildcards (*) in to_radians is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_radians(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_radians(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_radians(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_radians(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_radians(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_radians(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_radians(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_radians(doubleField, extraArg)", - "error": [ - "Error: [to_radians] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_radians(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_radians(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_radians(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(true)", - "error": [], - "warning": [] - }, - { - "query": "row to_unsigned_long(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ul(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ulong(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_unsigned_long(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ul(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ulong(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_unsigned_long(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ul(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ulong(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_unsigned_long(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ul(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ulong(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_unsigned_long(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ul(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ulong(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_unsigned_long(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(booleanField) > 0", - "error": [ - "Argument of [>] must be [double], found value [to_unsigned_long(booleanField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(cartesianPointField) > 0", - "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]", - "Argument of [>] must be [double], found value [to_unsigned_long(cartesianPointField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(dateField) > 0", - "error": [ - "Argument of [>] must be [double], found value [to_unsigned_long(dateField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(doubleField) > 0", - "error": [ - "Argument of [>] must be [double], found value [to_unsigned_long(doubleField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(integerField) > 0", - "error": [ - "Argument of [>] must be [double], found value [to_unsigned_long(integerField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(keywordField) > 0", - "error": [ - "Argument of [>] must be [double], found value [to_unsigned_long(keywordField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(longField) > 0", - "error": [ - "Argument of [>] must be [double], found value [to_unsigned_long(longField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(textField) > 0", - "error": [ - "Argument of [>] must be [double], found value [to_unsigned_long(textField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | where to_unsigned_long(unsignedLongField) > 0", - "error": [ - "Argument of [>] must be [double], found value [to_unsigned_long(unsignedLongField)] type [unsigned_long]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ul(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ulong(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(cartesianPointField)", - "error": [ - "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(*)", - "error": [ - "Using wildcards (*) in to_unsigned_long is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ul(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ulong(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ul(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ulong(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ul(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ulong(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ul(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ulong(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ul(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ulong(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ul(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ulong(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ul(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ulong(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(booleanField, extraArg)", - "error": [ - "Error: [to_unsigned_long] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_unsigned_long(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_unsigned_long(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_unsigned_long(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_upper(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_upper(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_upper(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_upper(true)", - "error": [ - "Argument of [to_upper] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_upper(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_upper(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_upper(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_upper(booleanField)", - "error": [ - "Argument of [to_upper] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_upper(*)", - "error": [ - "Using wildcards (*) in to_upper is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_upper(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_upper(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_upper(keywordField, extraArg)", - "error": [ - "Error: [to_upper] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_upper(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_upper(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_upper(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_version(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_version(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ver(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_version(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_version(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_ver(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_version(true)", - "error": [ - "Argument of [to_version] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_version(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_version(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ver(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_version(*)", - "error": [ - "Using wildcards (*) in to_version is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_version(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_version(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ver(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_version(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_version(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_ver(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_version(keywordField, extraArg)", - "error": [ - "Error: [to_version] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_version(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_version(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_version(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = trim(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row trim(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = trim(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = trim(true)", - "error": [ - "Argument of [trim] must be [keyword], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = trim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval trim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = trim(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval trim(booleanField)", - "error": [ - "Argument of [trim] must be [keyword], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = trim(*)", - "error": [ - "Using wildcards (*) in trim is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = trim(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval trim(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval trim(keywordField, extraArg)", - "error": [ - "Error: [trim] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort trim(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval trim(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval trim(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = case(true, \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row case(true, \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = case(to_cartesianpoint(\"POINT (30 10)\"), true)", - "error": [ - "Argument of [case] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = case(booleanField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval case(booleanField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort case(booleanField, textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval case(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval case(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(integerField)) + avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(integerField)) + avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(booleanField)", - "error": [ - "Argument of [avg] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(*)", - "error": [ - "Using wildcards (*) in avg is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(counterIntegerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(counterIntegerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(counterIntegerField)) + avg(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(counterIntegerField)) + avg(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(counterIntegerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(counterIntegerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterIntegerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(doubleField)) + avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(doubleField)) + avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(unsignedLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(unsignedLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(unsignedLongField)) + avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(unsignedLongField)) + avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(unsignedLongField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(unsignedLongField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(unsignedLongField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(longField)) + avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(longField)) + avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(counterLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(counterLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(counterLongField)) + avg(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(counterLongField)) + avg(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(counterLongField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(counterLongField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterLongField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = avg(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(avg(counterDoubleField)) + avg(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(avg(counterDoubleField)) + avg(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(counterDoubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = avg(counterDoubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), avg(counterDoubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = avg(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort avg(integerField)", - "error": [ - "SORT does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(integerField)", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(integerField) > 0", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(counterIntegerField)", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(counterIntegerField) > 0", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(doubleField)", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(doubleField) > 0", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(unsignedLongField)", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(unsignedLongField) > 0", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(longField)", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(longField) > 0", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(counterLongField)", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(counterLongField) > 0", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(counterDoubleField)", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | where avg(counterDoubleField) > 0", - "error": [ - "WHERE does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(integerField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(integerField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(integerField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(integerField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(counterIntegerField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(counterIntegerField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(counterIntegerField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(counterIntegerField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(doubleField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(doubleField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(doubleField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(doubleField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(unsignedLongField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(unsignedLongField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(unsignedLongField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(unsignedLongField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(longField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(longField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(longField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(longField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(counterLongField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(counterLongField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(counterLongField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(counterLongField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(counterDoubleField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = avg(counterDoubleField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(counterDoubleField)", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval avg(counterDoubleField) > 0", - "error": [ - "EVAL does not support function avg" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats avg(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(integerField)) + sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(integerField)) + sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats sum(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats sum(booleanField)", - "error": [ - "Argument of [sum] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(*)", - "error": [ - "Using wildcards (*) in sum is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(counterIntegerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(counterIntegerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(counterIntegerField)) + sum(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(counterIntegerField)) + sum(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(counterIntegerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(counterIntegerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterIntegerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(doubleField)) + sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(doubleField)) + sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(unsignedLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(unsignedLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(unsignedLongField)) + sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(unsignedLongField)) + sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(unsignedLongField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(unsignedLongField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(unsignedLongField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(longField)) + sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(longField)) + sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(counterLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(counterLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(counterLongField)) + sum(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(counterLongField)) + sum(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(counterLongField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(counterLongField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterLongField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = sum(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(sum(counterDoubleField)) + sum(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(sum(counterDoubleField)) + sum(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats sum(counterDoubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = sum(counterDoubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), sum(counterDoubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = sum(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort sum(integerField)", - "error": [ - "SORT does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(integerField)", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(integerField) > 0", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(counterIntegerField)", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(counterIntegerField) > 0", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(doubleField)", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(doubleField) > 0", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(unsignedLongField)", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(unsignedLongField) > 0", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(longField)", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(longField) > 0", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(counterLongField)", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(counterLongField) > 0", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(counterDoubleField)", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | where sum(counterDoubleField) > 0", - "error": [ - "WHERE does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(integerField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(integerField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(integerField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(integerField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(counterIntegerField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(counterIntegerField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(counterIntegerField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(counterIntegerField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(doubleField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(doubleField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(doubleField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(doubleField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(unsignedLongField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(unsignedLongField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(unsignedLongField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(unsignedLongField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(longField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(longField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(longField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(longField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(counterLongField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(counterLongField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(counterLongField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(counterLongField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(counterDoubleField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = sum(counterDoubleField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(counterDoubleField)", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | eval sum(counterDoubleField) > 0", - "error": [ - "EVAL does not support function sum" - ], - "warning": [] - }, - { - "query": "from a_index | stats sum(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats sum(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(integerField)) + median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(integerField)) + median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats median(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats median(booleanField)", - "error": [ - "Argument of [median] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = median(*)", - "error": [ - "Using wildcards (*) in median is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = median(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(counterIntegerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(counterIntegerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(counterIntegerField)) + median(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(counterIntegerField)) + median(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(counterIntegerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(counterIntegerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterIntegerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(doubleField)) + median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(doubleField)) + median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(unsignedLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(unsignedLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(unsignedLongField)) + median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(unsignedLongField)) + median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(unsignedLongField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(unsignedLongField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(unsignedLongField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(longField)) + median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(longField)) + median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(counterLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(counterLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(counterLongField)) + median(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(counterLongField)) + median(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(counterLongField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(counterLongField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterLongField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median(counterDoubleField)) + median(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median(counterDoubleField)) + median(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median(counterDoubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median(counterDoubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median(counterDoubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort median(integerField)", - "error": [ - "SORT does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(integerField)", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(integerField) > 0", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(counterIntegerField)", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(counterIntegerField) > 0", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(doubleField)", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(doubleField) > 0", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(unsignedLongField)", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(unsignedLongField) > 0", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(longField)", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(longField) > 0", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(counterLongField)", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(counterLongField) > 0", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(counterDoubleField)", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | where median(counterDoubleField) > 0", - "error": [ - "WHERE does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(integerField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(integerField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(integerField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(integerField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(counterIntegerField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(counterIntegerField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(counterIntegerField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(counterIntegerField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(doubleField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(doubleField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(doubleField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(doubleField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(unsignedLongField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(unsignedLongField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(unsignedLongField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(unsignedLongField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(longField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(longField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(longField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(longField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(counterLongField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(counterLongField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(counterLongField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(counterLongField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(counterDoubleField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median(counterDoubleField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(counterDoubleField)", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | eval median(counterDoubleField) > 0", - "error": [ - "EVAL does not support function median" - ], - "warning": [] - }, - { - "query": "from a_index | stats median(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats median(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(integerField)) + median_absolute_deviation(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(booleanField)", - "error": [ - "Argument of [median_absolute_deviation] must be [integer], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(*)", - "error": [ - "Using wildcards (*) in median_absolute_deviation is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(counterIntegerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(counterIntegerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(counterIntegerField)) + median_absolute_deviation(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(counterIntegerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterIntegerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterIntegerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(doubleField)) + median_absolute_deviation(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(unsignedLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(unsignedLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(unsignedLongField)) + median_absolute_deviation(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(unsignedLongField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(unsignedLongField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(unsignedLongField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(longField)) + median_absolute_deviation(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(counterLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(counterLongField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(counterLongField)) + median_absolute_deviation(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(counterLongField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterLongField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterLongField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = median_absolute_deviation(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(median_absolute_deviation(counterDoubleField)) + median_absolute_deviation(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(counterDoubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), median_absolute_deviation(counterDoubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = median_absolute_deviation(counterDoubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort median_absolute_deviation(integerField)", - "error": [ - "SORT does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(integerField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(integerField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(counterIntegerField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(counterIntegerField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(doubleField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(doubleField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(unsignedLongField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(unsignedLongField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(longField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(longField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(counterLongField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(counterLongField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(counterDoubleField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | where median_absolute_deviation(counterDoubleField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(integerField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(integerField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(integerField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(integerField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(counterIntegerField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(counterIntegerField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(counterIntegerField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(counterIntegerField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(doubleField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(doubleField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(doubleField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(doubleField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(unsignedLongField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(unsignedLongField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(unsignedLongField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(unsignedLongField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(longField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(longField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(longField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(longField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(counterLongField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(counterLongField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(counterLongField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(counterLongField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(counterDoubleField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = median_absolute_deviation(counterDoubleField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(counterDoubleField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | eval median_absolute_deviation(counterDoubleField) > 0", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], - "warning": [] - }, - { - "query": "from a_index | stats median_absolute_deviation(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats median_absolute_deviation(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(max(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(max(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(max(doubleField)) + max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(max(doubleField)) + max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = max(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = max(doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = max(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats max(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats max(cartesianPointField)", - "error": [ - "Argument of [max] must be [double], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = max(*)", - "error": [ - "Using wildcards (*) in max is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(max(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(max(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(max(longField)) + max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(max(longField)) + max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = max(longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(max(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(max(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(max(integerField)) + max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(max(integerField)) + max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = max(integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), max(integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = max(integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = max(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = max(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = max(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort max(doubleField)", - "error": [ - "SORT does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(doubleField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(doubleField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(longField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(longField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(integerField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(integerField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(dateField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(dateField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(booleanField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(booleanField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(ipField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(ipField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(doubleField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(doubleField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(doubleField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(doubleField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(longField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(longField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(longField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(longField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(integerField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(integerField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(integerField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(integerField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(dateField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(dateField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(dateField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(dateField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(booleanField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(booleanField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(booleanField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(booleanField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(ipField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(ipField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(ipField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(ipField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | stats max(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats max(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = max(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where max(textField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(textField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(textField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(textField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(textField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(textField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = max(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = max(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats max(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where max(versionField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(versionField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(keywordField)", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | where max(keywordField) > 0", - "error": [ - "WHERE does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(versionField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(versionField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(versionField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(versionField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(keywordField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = max(keywordField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(keywordField)", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | eval max(keywordField) > 0", - "error": [ - "EVAL does not support function max" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(min(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(min(doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(min(doubleField)) + min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(min(doubleField)) + min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = min(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = min(doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = min(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats min(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats min(cartesianPointField)", - "error": [ - "Argument of [min] must be [double], found value [cartesianPointField] type [cartesian_point]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = min(*)", - "error": [ - "Using wildcards (*) in min is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(min(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(min(longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(min(longField)) + min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(min(longField)) + min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = min(longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(min(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(min(integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(min(integerField)) + min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(min(integerField)) + min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = min(integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), min(integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = min(integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = min(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = min(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = min(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort min(doubleField)", - "error": [ - "SORT does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(doubleField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(doubleField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(longField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(longField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(integerField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(integerField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(dateField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(dateField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(booleanField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(booleanField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(ipField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(ipField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(doubleField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(doubleField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(doubleField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(doubleField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(longField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(longField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(longField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(longField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(integerField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(integerField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(integerField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(integerField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(dateField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(dateField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(dateField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(dateField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(booleanField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(booleanField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(booleanField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(booleanField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(ipField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(ipField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(ipField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(ipField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | stats min(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats min(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = min(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where min(textField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(textField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(textField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(textField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(textField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(textField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = min(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = min(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats min(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where min(versionField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(versionField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(keywordField)", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | where min(keywordField) > 0", - "error": [ - "WHERE does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(versionField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(versionField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(versionField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(versionField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(keywordField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = min(keywordField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(keywordField)", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | eval min(keywordField) > 0", - "error": [ - "EVAL does not support function min" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = count(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats count(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(count(textField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(count(textField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(count(textField)) + count(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(count(textField)) + count(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort count(textField)", - "error": [ - "SORT does not support function count" - ], - "warning": [] - }, - { - "query": "from a_index | where count(textField)", - "error": [ - "WHERE does not support function count" - ], - "warning": [] - }, - { - "query": "from a_index | where count(textField) > 0", - "error": [ - "WHERE does not support function count" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = count(textField)", - "error": [ - "EVAL does not support function count" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = count(textField) > 0", - "error": [ - "EVAL does not support function count" - ], - "warning": [] - }, - { - "query": "from a_index | eval count(textField)", - "error": [ - "EVAL does not support function count" - ], - "warning": [] - }, - { - "query": "from a_index | eval count(textField) > 0", - "error": [ - "EVAL does not support function count" - ], - "warning": [] - }, - { - "query": "from a_index | stats count(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats count(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats count_distinct(null, null, null, null, null, null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats count_distinct(nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)) + count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)) + count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)", - "error": [ - "SORT does not support function count_distinct" - ], - "warning": [] - }, - { - "query": "from a_index | where count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)", - "error": [ - "WHERE does not support function count_distinct" - ], - "warning": [] - }, - { - "query": "from a_index | where count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField) > 0", - "error": [ - "WHERE does not support function count_distinct" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)", - "error": [ - "EVAL does not support function count_distinct" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField) > 0", - "error": [ - "EVAL does not support function count_distinct" - ], - "warning": [] - }, - { - "query": "from a_index | eval count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField)", - "error": [ - "EVAL does not support function count_distinct" - ], - "warning": [] - }, - { - "query": "from a_index | eval count_distinct(textField, integerField, counterIntegerField, doubleField, unsignedLongField, longField, counterLongField, counterDoubleField) > 0", - "error": [ - "EVAL does not support function count_distinct" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats st_centroid_agg(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = st_centroid_agg(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats st_centroid_agg(avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats st_centroid_agg(booleanField)", - "error": [ - "Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = st_centroid_agg(*)", - "error": [ - "Using wildcards (*) in st_centroid_agg is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = st_centroid_agg(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats st_centroid_agg(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort st_centroid_agg(cartesianPointField)", - "error": [ - "SORT does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | where st_centroid_agg(cartesianPointField)", - "error": [ - "WHERE does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | where st_centroid_agg(cartesianPointField) > 0", - "error": [ - "WHERE does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | where st_centroid_agg(geoPointField)", - "error": [ - "WHERE does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | where st_centroid_agg(geoPointField) > 0", - "error": [ - "WHERE does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | eval st_centroid_agg(cartesianPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_centroid_agg(geoPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_centroid_agg(geoPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | eval st_centroid_agg(geoPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], - "warning": [] - }, - { - "query": "from a_index | stats st_centroid_agg(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats st_centroid_agg(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = values(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats values(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | sort values(textField)", - "error": [ - "SORT does not support function values" - ], - "warning": [] - }, - { - "query": "from a_index | where values(textField)", - "error": [ - "WHERE does not support function values" - ], - "warning": [] - }, - { - "query": "from a_index | where values(textField) > 0", - "error": [ - "WHERE does not support function values" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = values(textField)", - "error": [ - "EVAL does not support function values" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = values(textField) > 0", - "error": [ - "EVAL does not support function values" - ], - "warning": [] - }, - { - "query": "from a_index | eval values(textField)", - "error": [ - "EVAL does not support function values" - ], - "warning": [] - }, - { - "query": "from a_index | eval values(textField) > 0", - "error": [ - "EVAL does not support function values" - ], - "warning": [] - }, - { - "query": "from a_index | stats values(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats values(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = top(textField, integerField, textField)", - "error": [ - "Argument of [=] must be a constant, received [top(textField,integerField,textField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats top(textField, integerField, textField)", - "error": [ - "Argument of [top] must be a constant, received [integerField]", - "Argument of [top] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | sort top(textField, integerField, textField)", - "error": [ - "SORT does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | where top(textField, integerField, textField)", - "error": [ - "WHERE does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | where top(textField, integerField, textField) > 0", - "error": [ - "WHERE does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = top(textField, integerField, textField)", - "error": [ - "EVAL does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = top(textField, integerField, textField) > 0", - "error": [ - "EVAL does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | eval top(textField, integerField, textField)", - "error": [ - "EVAL does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | eval top(textField, integerField, textField) > 0", - "error": [ - "EVAL does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | stats top(null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats top(nullVar, nullVar, nullVar)", - "error": [ - "Argument of [top] must be a constant, received [nullVar]", - "Argument of [top] must be a constant, received [nullVar]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = top(textField, integerField, \"asc\")", - "error": [ - "Argument of [=] must be a constant, received [top(textField,integerField,\"asc\")]" - ], - "warning": [] - }, - { - "query": "from a_index | stats top(textField, integerField, \"asc\")", - "error": [ - "Argument of [top] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | sort top(textField, integerField, \"asc\")", - "error": [ - "SORT does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | where top(textField, integerField, \"asc\")", - "error": [ - "WHERE does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | where top(textField, integerField, \"asc\") > 0", - "error": [ - "WHERE does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = top(textField, integerField, \"asc\")", - "error": [ - "EVAL does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = top(textField, integerField, \"asc\") > 0", - "error": [ - "EVAL does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | eval top(textField, integerField, \"asc\")", - "error": [ - "EVAL does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | eval top(textField, integerField, \"asc\") > 0", - "error": [ - "EVAL does not support function top" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(doubleField, doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(doubleField, doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(doubleField, doubleField)) + weighted_avg(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField / 2, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField, doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(avg(integerField), avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(avg(integerField), avg(integerField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(booleanField, booleanField)", - "error": [ - "Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]", - "Argument of [weighted_avg] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | sort weighted_avg(doubleField, doubleField)", - "error": [ - "SORT does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(doubleField, doubleField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(doubleField, doubleField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(doubleField, doubleField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(doubleField, doubleField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(doubleField, doubleField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(doubleField, doubleField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats weighted_avg(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(doubleField, longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(doubleField, longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(doubleField, longField)) + weighted_avg(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField / 2, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField, longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(doubleField, integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(doubleField, integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(doubleField, integerField)) + weighted_avg(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField / 2, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField / 2, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField / 2, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField / 2, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(doubleField, integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(doubleField, integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(longField, doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(longField, doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(longField, doubleField)) + weighted_avg(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(longField, doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(longField, longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(longField, longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(longField, longField)) + weighted_avg(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(longField, longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(longField, integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(longField, integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(longField, integerField)) + weighted_avg(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(longField, integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(longField, integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(integerField, doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(integerField, doubleField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(integerField, doubleField)) + weighted_avg(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(integerField, doubleField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, doubleField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(integerField, longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(integerField, longField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(integerField, longField)) + weighted_avg(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(integerField, longField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, longField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = weighted_avg(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(integerField, integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(integerField, integerField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var = round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round(weighted_avg(integerField, integerField)) + weighted_avg(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats weighted_avg(integerField, integerField) by round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), ipField", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), weighted_avg(integerField, integerField) by round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = weighted_avg(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(doubleField, longField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(doubleField, longField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(doubleField, integerField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(doubleField, integerField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(longField, doubleField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(longField, doubleField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(longField, longField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(longField, longField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(longField, integerField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(longField, integerField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(integerField, doubleField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(integerField, doubleField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(integerField, longField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(integerField, longField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(integerField, integerField)", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | where weighted_avg(integerField, integerField) > 0", - "error": [ - "WHERE does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(doubleField, longField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(doubleField, longField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(doubleField, longField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(doubleField, longField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(doubleField, integerField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(doubleField, integerField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(doubleField, integerField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(doubleField, integerField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(longField, doubleField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(longField, doubleField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(longField, doubleField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(longField, doubleField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(longField, longField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(longField, longField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(longField, longField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(longField, longField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(longField, integerField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(longField, integerField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(longField, integerField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(longField, integerField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(integerField, doubleField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(integerField, doubleField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(integerField, doubleField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(integerField, doubleField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(integerField, longField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(integerField, longField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(integerField, longField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(integerField, longField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(integerField, integerField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = weighted_avg(integerField, integerField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(integerField, integerField)", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | eval weighted_avg(integerField, integerField) > 0", - "error": [ - "EVAL does not support function weighted_avg" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, 1 year)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats by bin(dateField, 1 year)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, integerField, textField, textField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [textField]", - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(dateField, integerField, textField, textField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [textField]", - "Argument of [bin] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, integerField, dateField, dateField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [dateField]", - "Argument of [bucket] must be a constant, received [dateField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(dateField, integerField, dateField, dateField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [dateField]", - "Argument of [bin] must be a constant, received [dateField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, integerField, textField, dateField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [textField]", - "Argument of [bucket] must be a constant, received [dateField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(dateField, integerField, textField, dateField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [textField]", - "Argument of [bin] must be a constant, received [dateField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, integerField, dateField, textField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [dateField]", - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(dateField, integerField, dateField, textField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [dateField]", - "Argument of [bin] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, integerField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, integerField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | sort bucket(dateField, 1 year)", - "error": [ - "SORT does not support function bucket" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(null, null, null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats bucket(nullVar, nullVar, nullVar, nullVar)", - "error": [ - "Argument of [bucket] must be a constant, received [nullVar]", - "Argument of [bucket] must be a constant, received [nullVar]", - "Argument of [bucket] must be a constant, received [nullVar]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(\"2022\", 1 year)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), 1 year)", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(\"2022\", integerField, textField, textField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [textField]", - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, textField, textField)", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [textField]", - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(\"2022\", integerField, \"2022\", \"2022\")", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, concat(\"20\", \"22\"), concat(\"20\", \"22\"))", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(\"2022\", integerField, textField, \"2022\")", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, textField, concat(\"20\", \"22\"))", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [textField]", - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(\"2022\", integerField, \"2022\", textField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), integerField, concat(\"20\", \"22\"), textField)", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, integerField, now(), now())", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(dateField, integerField, now(), now())", - "error": [ - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, doubleField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, doubleField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, doubleField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, doubleField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, doubleField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, doubleField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, integerField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, integerField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, integerField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, integerField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, integerField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, integerField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, longField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, longField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, longField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, longField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(doubleField, integerField, longField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(doubleField, integerField, longField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, doubleField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, doubleField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, doubleField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, doubleField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, doubleField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, doubleField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, integerField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, integerField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, integerField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, integerField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, longField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, longField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, longField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, longField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(integerField, integerField, longField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(integerField, integerField, longField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, doubleField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, doubleField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, doubleField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, doubleField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, doubleField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, doubleField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, integerField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, integerField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, integerField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, integerField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, integerField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, integerField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, longField, doubleField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, longField, doubleField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, longField, integerField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, longField, integerField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(longField, integerField, longField, longField)", - "error": [ - "Argument of [bucket] must be a constant, received [integerField]", - "Argument of [bucket] must be a constant, received [longField]", - "Argument of [bucket] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(longField, integerField, longField, longField)", - "error": [ - "Argument of [bin] must be a constant, received [integerField]", - "Argument of [bin] must be a constant, received [longField]", - "Argument of [bin] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bucket(dateField, textField)", - "error": [ - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats by bin(dateField, textField)", - "error": [ - "Argument of [bin] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | sort bucket(dateField, textField)", - "error": [ - "SORT does not support function bucket" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(\"2022\", textField)", - "error": [ - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats bucket(concat(\"20\", \"22\"), textField)", - "error": [ - "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", - "Argument of [bucket] must be a constant, received [textField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(doubleField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField, doubleField)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(doubleField, doubleField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(doubleField, doubleField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(doubleField,doubleField))+percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(doubleField, doubleField)) + percentile(doubleField, doubleField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(doubleField,doubleField))]", - "Argument of [+] must be a constant, received [percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField / 2, doubleField)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField / 2, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, doubleField)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField/2,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField, doubleField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, doubleField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(avg(integerField), avg(integerField))", - "error": [ - "Argument of [=] must be a constant, received [percentile(avg(integerField),avg(integerField))]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(avg(integerField), avg(integerField))", - "error": [ - "Argument of [percentile] must be a constant, received [avg(integerField)]", - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(integerField)] of type [double]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(booleanField, )", - "error": [ - "SyntaxError: no viable alternative at input 'percentile(booleanField, )'", - "SyntaxError: mismatched input ')' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "At least one aggregation or grouping expression required in [STATS]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(doubleField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField, longField)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(doubleField, longField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(doubleField,longField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(doubleField, longField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(doubleField, longField)) + percentile(doubleField, longField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(doubleField,longField))+percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(doubleField, longField)) + percentile(doubleField, longField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(doubleField,longField))]", - "Argument of [+] must be a constant, received [percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField / 2, longField)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField / 2, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, longField)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField/2,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField, longField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, longField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(doubleField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField, integerField)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(doubleField, integerField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(doubleField, integerField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(doubleField,integerField))+percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(doubleField, integerField)) + percentile(doubleField, integerField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(doubleField,integerField))]", - "Argument of [+] must be a constant, received [percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField / 2, integerField)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField / 2, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField / 2, integerField)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField / 2, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField/2,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(doubleField, integerField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(doubleField, integerField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(doubleField, integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(doubleField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(longField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(longField, doubleField)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(longField, doubleField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(longField,doubleField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(longField, doubleField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(longField, doubleField)) + percentile(longField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(longField,doubleField))+percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(longField, doubleField)) + percentile(longField, doubleField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(longField,doubleField))]", - "Argument of [+] must be a constant, received [percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(longField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(longField, doubleField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, doubleField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(longField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(longField, longField)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(longField, longField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(longField,longField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(longField, longField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(longField, longField)) + percentile(longField, longField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(longField,longField))+percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(longField, longField)) + percentile(longField, longField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(longField,longField))]", - "Argument of [+] must be a constant, received [percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(longField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, longField)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(longField, longField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(longField, longField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, longField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(longField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(longField, integerField)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(longField, integerField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(longField,integerField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(longField, integerField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(longField, integerField)) + percentile(longField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(longField,integerField))+percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(longField, integerField)) + percentile(longField, integerField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(longField,integerField))]", - "Argument of [+] must be a constant, received [percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(longField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, integerField)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(longField, integerField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(longField, integerField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(longField, integerField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(longField, integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(longField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(integerField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(integerField, doubleField)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(integerField, doubleField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(integerField, doubleField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(integerField,doubleField))+percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(integerField, doubleField)) + percentile(integerField, doubleField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(integerField,doubleField))]", - "Argument of [+] must be a constant, received [percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(integerField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(integerField, doubleField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, doubleField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [doubleField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, doubleField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,doubleField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(integerField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(integerField, longField)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(integerField, longField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(integerField,longField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(integerField, longField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(integerField, longField)) + percentile(integerField, longField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(integerField,longField))+percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(integerField, longField)) + percentile(integerField, longField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(integerField,longField))]", - "Argument of [+] must be a constant, received [percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(integerField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, longField)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(integerField, longField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(integerField, longField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, longField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [longField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, longField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,longField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = percentile(integerField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(integerField, integerField)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(integerField, integerField))", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(integerField,integerField))]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(integerField, integerField))", - "error": [ - "Argument of [round] must be a constant, received [percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var = round(percentile(integerField, integerField)) + percentile(integerField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [round(percentile(integerField,integerField))+percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats round(percentile(integerField, integerField)) + percentile(integerField, integerField)", - "error": [ - "Argument of [+] must be a constant, received [round(percentile(integerField,integerField))]", - "Argument of [+] must be a constant, received [percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(integerField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(integerField, integerField) by round(doubleField / 2)", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2)", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), ipField", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), ipField", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), percentile(integerField, integerField) by round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [percentile] must be a constant, received [integerField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats avg(doubleField), var0 = percentile(integerField, integerField) by var1 = round(doubleField / 2), doubleField / 2", - "error": [ - "Argument of [=] must be a constant, received [percentile(integerField,integerField)]" - ], - "warning": [] - }, - { - "query": "from a_index | sort percentile(doubleField, doubleField)", - "error": [ - "SORT does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(doubleField, doubleField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(doubleField, doubleField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(doubleField, longField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(doubleField, longField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(doubleField, integerField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(doubleField, integerField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(longField, doubleField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(longField, doubleField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(longField, longField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(longField, longField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(longField, integerField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(longField, integerField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(integerField, doubleField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(integerField, doubleField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(integerField, longField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(integerField, longField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(integerField, integerField)", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | where percentile(integerField, integerField) > 0", - "error": [ - "WHERE does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(doubleField, doubleField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(doubleField, doubleField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(doubleField, doubleField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(doubleField, doubleField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(doubleField, longField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(doubleField, longField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(doubleField, longField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(doubleField, longField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(doubleField, integerField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(doubleField, integerField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(doubleField, integerField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(doubleField, integerField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(longField, doubleField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(longField, doubleField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(longField, doubleField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(longField, doubleField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(longField, longField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(longField, longField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(longField, longField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(longField, longField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(longField, integerField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(longField, integerField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(longField, integerField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(longField, integerField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(integerField, doubleField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(integerField, doubleField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(integerField, doubleField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(integerField, doubleField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(integerField, longField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(integerField, longField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(integerField, longField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(integerField, longField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(integerField, integerField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = percentile(integerField, integerField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(integerField, integerField)", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | eval percentile(integerField, integerField) > 0", - "error": [ - "EVAL does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | stats percentile(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | stats percentile(nullVar, nullVar)", - "error": [ - "Argument of [percentile] must be a constant, received [nullVar]" - ], - "warning": [] - }, - { - "query": "row var = to_string(true)", - "error": [], - "warning": [] - }, - { - "query": "row to_string(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(true)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_boolean(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row to_string(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_str(cartesianPointField)", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_string(to_cartesianpoint(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_string(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_string(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_cartesianshape(cartesianPointField))", - "error": [ - "Unknown column [cartesianPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_string(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_string(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(to_datetime(\"2021-01-01T00:00:00Z\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_datetime(to_datetime(\"2021-01-01T00:00:00Z\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row to_string(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row to_string(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_str(geoPointField)", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_string(to_geopoint(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_string(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_string(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(to_geoshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_geoshape(geoPointField))", - "error": [ - "Unknown column [geoPointField]" - ], - "warning": [] - }, - { - "query": "row var = to_string(5)", - "error": [], - "warning": [] - }, - { - "query": "row to_string(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_string(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(to_ip(\"127.0.0.1\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_ip(to_ip(\"127.0.0.1\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_string(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_string(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_string(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(to_version(\"1.0.0\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_version(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_boolean(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(counterDoubleField)", - "error": [ - "Argument of [to_string] must be [boolean], found value [counterDoubleField] type [counter_double]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(*)", - "error": [ - "Using wildcards (*) in to_string is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(cartesianShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(dateField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_datetime(dateField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(geoPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_geopoint(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_geoshape(geoPointField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(ipField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_ip(ipField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(keywordField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_string(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(textField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(unsignedLongField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_str(versionField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = to_string(to_version(keywordField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(booleanField, extraArg)", - "error": [ - "Error: [to_string] function expects exactly one argument, got 2." - ], - "warning": [] - }, - { - "query": "from a_index | sort to_string(booleanField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval to_string(nullVar)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(\"2022\")", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(concat(\"20\", \"22\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_string(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row to_string(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_str(to_geopoint(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_geopoint(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = to_string(to_geoshape(to_geopoint(\"POINT (30 10)\")))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_pseries_weighted_sum(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_pseries_weighted_sum(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_pseries_weighted_sum(to_double(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_pseries_weighted_sum(true, true)", - "error": [ - "Argument of [mv_pseries_weighted_sum] must be [double], found value [true] type [boolean]", - "Argument of [mv_pseries_weighted_sum] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_pseries_weighted_sum(doubleField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_pseries_weighted_sum(booleanField, booleanField) > 0", - "error": [ - "Argument of [mv_pseries_weighted_sum] must be [double], found value [booleanField] type [boolean]", - "Argument of [mv_pseries_weighted_sum] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_pseries_weighted_sum(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_pseries_weighted_sum(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_pseries_weighted_sum(to_double(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_pseries_weighted_sum(booleanField, booleanField)", - "error": [ - "Argument of [mv_pseries_weighted_sum] must be [double], found value [booleanField] type [boolean]", - "Argument of [mv_pseries_weighted_sum] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval mv_pseries_weighted_sum(doubleField, doubleField, extraArg)", - "error": [ - "Error: [mv_pseries_weighted_sum] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_pseries_weighted_sum(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_pseries_weighted_sum(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_pseries_weighted_sum(nullVar, nullVar)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_percentile(5.5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(to_double(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_percentile(5.5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(to_double(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(to_double(true), 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_percentile(5, 5.5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(to_integer(true), to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row mv_percentile(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(to_integer(true), to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(to_integer(true), 5)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(5, to_double(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(5, to_integer(true))", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_percentile(true, true)", - "error": [ - "Argument of [mv_percentile] must be [double], found value [true] type [boolean]", - "Argument of [mv_percentile] must be [double], found value [true] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(doubleField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(booleanField, booleanField) > 0", - "error": [ - "Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]", - "Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(doubleField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(doubleField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(integerField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(integerField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(integerField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(longField, doubleField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(longField, integerField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_percentile(longField, longField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(to_double(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(booleanField, booleanField)", - "error": [ - "Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]", - "Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(doubleField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(to_double(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(doubleField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(to_double(booleanField), longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(integerField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(to_integer(booleanField), to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(integerField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(to_integer(booleanField), to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(integerField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(to_integer(booleanField), longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(longField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(longField, to_double(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(longField, integerField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(longField, to_integer(booleanField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = mv_percentile(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(longField, longField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(doubleField, doubleField, extraArg)", - "error": [ - "Error: [mv_percentile] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort mv_percentile(doubleField, doubleField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval mv_percentile(null, null)", - "error": [], - "warning": [] - }, - { - "query": "row nullVar = null | eval mv_percentile(nullVar, nullVar)", - "error": [], - "warning": [] - }, { "query": "f", "error": [ diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index 8fb4b8b90d6eb..8d78851f8c17b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -10,7 +10,7 @@ import { join } from 'path'; import { writeFile, readFile } from 'fs/promises'; import { ignoreErrorsMap, validateQuery } from './validation'; -import { evalFunctionDefinitions } from '../definitions/functions'; +import { scalarFunctionDefinitions } from '../definitions/generated/scalar_functions'; import { getFunctionSignatures } from '../definitions/helpers'; import { FieldType, @@ -20,7 +20,7 @@ import { fieldTypes as _fieldTypes, } from '../definitions/types'; import { timeUnits, timeUnitsToSuggest } from '../definitions/literals'; -import { statsAggregationFunctionDefinitions } from '../definitions/aggs'; +import { aggregationFunctionDefinitions } from '../definitions/generated/aggregation_functions'; import capitalize from 'lodash/capitalize'; import { camelCase } from 'lodash'; import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; @@ -43,22 +43,22 @@ const NESTED_DEPTHS = Array(NESTING_LEVELS) .fill(0) .map((_, i) => i + 1); -const toAvgSignature = statsAggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; -const toInteger = evalFunctionDefinitions.find(({ name }) => name === 'to_integer')!; -const toDoubleSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_double')!; -const toStringSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_string')!; -const toDateSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_datetime')!; -const toBooleanSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_boolean')!; -const toIpSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_ip')!; -const toGeoPointSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geopoint')!; -const toGeoShapeSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geoshape')!; -const toCartesianPointSignature = evalFunctionDefinitions.find( +const toAvgSignature = aggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; +const toInteger = scalarFunctionDefinitions.find(({ name }) => name === 'to_integer')!; +const toDoubleSignature = scalarFunctionDefinitions.find(({ name }) => name === 'to_double')!; +const toStringSignature = scalarFunctionDefinitions.find(({ name }) => name === 'to_string')!; +const toDateSignature = scalarFunctionDefinitions.find(({ name }) => name === 'to_datetime')!; +const toBooleanSignature = scalarFunctionDefinitions.find(({ name }) => name === 'to_boolean')!; +const toIpSignature = scalarFunctionDefinitions.find(({ name }) => name === 'to_ip')!; +const toGeoPointSignature = scalarFunctionDefinitions.find(({ name }) => name === 'to_geopoint')!; +const toGeoShapeSignature = scalarFunctionDefinitions.find(({ name }) => name === 'to_geoshape')!; +const toCartesianPointSignature = scalarFunctionDefinitions.find( ({ name }) => name === 'to_cartesianpoint' )!; -const toCartesianShapeSignature = evalFunctionDefinitions.find( +const toCartesianShapeSignature = scalarFunctionDefinitions.find( ({ name }) => name === 'to_cartesianshape' )!; -const toVersionSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_version')!; +const toVersionSignature = scalarFunctionDefinitions.find(({ name }) => name === 'to_version')!; const nestedFunctions = { double: prepareNestedFunction(toDoubleSignature), diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts index 3b5cc60f5b13f..468d5bb6e5233 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -199,11 +199,7 @@ function validateNestedFunctionArg( const argFn = getFunctionDefinition(actualArg.name)!; const fnDef = getFunctionDefinition(astFunction.name)!; // no nestying criteria should be enforced only for same type function - if ( - 'noNestingFunctions' in parameterDefinition && - parameterDefinition.noNestingFunctions && - fnDef.type === argFn.type - ) { + if (fnDef.type === 'agg' && argFn.type === 'agg') { messages.push( getMessageFromId({ messageId: 'noNestedArgumentSupport', diff --git a/packages/kbn-text-based-editor/package.json b/packages/kbn-text-based-editor/package.json index 3bdc8c0ee6e65..3eeb282f953c2 100644 --- a/packages/kbn-text-based-editor/package.json +++ b/packages/kbn-text-based-editor/package.json @@ -9,6 +9,6 @@ "scripts": { "make:docs": "ts-node --transpileOnly scripts/generate_esql_docs.ts", "postmake:docs": "yarn run lint:fix", - "lint:fix": "cd ../.. && node ./scripts/eslint --fix ./packages/kbn-text-based-editor/src/esql_documentation_sections.tsx" + "lint:fix": "cd ../.. && node ./scripts/eslint --fix ./packages/kbn-text-based-editor/src/inline_documentation/generated" } } diff --git a/packages/kbn-text-based-editor/scripts/generate_esql_docs.ts b/packages/kbn-text-based-editor/scripts/generate_esql_docs.ts index 13e21ab4ffea3..8a38908e2b211 100644 --- a/packages/kbn-text-based-editor/scripts/generate_esql_docs.ts +++ b/packages/kbn-text-based-editor/scripts/generate_esql_docs.ts @@ -11,12 +11,19 @@ import * as recast from 'recast'; const n = recast.types.namedTypes; import fs from 'fs'; import path from 'path'; -import { functions } from '../src/esql_documentation_sections'; +import { functions } from '../src/inline_documentation/generated/scalar_functions'; (function () { const pathToElasticsearch = process.argv[2]; - const functionDocs = loadFunctionDocs(pathToElasticsearch); - writeFunctionDocs(functionDocs); + const { scalarFunctions, aggregationFunctions } = loadFunctionDocs(pathToElasticsearch); + writeFunctionDocs( + scalarFunctions, + path.join(__dirname, '../src/inline_documentation/generated/scalar_functions.tsx') + ); + writeFunctionDocs( + aggregationFunctions, + path.join(__dirname, '../src/inline_documentation/generated/aggregation_functions.tsx') + ); })(); function loadFunctionDocs(pathToElasticsearch: string) { @@ -34,21 +41,21 @@ function loadFunctionDocs(pathToElasticsearch: string) { .readdirSync(definitionsPath) .map((file) => JSON.parse(fs.readFileSync(`${definitionsPath}/${file}`, 'utf-8'))); - // Initialize an empty map - const functionMap = new Map(); + const scalarFunctions = new Map(); + const aggregationFunctions = new Map(); // Iterate over each file in the directory for (const file of docsFiles) { // Ensure we only process .md files if (path.extname(file) === '.md') { - if ( - !ESFunctionDefinitions.find( - (def) => def.name === path.basename(file, '.md') && def.type === 'eval' - ) - ) { - // Exclude non-scalar functions (for now) + const functionDefinition = ESFunctionDefinitions.find( + (def) => def.name === path.basename(file, '.md') + ); + + if (!functionDefinition) { continue; } + // Read the file content const content = fs.readFileSync(path.join(docsPath, file), 'utf-8'); @@ -56,14 +63,19 @@ function loadFunctionDocs(pathToElasticsearch: string) { const functionName = path.basename(file, '.md'); // Add the function name and content to the map - functionMap.set(functionName, content); + if (functionDefinition.type === 'eval') { + scalarFunctions.set(functionName, content); + } + if (functionDefinition.type === 'agg') { + aggregationFunctions.set(functionName, content); + } } } - return functionMap; + return { scalarFunctions, aggregationFunctions }; } -function writeFunctionDocs(functionDocs: Map) { +function writeFunctionDocs(functionDocs: Map, pathToDocsFile: string) { const codeStrings = Array.from(functionDocs.entries()).map(([name, doc]) => { const docWithoutLinks = removeAsciiDocInternalCrossReferences( doc, @@ -81,6 +93,9 @@ function writeFunctionDocs(functionDocs: Map) { ), description: ( ) { };`; }); - const pathToDocsFile = path.join(__dirname, '../src/esql_documentation_sections.tsx'); - const ast = recast.parse(fs.readFileSync(pathToDocsFile, 'utf-8'), { parser: require('recast/parsers/babel'), }); diff --git a/packages/kbn-text-based-editor/src/helpers.ts b/packages/kbn-text-based-editor/src/helpers.ts index 5e7e9fb091400..f83d7a97342e6 100644 --- a/packages/kbn-text-based-editor/src/helpers.ts +++ b/packages/kbn-text-based-editor/src/helpers.ts @@ -170,11 +170,11 @@ export const getDocumentationSections = async (language: string) => { sourceCommands, processingCommands, initialSection, - functions, + scalarFunctions, aggregationFunctions, groupingFunctions, operators, - } = await import('./esql_documentation_sections'); + } = await import('./inline_documentation/esql_documentation_sections'); groups.push({ label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.esql', { defaultMessage: 'ES|QL', @@ -184,7 +184,7 @@ export const getDocumentationSections = async (language: string) => { groups.push( sourceCommands, processingCommands, - functions, + scalarFunctions, aggregationFunctions, groupingFunctions, operators diff --git a/packages/kbn-text-based-editor/src/inline_documentation/esql_documentation_sections.tsx b/packages/kbn-text-based-editor/src/inline_documentation/esql_documentation_sections.tsx new file mode 100644 index 0000000000000..d0c136cf6d01e --- /dev/null +++ b/packages/kbn-text-based-editor/src/inline_documentation/esql_documentation_sections.tsx @@ -0,0 +1,1053 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { Markdown as SharedUXMarkdown } from '@kbn/shared-ux-markdown'; + +const Markdown = (props: Parameters[0]) => ( + +); + +export const initialSection = ( + +); + +export const sourceCommands = { + label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.sourceCommands', { + defaultMessage: 'Source commands', + }), + description: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.commandsDescription', + { + defaultMessage: `A source command produces a table, typically with data from Elasticsearch. ES|QL supports the following source commands.`, + } + ), + items: [ + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.from', + { + defaultMessage: 'FROM', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.row', + { + defaultMessage: 'ROW', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.show', + { + defaultMessage: 'SHOW', + } + ), + description: ( + \` source command returns information about the deployment and its capabilities: + +* Use \`SHOW INFO\` to return the deployment's version, build date and hash. +* Use \`SHOW FUNCTIONS\` to return a list of all supported functions and a synopsis of each function. + `, + ignoreTag: true, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + } + )} + /> + ), + }, + ], +}; + +export const processingCommands = { + label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.processingCommands', { + defaultMessage: 'Processing commands', + }), + description: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.processingCommandsDescription', + { + defaultMessage: `Processing commands change an input table by adding, removing, or changing rows and columns. ES|QL supports the following processing commands.`, + } + ), + items: [ + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.dissect', + { + defaultMessage: 'DISSECT', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.drop', + { + defaultMessage: 'DROP', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.enrich', + { + defaultMessage: 'ENRICH', + } + ), + description: ( + \`; if it’s not specified, the match will be performed on a field with the same name as the match field defined in the enrich policy. + +\`\`\` +ROW a = "1" +| ENRICH languages_policy ON a +\`\`\` + +You can specify which attributes (between those defined as enrich fields in the policy) have to be added to the result, using \`WITH , ...\` syntax. + +\`\`\` +ROW a = "1" +| ENRICH languages_policy ON a WITH language_name +\`\`\` + +Attributes can also be renamed using \`WITH new_name=\` + +\`\`\` +ROW a = "1" +| ENRICH languages_policy ON a WITH name = language_name +\`\`\` + +By default (if no \`WITH\` is defined), \`ENRICH\` will add all the enrich fields defined in the enrich policy to the result. + +In case of name collisions, the newly created fields will override the existing fields. + `, + ignoreTag: true, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + } + )} + /> + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.eval', + { + defaultMessage: 'EVAL', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.grok', + { + defaultMessage: 'GROK', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.keep', + { + defaultMessage: 'KEEP', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.limit', + { + defaultMessage: 'LIMIT', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mvExpand', + { + defaultMessage: 'MV_EXPAND', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.rename', + { + defaultMessage: 'RENAME', + } + ), + description: ( + AS +\`\`\` + +For example: + +\`\`\` +FROM employees +| KEEP first_name, last_name, still_hired +| RENAME still_hired AS employed +\`\`\` + +If a column with the new name already exists, it will be replaced by the new column. + +Multiple columns can be renamed with a single \`RENAME\` command: + +\`\`\` +FROM employees +| KEEP first_name, last_name +| RENAME first_name AS fn, last_name AS ln +\`\`\` + `, + ignoreTag: true, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + } + )} + /> + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sort', + { + defaultMessage: 'SORT', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.statsby', + { + defaultMessage: 'STATS ... BY', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.where', + { + defaultMessage: 'WHERE', + } + ), + description: ( + + ), + }, + ], +}; + +export const groupingFunctions = { + label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.groupingFunctions', { + defaultMessage: 'Grouping functions', + }), + description: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.groupingFunctionsDocumentationESQLDescription', + { + defaultMessage: `These grouping functions can be used with \`STATS...BY\`:`, + } + ), + items: [ + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.autoBucketFunction', + { + defaultMessage: 'BUCKET', + } + ), + description: ( + = "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" +| STATS hire_date = MV_SORT(VALUES(hire_date)) BY month = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") +| SORT hire_date +\`\`\` + +**NOTE**: The goal isn’t to provide the exact target number of buckets, it’s to pick a range that provides _at most_ the target number of buckets. + +You can combine \`BUCKET\` with an aggregation to create a histogram: + +\`\`\` +FROM employees +| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" +| STATS hires_per_month = COUNT(*) BY month = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") +| SORT month +\`\`\` + +**NOTE**: \`BUCKET\` does not create buckets that match zero documents. That’s why the previous example is missing \`1985-03-01\` and other dates. + +Asking for more buckets can result in a smaller range. For example, requesting at most 100 buckets in a year results in weekly buckets: + +\`\`\` +FROM employees +| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" +| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 100, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") +| SORT week +\`\`\` + +**NOTE**: \`BUCKET\` does not filter any rows. It only uses the provided range to pick a good bucket size. For rows with a value outside of the range, it returns a bucket value that corresponds to a bucket outside the range. Combine \`BUCKET\` with \`WHERE\` to filter rows. + +If the desired bucket size is known in advance, simply provide it as the second argument, leaving the range out: + +\`\`\` +FROM employees +| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" +| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 1 week) +| SORT week +\`\`\` + +**NOTE**: When providing the bucket size as the second parameter, it must be a time duration or date period. + +\`BUCKET\` can also operate on numeric fields. For example, to create a salary histogram: + +\`\`\` +FROM employees +| STATS COUNT(*) by bs = BUCKET(salary, 20, 25324, 74999) +| SORT bs +\`\`\` + +Unlike the earlier example that intentionally filters on a date range, you rarely want to filter on a numeric range. You have to find the min and max separately. ES|QL doesn’t yet have an easy way to do that automatically. + +The range can be omitted if the desired bucket size is known in advance. Simply provide it as the second argument: + +\`\`\` +FROM employees +| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" +| STATS c = COUNT(1) BY b = BUCKET(salary, 5000.) +| SORT b +\`\`\` + +**NOTE**: When providing the bucket size as the second parameter, it must be of a **floating point type**. + +Here's an example to create hourly buckets for the last 24 hours, and calculate the number of events per hour: + +\`\`\` +FROM sample_data +| WHERE @timestamp >= NOW() - 1 day and @timestamp < NOW() +| STATS COUNT(*) BY bucket = BUCKET(@timestamp, 25, NOW() - 1 day, NOW()) +\`\`\` + +Here's an example to create monthly buckets for the year 1985, and calculate the average salary by hiring month: + +\`\`\` +FROM employees +| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" +| STATS AVG(salary) BY bucket = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") +| SORT bucket +\`\`\` + +\`BUCKET\` may be used in both the aggregating and grouping part of the \`STATS …​ BY …\`​ command, provided that in the aggregating part the function is **referenced by an alias defined in the grouping part**, or that it is invoked with the exact same expression. + +For example: + +\`\`\` +FROM employees +| STATS s1 = b1 + 1, s2 = BUCKET(salary / 1000 + 999, 50.) + 2 BY b1 = BUCKET(salary / 100 + 99, 50.), b2 = BUCKET(salary / 1000 + 999, 50.) +| SORT b1, b2 +| KEEP s1, b1, s2, b2 +\`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + } + )} + /> + ), + }, + ], +}; + +export const operators = { + label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.operators', { + defaultMessage: 'Operators', + }), + description: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.operatorsDocumentationESQLDescription', + { + defaultMessage: `ES|QL supports the following operators:`, + } + ), + items: [ + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.binaryOperators', + { + defaultMessage: 'Binary operators', + } + ), + description: ( + \` +* greater than or equal: \`>=\` +* add: \`+\` +* subtract: \`-\` +* multiply: \`*\` +* divide: \`/\` +* modulus: \`%\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + } + )} + /> + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.booleanOperators', + { + defaultMessage: 'Boolean operators', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.castOperator', + { + defaultMessage: 'Cast (::)', + } + ), + description: ( + \` type conversion functions. + +Example: +\`\`\` +ROW ver = CONCAT(("0"::INT + 1)::STRING, ".2.3")::VERSION +\`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.inOperator', + { + defaultMessage: 'IN', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stringOperators', + { + defaultMessage: 'LIKE and RLIKE', + } + ), + description: ( + + ), + }, + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.predicates', + { + defaultMessage: 'NULL values', + } + ), + description: ( + + ), + }, + ], +}; + +export { functions as scalarFunctions } from './generated/scalar_functions'; +export { functions as aggregationFunctions } from './generated/aggregation_functions'; diff --git a/packages/kbn-text-based-editor/src/inline_documentation/generated/aggregation_functions.tsx b/packages/kbn-text-based-editor/src/inline_documentation/generated/aggregation_functions.tsx new file mode 100644 index 0000000000000..00c651aabfc70 --- /dev/null +++ b/packages/kbn-text-based-editor/src/inline_documentation/generated/aggregation_functions.tsx @@ -0,0 +1,507 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { Markdown } from '@kbn/shared-ux-markdown'; + +// DO NOT RENAME! +export const functions = { + label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.aggregationFunctions', { + defaultMessage: 'Aggregation functions', + }), + description: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.aggregationFunctionsDocumentationESQLDescription', + { + defaultMessage: `These functions can by used with STATS...BY:`, + } + ), + // items are managed by scripts/generate_esql_docs.ts + items: [ + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.avg', + { + defaultMessage: 'AVG', + } + ), + description: ( + + + ### AVG + The average of a numeric field. + + \`\`\` + FROM employees + | STATS AVG(height) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.count', + { + defaultMessage: 'COUNT', + } + ), + description: ( + + + ### COUNT + Returns the total number (count) of input values. + + \`\`\` + FROM employees + | STATS COUNT(height) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.count_distinct', + { + defaultMessage: 'COUNT_DISTINCT', + } + ), + description: ( + + + ### COUNT_DISTINCT + Returns the approximate number of distinct values. + + \`\`\` + FROM hosts + | STATS COUNT_DISTINCT(ip0), COUNT_DISTINCT(ip1) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.max', + { + defaultMessage: 'MAX', + } + ), + description: ( + + + ### MAX + The maximum value of a field. + + \`\`\` + FROM employees + | STATS MAX(languages) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.median', + { + defaultMessage: 'MEDIAN', + } + ), + description: ( + + + ### MEDIAN + The value that is greater than half of all values and less than half of all values, also known as the 50% \`PERCENTILE\`. + + \`\`\` + FROM employees + | STATS MEDIAN(salary), PERCENTILE(salary, 50) + \`\`\` + Note: Like \`PERCENTILE\`, \`MEDIAN\` is usually approximate. + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.median_absolute_deviation', + { + defaultMessage: 'MEDIAN_ABSOLUTE_DEVIATION', + } + ), + description: ( + + + ### MEDIAN_ABSOLUTE_DEVIATION + Returns the median absolute deviation, a measure of variability. It is a robust statistic, meaning that it is useful for describing data that may have outliers, or may not be normally distributed. For such data it can be more descriptive than standard deviation. + + It is calculated as the median of each data point's deviation from the median of the entire sample. That is, for a random variable \`X\`, the median absolute deviation is \`median(|median(X) - X|)\`. + + \`\`\` + FROM employees + | STATS MEDIAN(salary), MEDIAN_ABSOLUTE_DEVIATION(salary) + \`\`\` + Note: Like \`PERCENTILE\`, \`MEDIAN_ABSOLUTE_DEVIATION\` is usually approximate. + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.min', + { + defaultMessage: 'MIN', + } + ), + description: ( + + + ### MIN + The minimum value of a field. + + \`\`\` + FROM employees + | STATS MIN(languages) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.percentile', + { + defaultMessage: 'PERCENTILE', + } + ), + description: ( + + + ### PERCENTILE + Returns the value at which a certain percentage of observed values occur. For example, the 95th percentile is the value which is greater than 95% of the observed values and the 50th percentile is the \`MEDIAN\`. + + \`\`\` + FROM employees + | STATS p0 = PERCENTILE(salary, 0) + , p50 = PERCENTILE(salary, 50) + , p99 = PERCENTILE(salary, 99) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_centroid_agg', + { + defaultMessage: 'ST_CENTROID_AGG', + } + ), + description: ( + + + ### ST_CENTROID_AGG + Calculate the spatial centroid over a field with spatial point geometry type. + + \`\`\` + FROM airports + | STATS centroid=ST_CENTROID_AGG(location) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sum', + { + defaultMessage: 'SUM', + } + ), + description: ( + + + ### SUM + The sum of a numeric expression. + + \`\`\` + FROM employees + | STATS SUM(languages) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.top', + { + defaultMessage: 'TOP', + } + ), + description: ( + + + ### TOP + Collects the top values for a field. Includes repeated values. + + \`\`\` + FROM employees + | STATS top_salaries = TOP(salary, 3, "desc"), top_salary = MAX(salary) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.values', + { + defaultMessage: 'VALUES', + } + ), + description: ( + + + ### VALUES + Returns all values in a group as a multivalued field. The order of the returned values isn't guaranteed. If you need the values returned in order use esql-mv_sort. + + \`\`\` + FROM employees + | EVAL first_letter = SUBSTRING(first_name, 0, 1) + | STATS first_name=MV_SORT(VALUES(first_name)) BY first_letter + | SORT first_letter + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.weighted_avg', + { + defaultMessage: 'WEIGHTED_AVG', + } + ), + description: ( + + + ### WEIGHTED_AVG + The weighted average of a numeric expression. + + \`\`\` + FROM employees + | STATS w_avg = WEIGHTED_AVG(salary, height) by languages + | EVAL w_avg = ROUND(w_avg) + | KEEP w_avg, languages + | SORT languages + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + ], +}; diff --git a/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx b/packages/kbn-text-based-editor/src/inline_documentation/generated/scalar_functions.tsx similarity index 68% rename from packages/kbn-text-based-editor/src/esql_documentation_sections.tsx rename to packages/kbn-text-based-editor/src/inline_documentation/generated/scalar_functions.tsx index 3b93002000f40..82d4b9f07d210 100644 --- a/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx +++ b/packages/kbn-text-based-editor/src/inline_documentation/generated/scalar_functions.tsx @@ -9,1188 +9,47 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { Markdown as SharedUXMarkdown } from '@kbn/shared-ux-markdown'; - -const Markdown = (props: Parameters[0]) => ( - -); - -export const initialSection = ( - -); - -export const sourceCommands = { - label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.sourceCommands', { - defaultMessage: 'Source commands', - }), - description: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.commandsDescription', - { - defaultMessage: `A source command produces a table, typically with data from Elasticsearch. ES|QL supports the following source commands.`, - } - ), - items: [ - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.from', - { - defaultMessage: 'FROM', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.row', - { - defaultMessage: 'ROW', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.show', - { - defaultMessage: 'SHOW', - } - ), - description: ( - \` source command returns information about the deployment and its capabilities: - -* Use \`SHOW INFO\` to return the deployment's version, build date and hash. -* Use \`SHOW FUNCTIONS\` to return a list of all supported functions and a synopsis of each function. - `, - ignoreTag: true, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - } - )} - /> - ), - }, - ], -}; - -export const processingCommands = { - label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.processingCommands', { - defaultMessage: 'Processing commands', - }), - description: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.processingCommandsDescription', - { - defaultMessage: `Processing commands change an input table by adding, removing, or changing rows and columns. ES|QL supports the following processing commands.`, - } - ), - items: [ - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.dissect', - { - defaultMessage: 'DISSECT', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.drop', - { - defaultMessage: 'DROP', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.enrich', - { - defaultMessage: 'ENRICH', - } - ), - description: ( - \`; if it’s not specified, the match will be performed on a field with the same name as the match field defined in the enrich policy. - -\`\`\` -ROW a = "1" -| ENRICH languages_policy ON a -\`\`\` - -You can specify which attributes (between those defined as enrich fields in the policy) have to be added to the result, using \`WITH , ...\` syntax. - -\`\`\` -ROW a = "1" -| ENRICH languages_policy ON a WITH language_name -\`\`\` - -Attributes can also be renamed using \`WITH new_name=\` - -\`\`\` -ROW a = "1" -| ENRICH languages_policy ON a WITH name = language_name -\`\`\` - -By default (if no \`WITH\` is defined), \`ENRICH\` will add all the enrich fields defined in the enrich policy to the result. - -In case of name collisions, the newly created fields will override the existing fields. - `, - ignoreTag: true, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - } - )} - /> - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.eval', - { - defaultMessage: 'EVAL', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.grok', - { - defaultMessage: 'GROK', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.keep', - { - defaultMessage: 'KEEP', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.limit', - { - defaultMessage: 'LIMIT', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mvExpand', - { - defaultMessage: 'MV_EXPAND', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.rename', - { - defaultMessage: 'RENAME', - } - ), - description: ( - AS -\`\`\` - -For example: - -\`\`\` -FROM employees -| KEEP first_name, last_name, still_hired -| RENAME still_hired AS employed -\`\`\` - -If a column with the new name already exists, it will be replaced by the new column. - -Multiple columns can be renamed with a single \`RENAME\` command: - -\`\`\` -FROM employees -| KEEP first_name, last_name -| RENAME first_name AS fn, last_name AS ln -\`\`\` - `, - ignoreTag: true, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - } - )} - /> - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sort', - { - defaultMessage: 'SORT', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.statsby', - { - defaultMessage: 'STATS ... BY', - } - ), - description: ( - - ), - }, - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.where', - { - defaultMessage: 'WHERE', - } - ), - description: ( - - ), - }, - ], -}; - -// DO NOT RENAME! -// managed by scripts/generate_esql_docs.ts -export const functions = { - label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.functions', { - defaultMessage: 'Functions', - }), - description: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.functionsDocumentationESQLDescription', - { - defaultMessage: `Functions are supported by ROW, EVAL and WHERE.`, - } - ), - items: [ - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.abs', - { - defaultMessage: 'ABS', - } - ), - description: ( - - - ### ABS - Returns the absolute value. - - \`\`\` - ROW number = -1.0 - | EVAL abs_number = ABS(number) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.acos', - { - defaultMessage: 'ACOS', - } - ), - description: ( - - - ### ACOS - Returns the arccosine of \`n\` as an angle, expressed in radians. - - \`\`\` - ROW a=.9 - | EVAL acos=ACOS(a) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.asin', - { - defaultMessage: 'ASIN', - } - ), - description: ( - - - ### ASIN - Returns the arcsine of the input - numeric expression as an angle, expressed in radians. - - \`\`\` - ROW a=.9 - | EVAL asin=ASIN(a) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.atan', - { - defaultMessage: 'ATAN', - } - ), - description: ( - - - ### ATAN - Returns the arctangent of the input - numeric expression as an angle, expressed in radians. - - \`\`\` - ROW a=12.9 - | EVAL atan=ATAN(a) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.atan2', - { - defaultMessage: 'ATAN2', - } - ), - description: ( - - - ### ATAN2 - The angle between the positive x-axis and the ray from the - origin to the point (x , y) in the Cartesian plane, expressed in radians. - - \`\`\` - ROW y=12.9, x=.6 - | EVAL atan2=ATAN2(y, x) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.bucket', - { - defaultMessage: 'BUCKET', - } - ), - description: ( - - - ### BUCKET - Creates groups of values - buckets - out of a datetime or numeric input. - The size of the buckets can either be provided directly, or chosen based on a recommended count and values range. - - \`\`\` - FROM employees - | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" - | STATS hire_date = MV_SORT(VALUES(hire_date)) BY month = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") - | SORT hire_date - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.case', - { - defaultMessage: 'CASE', - } - ), - description: ( - - - ### CASE - Accepts pairs of conditions and values. The function returns the value that - belongs to the first condition that evaluates to \`true\`. - - If the number of arguments is odd, the last argument is the default value which - is returned when no condition matches. If the number of arguments is even, and - no condition matches, the function returns \`null\`. - - \`\`\` - FROM employees - | EVAL type = CASE( - languages <= 1, "monolingual", - languages <= 2, "bilingual", - "polyglot") - | KEEP emp_no, languages, type - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cbrt', - { - defaultMessage: 'CBRT', - } - ), - description: ( - - - ### CBRT - Returns the cube root of a number. The input can be any numeric value, the return value is always a double. - Cube roots of infinities are null. - - \`\`\` - ROW d = 1000.0 - | EVAL c = cbrt(d) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ceil', - { - defaultMessage: 'CEIL', - } - ), - description: ( - - - ### CEIL - Round a number up to the nearest integer. - - \`\`\` - ROW a=1.8 - | EVAL a=CEIL(a) - \`\`\` - Note: This is a noop for \`long\` (including unsigned) and \`integer\`. For \`double\` this picks the closest \`double\` value to the integer similar to Math.ceil. - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cidr_match', - { - defaultMessage: 'CIDR_MATCH', - } - ), - description: ( - - - ### CIDR_MATCH - Returns true if the provided IP is contained in one of the provided CIDR blocks. - - \`\`\` - FROM hosts - | WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") - | KEEP card, host, ip0, ip1 - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.coalesce', - { - defaultMessage: 'COALESCE', - } - ), - description: ( - - - ### COALESCE - Returns the first of its arguments that is not null. If all arguments are null, it returns \`null\`. - - \`\`\` - ROW a=null, b="b" - | EVAL COALESCE(a, b) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.concat', - { - defaultMessage: 'CONCAT', - } - ), - description: ( - - - ### CONCAT - Concatenates two or more strings. +import { Markdown } from '@kbn/shared-ux-markdown'; - \`\`\` - FROM employees - | KEEP first_name, last_name - | EVAL fullname = CONCAT(first_name, " ", last_name) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts +// DO NOT RENAME! +export const functions = { + label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.functions', { + defaultMessage: 'Functions', + }), + description: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.functionsDocumentationESQLDescription', { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cos', - { - defaultMessage: 'COS', - } - ), - description: ( - - - ### COS - Returns the cosine of an angle. - - \`\`\` - ROW a=1.8 - | EVAL cos=COS(a) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, + defaultMessage: `Functions are supported by ROW, EVAL and WHERE.`, + } + ), + // items are managed by scripts/generate_esql_docs.ts + items: [ // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cosh', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.abs', { - defaultMessage: 'COSH', + defaultMessage: 'ABS', } ), description: ( - ### COSH - Returns the hyperbolic cosine of an angle. + ### ABS + Returns the absolute value. \`\`\` - ROW a=1.8 - | EVAL cosh=COSH(a) + ROW number = -1.0 + | EVAL abs_number = ABS(number) \`\`\` `, description: @@ -1204,27 +63,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_diff', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.acos', { - defaultMessage: 'DATE_DIFF', + defaultMessage: 'ACOS', } ), description: ( - ### DATE_DIFF - Subtracts the \`startTimestamp\` from the \`endTimestamp\` and returns the difference in multiples of \`unit\`. - If \`startTimestamp\` is later than the \`endTimestamp\`, negative values are returned. + ### ACOS + Returns the arccosine of \`n\` as an angle, expressed in radians. \`\`\` - ROW date1 = TO_DATETIME("2023-12-02T11:00:00.000Z"), date2 = TO_DATETIME("2023-12-02T11:00:00.001Z") - | EVAL dd_ms = DATE_DIFF("microseconds", date1, date2) + ROW a=.9 + | EVAL acos=ACOS(a) \`\`\` `, description: @@ -1238,26 +99,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_extract', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.asin', { - defaultMessage: 'DATE_EXTRACT', + defaultMessage: 'ASIN', } ), description: ( - ### DATE_EXTRACT - Extracts parts of a date, like year, month, day, hour. + ### ASIN + Returns the arcsine of the input + numeric expression as an angle, expressed in radians. \`\`\` - ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06") - | EVAL year = DATE_EXTRACT("year", date) + ROW a=.9 + | EVAL asin=ASIN(a) \`\`\` `, description: @@ -1271,27 +136,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_format', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.atan', { - defaultMessage: 'DATE_FORMAT', + defaultMessage: 'ATAN', } ), description: ( - ### DATE_FORMAT - Returns a string representation of a date, in the provided format. + ### ATAN + Returns the arctangent of the input + numeric expression as an angle, expressed in radians. \`\`\` - FROM employees - | KEEP first_name, last_name, hire_date - | EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date) + ROW a=12.9 + | EVAL atan=ATAN(a) \`\`\` `, description: @@ -1305,26 +173,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_parse', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.atan2', { - defaultMessage: 'DATE_PARSE', + defaultMessage: 'ATAN2', } ), description: ( - ### DATE_PARSE - Returns a date by parsing the second argument using the format specified in the first argument. + ### ATAN2 + The angle between the positive x-axis and the ray from the + origin to the point (x , y) in the Cartesian plane, expressed in radians. \`\`\` - ROW date_string = "2022-05-06" - | EVAL date = DATE_PARSE("yyyy-MM-dd", date_string) + ROW y=12.9, x=.6 + | EVAL atan2=ATAN2(y, x) \`\`\` `, description: @@ -1338,56 +210,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_trunc', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.bucket', { - defaultMessage: 'DATE_TRUNC', + defaultMessage: 'BUCKET', } ), description: ( - ### DATE_TRUNC - Rounds down a date to the closest interval. + ### BUCKET + Creates groups of values - buckets - out of a datetime or numeric input. + The size of the buckets can either be provided directly, or chosen based on a recommended count and values range. \`\`\` FROM employees - | KEEP first_name, last_name, hire_date - | EVAL year_hired = DATE_TRUNC(1 year, hire_date) - \`\`\` - `, - description: - 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', - ignoreTag: true, - } - )} - /> - ), - }, - // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts - { - label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.e', { - defaultMessage: 'E', - }), - description: ( - - - ### E - Returns Euler's number. - - \`\`\` - ROW E() + | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" + | STATS hire_date = MV_SORT(VALUES(hire_date)) BY month = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") + | SORT hire_date \`\`\` `, description: @@ -1401,27 +249,38 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ends_with', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.case', { - defaultMessage: 'ENDS_WITH', + defaultMessage: 'CASE', } ), description: ( - ### ENDS_WITH - Returns a boolean that indicates whether a keyword string ends with another string. + ### CASE + Accepts pairs of conditions and values. The function returns the value that + belongs to the first condition that evaluates to \`true\`. + + If the number of arguments is odd, the last argument is the default value which + is returned when no condition matches. If the number of arguments is even, and + no condition matches, the function returns \`null\`. \`\`\` FROM employees - | KEEP last_name - | EVAL ln_E = ENDS_WITH(last_name, "d") + | EVAL type = CASE( + languages <= 1, "monolingual", + languages <= 2, "bilingual", + "polyglot") + | KEEP emp_no, languages, type \`\`\` `, description: @@ -1435,26 +294,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.exp', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cbrt', { - defaultMessage: 'EXP', + defaultMessage: 'CBRT', } ), description: ( - ### EXP - Returns the value of e raised to the power of the given number. + ### CBRT + Returns the cube root of a number. The input can be any numeric value, the return value is always a double. + Cube roots of infinities are null. \`\`\` - ROW d = 5.0 - | EVAL s = EXP(d) + ROW d = 1000.0 + | EVAL c = cbrt(d) \`\`\` `, description: @@ -1468,30 +331,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.floor', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ceil', { - defaultMessage: 'FLOOR', + defaultMessage: 'CEIL', } ), description: ( - ### FLOOR - Round a number down to the nearest integer. + ### CEIL + Round a number up to the nearest integer. \`\`\` ROW a=1.8 - | EVAL a=FLOOR(a) + | EVAL a=CEIL(a) \`\`\` - Note: This is a noop for \`long\` (including unsigned) and \`integer\`. - For \`double\` this picks the closest \`double\` value to the integer - similar to Math.floor. + Note: This is a noop for \`long\` (including unsigned) and \`integer\`. For \`double\` this picks the closest \`double\` value to the integer similar to Math.ceil. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -1504,26 +368,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.from_base64', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cidr_match', { - defaultMessage: 'FROM_BASE64', + defaultMessage: 'CIDR_MATCH', } ), description: ( - ### FROM_BASE64 - Decode a base64 string. + ### CIDR_MATCH + Returns true if the provided IP is contained in one of the provided CIDR blocks. \`\`\` - row a = "ZWxhc3RpYw==" - | eval d = from_base64(a) + FROM hosts + | WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") + | KEEP card, host, ip0, ip1 \`\`\` `, description: @@ -1537,29 +405,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.greatest', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.coalesce', { - defaultMessage: 'GREATEST', + defaultMessage: 'COALESCE', } ), description: ( - ### GREATEST - Returns the maximum value from multiple columns. This is similar to \`MV_MAX\` - except it is intended to run on multiple columns at once. + ### COALESCE + Returns the first of its arguments that is not null. If all arguments are null, it returns \`null\`. \`\`\` - ROW a = 10, b = 20 - | EVAL g = GREATEST(a, b) + ROW a=null, b="b" + | EVAL COALESCE(a, b) \`\`\` - Note: When run on \`keyword\` or \`text\` fields, this returns the last string in alphabetical order. When run on \`boolean\` columns this will return \`true\` if any values are \`true\`. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -1572,26 +441,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ip_prefix', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.concat', { - defaultMessage: 'IP_PREFIX', + defaultMessage: 'CONCAT', } ), description: ( - ### IP_PREFIX - Truncates an IP to a given prefix length. + ### CONCAT + Concatenates two or more strings. \`\`\` - row ip4 = to_ip("1.2.3.4"), ip6 = to_ip("fe80::cae2:65ff:fece:feb9") - | eval ip4_prefix = ip_prefix(ip4, 24, 0), ip6_prefix = ip_prefix(ip6, 0, 112); + FROM employees + | KEEP first_name, last_name + | EVAL fullname = CONCAT(first_name, " ", last_name) \`\`\` `, description: @@ -1605,26 +478,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.least', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cos', { - defaultMessage: 'LEAST', + defaultMessage: 'COS', } ), description: ( - ### LEAST - Returns the minimum value from multiple columns. This is similar to \`MV_MIN\` except it is intended to run on multiple columns at once. + ### COS + Returns the cosine of an angle. \`\`\` - ROW a = 10, b = 20 - | EVAL l = LEAST(a, b) + ROW a=1.8 + | EVAL cos=COS(a) \`\`\` `, description: @@ -1638,29 +514,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.left', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cosh', { - defaultMessage: 'LEFT', + defaultMessage: 'COSH', } ), description: ( - ### LEFT - Returns the substring that extracts 'length' chars from 'string' starting from the left. + ### COSH + Returns the hyperbolic cosine of a number. \`\`\` - FROM employees - | KEEP last_name - | EVAL left = LEFT(last_name, 3) - | SORT last_name ASC - | LIMIT 5 + ROW a=1.8 + | EVAL cosh=COSH(a) \`\`\` `, description: @@ -1674,27 +550,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.length', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_diff', { - defaultMessage: 'LENGTH', + defaultMessage: 'DATE_DIFF', } ), description: ( - ### LENGTH - Returns the character length of a string. + ### DATE_DIFF + Subtracts the \`startTimestamp\` from the \`endTimestamp\` and returns the difference in multiples of \`unit\`. + If \`startTimestamp\` is later than the \`endTimestamp\`, negative values are returned. \`\`\` - FROM employees - | KEEP first_name, last_name - | EVAL fn_length = LENGTH(first_name) + ROW date1 = TO_DATETIME("2023-12-02T11:00:00.000Z"), date2 = TO_DATETIME("2023-12-02T11:00:00.001Z") + | EVAL dd_ms = DATE_DIFF("microseconds", date1, date2) \`\`\` `, description: @@ -1708,28 +587,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.locate', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_extract', { - defaultMessage: 'LOCATE', + defaultMessage: 'DATE_EXTRACT', } ), description: ( - ### LOCATE - Returns an integer that indicates the position of a keyword substring within another string. - Returns \`0\` if the substring cannot be found. - Note that string positions start from \`1\`. + ### DATE_EXTRACT + Extracts parts of a date, like year, month, day, hour. \`\`\` - row a = "hello" - | eval a_ll = locate(a, "ll") + ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06") + | EVAL year = DATE_EXTRACT("year", date) \`\`\` `, description: @@ -1743,28 +623,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.log', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_format', { - defaultMessage: 'LOG', + defaultMessage: 'DATE_FORMAT', } ), description: ( - ### LOG - Returns the logarithm of a value to a base. The input can be any numeric value, the return value is always a double. - - Logs of zero, negative numbers, and base of one return \`null\` as well as a warning. + ### DATE_FORMAT + Returns a string representation of a date, in the provided format. \`\`\` - ROW base = 2.0, value = 8.0 - | EVAL s = LOG(base, value) + FROM employees + | KEEP first_name, last_name, hire_date + | EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date) \`\`\` `, description: @@ -1778,28 +660,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.log10', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_parse', { - defaultMessage: 'LOG10', + defaultMessage: 'DATE_PARSE', } ), description: ( - ### LOG10 - Returns the logarithm of a value to base 10. The input can be any numeric value, the return value is always a double. - - Logs of 0 and negative numbers return \`null\` as well as a warning. + ### DATE_PARSE + Returns a date by parsing the second argument using the format specified in the first argument. \`\`\` - ROW d = 1000.0 - | EVAL s = LOG10(d) + ROW date_string = "2022-05-06" + | EVAL date = DATE_PARSE("yyyy-MM-dd", date_string) \`\`\` `, description: @@ -1813,29 +696,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ltrim', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_trunc', { - defaultMessage: 'LTRIM', + defaultMessage: 'DATE_TRUNC', } ), description: ( - ### LTRIM - Removes leading whitespaces from a string. + ### DATE_TRUNC + Rounds down a date to the closest interval. \`\`\` - ROW message = " some text ", color = " red " - | EVAL message = LTRIM(message) - | EVAL color = LTRIM(color) - | EVAL message = CONCAT("'", message, "'") - | EVAL color = CONCAT("'", color, "'") + FROM employees + | KEEP first_name, last_name, hire_date + | EVAL year_hired = DATE_TRUNC(1 year, hire_date) \`\`\` `, description: @@ -1848,24 +732,27 @@ export const functions = { }, // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_append', - { - defaultMessage: 'MV_APPEND', - } - ), + label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.e', { + defaultMessage: 'E', + }), description: ( - ### MV_APPEND - Concatenates values of two multi-value fields. + ### E + Returns Euler's number. + \`\`\` + ROW E() + \`\`\` `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -1878,26 +765,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_avg', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ends_with', { - defaultMessage: 'MV_AVG', + defaultMessage: 'ENDS_WITH', } ), description: ( - ### MV_AVG - Converts a multivalued field into a single valued field containing the average of all of the values. + ### ENDS_WITH + Returns a boolean that indicates whether a keyword string ends with another string. \`\`\` - ROW a=[3, 5, 1, 6] - | EVAL avg_a = MV_AVG(a) + FROM employees + | KEEP last_name + | EVAL ln_E = ENDS_WITH(last_name, "d") \`\`\` `, description: @@ -1911,26 +802,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_concat', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.exp', { - defaultMessage: 'MV_CONCAT', + defaultMessage: 'EXP', } ), description: ( - ### MV_CONCAT - Converts a multivalued string expression into a single valued column containing the concatenation of all values separated by a delimiter. + ### EXP + Returns the value of e raised to the power of the given number. \`\`\` - ROW a=["foo", "zoo", "bar"] - | EVAL j = MV_CONCAT(a, ", ") + ROW d = 5.0 + | EVAL s = EXP(d) \`\`\` `, description: @@ -1944,27 +838,33 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_count', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.floor', { - defaultMessage: 'MV_COUNT', + defaultMessage: 'FLOOR', } ), description: ( - ### MV_COUNT - Converts a multivalued expression into a single valued column containing a count of the number of values. + ### FLOOR + Round a number down to the nearest integer. \`\`\` - ROW a=["foo", "zoo", "bar"] - | EVAL count_a = MV_COUNT(a) + ROW a=1.8 + | EVAL a=FLOOR(a) \`\`\` + Note: This is a noop for \`long\` (including unsigned) and \`integer\`. + For \`double\` this picks the closest \`double\` value to the integer + similar to Math.floor. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -1977,28 +877,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_dedupe', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.from_base64', { - defaultMessage: 'MV_DEDUPE', + defaultMessage: 'FROM_BASE64', } ), description: ( - ### MV_DEDUPE - Remove duplicate values from a multivalued field. + ### FROM_BASE64 + Decode a base64 string. \`\`\` - ROW a=["foo", "foo", "bar", "foo"] - | EVAL dedupe_a = MV_DEDUPE(a) + row a = "ZWxhc3RpYw==" + | eval d = from_base64(a) \`\`\` - Note: \`MV_DEDUPE\` may, but won't always, sort the values in the column. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -2011,35 +913,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_first', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.greatest', { - defaultMessage: 'MV_FIRST', + defaultMessage: 'GREATEST', } ), description: ( - ### MV_FIRST - Converts a multivalued expression into a single valued column containing the - first value. This is most useful when reading from a function that emits - multivalued columns in a known order like \`SPLIT\`. - - The order that multivalued fields are read from - underlying storage is not guaranteed. It is *frequently* ascending, but don't - rely on that. If you need the minimum value use \`MV_MIN\` instead of - \`MV_FIRST\`. \`MV_MIN\` has optimizations for sorted values so there isn't a - performance benefit to \`MV_FIRST\`. + ### GREATEST + Returns the maximum value from multiple columns. This is similar to \`MV_MAX\` + except it is intended to run on multiple columns at once. \`\`\` - ROW a="foo;bar;baz" - | EVAL first_a = MV_FIRST(SPLIT(a, ";")) + ROW a = 10, b = 20 + | EVAL g = GREATEST(a, b) \`\`\` + Note: When run on \`keyword\` or \`text\` fields, this returns the last string in alphabetical order. When run on \`boolean\` columns this will return \`true\` if any values are \`true\`. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -2052,34 +951,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_last', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ip_prefix', { - defaultMessage: 'MV_LAST', + defaultMessage: 'IP_PREFIX', } ), description: ( - ### MV_LAST - Converts a multivalue expression into a single valued column containing the last - value. This is most useful when reading from a function that emits multivalued - columns in a known order like \`SPLIT\`. - - The order that multivalued fields are read from - underlying storage is not guaranteed. It is *frequently* ascending, but don't - rely on that. If you need the maximum value use \`MV_MAX\` instead of - \`MV_LAST\`. \`MV_MAX\` has optimizations for sorted values so there isn't a - performance benefit to \`MV_LAST\`. + ### IP_PREFIX + Truncates an IP to a given prefix length. \`\`\` - ROW a="foo;bar;baz" - | EVAL last_a = MV_LAST(SPLIT(a, ";")) + row ip4 = to_ip("1.2.3.4"), ip6 = to_ip("fe80::cae2:65ff:fece:feb9") + | eval ip4_prefix = ip_prefix(ip4, 24, 0), ip6_prefix = ip_prefix(ip6, 0, 112); \`\`\` `, description: @@ -2093,26 +987,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_max', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.least', { - defaultMessage: 'MV_MAX', + defaultMessage: 'LEAST', } ), description: ( - ### MV_MAX - Converts a multivalued expression into a single valued column containing the maximum value. + ### LEAST + Returns the minimum value from multiple columns. This is similar to \`MV_MIN\` except it is intended to run on multiple columns at once. \`\`\` - ROW a=[3, 5, 1] - | EVAL max_a = MV_MAX(a) + ROW a = 10, b = 20 + | EVAL l = LEAST(a, b) \`\`\` `, description: @@ -2126,26 +1023,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_median', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.left', { - defaultMessage: 'MV_MEDIAN', + defaultMessage: 'LEFT', } ), description: ( - ### MV_MEDIAN - Converts a multivalued field into a single valued field containing the median value. + ### LEFT + Returns the substring that extracts 'length' chars from 'string' starting from the left. \`\`\` - ROW a=[3, 5, 1] - | EVAL median_a = MV_MEDIAN(a) + FROM employees + | KEEP last_name + | EVAL left = LEFT(last_name, 3) + | SORT last_name ASC + | LIMIT 5 \`\`\` `, description: @@ -2159,26 +1062,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_min', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.length', { - defaultMessage: 'MV_MIN', + defaultMessage: 'LENGTH', } ), description: ( - ### MV_MIN - Converts a multivalued expression into a single valued column containing the minimum value. + ### LENGTH + Returns the character length of a string. \`\`\` - ROW a=[2, 1] - | EVAL min_a = MV_MIN(a) + FROM employees + | KEEP first_name, last_name + | EVAL fn_length = LENGTH(first_name) \`\`\` `, description: @@ -2192,26 +1099,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_percentile', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.locate', { - defaultMessage: 'MV_PERCENTILE', + defaultMessage: 'LOCATE', } ), description: ( - ### MV_PERCENTILE - Converts a multivalued field into a single valued field containing the value at which a certain percentage of observed values occur. + ### LOCATE + Returns an integer that indicates the position of a keyword substring within another string. + Returns \`0\` if the substring cannot be found. + Note that string positions start from \`1\`. \`\`\` - ROW values = [5, 5, 10, 12, 5000] - | EVAL p50 = MV_PERCENTILE(values, 50), median = MV_MEDIAN(values) + row a = "hello" + | eval a_ll = locate(a, "ll") \`\`\` `, description: @@ -2225,27 +1137,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_pseries_weighted_sum', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.log', { - defaultMessage: 'MV_PSERIES_WEIGHTED_SUM', + defaultMessage: 'LOG', } ), description: ( - ### MV_PSERIES_WEIGHTED_SUM - Converts a multivalued expression into a single-valued column by multiplying every element on the input list by its corresponding term in P-Series and computing the sum. + ### LOG + Returns the logarithm of a value to a base. The input can be any numeric value, the return value is always a double. + + Logs of zero, negative numbers, and base of one return \`null\` as well as a warning. \`\`\` - ROW a = [70.0, 45.0, 21.0, 21.0, 21.0] - | EVAL sum = MV_PSERIES_WEIGHTED_SUM(a, 1.5) - | KEEP sum + ROW base = 2.0, value = 8.0 + | EVAL s = LOG(base, value) \`\`\` `, description: @@ -2259,26 +1175,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_slice', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.log10', { - defaultMessage: 'MV_SLICE', + defaultMessage: 'LOG10', } ), description: ( - ### MV_SLICE - Returns a subset of the multivalued field using the start and end index values. + ### LOG10 + Returns the logarithm of a value to base 10. The input can be any numeric value, the return value is always a double. + + Logs of 0 and negative numbers return \`null\` as well as a warning. \`\`\` - row a = [1, 2, 2, 3] - | eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3) + ROW d = 1000.0 + | EVAL s = LOG10(d) \`\`\` `, description: @@ -2292,26 +1213,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_sort', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ltrim', { - defaultMessage: 'MV_SORT', + defaultMessage: 'LTRIM', } ), description: ( - ### MV_SORT - Sorts a multivalued field in lexicographical order. + ### LTRIM + Removes leading whitespaces from a string. \`\`\` - ROW a = [4, 2, -3, 2] - | EVAL sa = mv_sort(a), sd = mv_sort(a, "DESC") + ROW message = " some text ", color = " red " + | EVAL message = LTRIM(message) + | EVAL color = LTRIM(color) + | EVAL message = CONCAT("'", message, "'") + | EVAL color = CONCAT("'", color, "'") \`\`\` `, description: @@ -2325,27 +1252,26 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_sum', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_append', { - defaultMessage: 'MV_SUM', + defaultMessage: 'MV_APPEND', } ), description: ( - ### MV_SUM - Converts a multivalued field into a single valued field containing the sum of all of the values. + ### MV_APPEND + Concatenates values of two multi-value fields. - \`\`\` - ROW a=[3, 5, 6] - | EVAL sum_a = MV_SUM(a) - \`\`\` `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -2358,27 +1284,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_zip', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_avg', { - defaultMessage: 'MV_ZIP', + defaultMessage: 'MV_AVG', } ), description: ( - ### MV_ZIP - Combines the values from two multivalued fields with a delimiter that joins them together. + ### MV_AVG + Converts a multivalued field into a single valued field containing the average of all of the values. \`\`\` - ROW a = ["x", "y", "z"], b = ["1", "2"] - | EVAL c = mv_zip(a, b, "-") - | KEEP a, b, c + ROW a=[3, 5, 1, 6] + | EVAL avg_a = MV_AVG(a) \`\`\` `, description: @@ -2392,25 +1320,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.now', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_concat', { - defaultMessage: 'NOW', + defaultMessage: 'MV_CONCAT', } ), description: ( - ### NOW - Returns current date and time. + ### MV_CONCAT + Converts a multivalued string expression into a single valued column containing the concatenation of all values separated by a delimiter. \`\`\` - ROW current_date = NOW() + ROW a=["foo", "zoo", "bar"] + | EVAL j = MV_CONCAT(a, ", ") \`\`\` `, description: @@ -2423,23 +1355,30 @@ export const functions = { }, // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { - label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pi', { - defaultMessage: 'PI', - }), + label: i18n.translate( + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_count', + { + defaultMessage: 'MV_COUNT', + } + ), description: ( - ### PI - Returns Pi, the ratio of a circle's circumference to its diameter. + ### MV_COUNT + Converts a multivalued expression into a single valued column containing a count of the number of values. \`\`\` - ROW PI() + ROW a=["foo", "zoo", "bar"] + | EVAL count_a = MV_COUNT(a) \`\`\` `, description: @@ -2453,28 +1392,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pow', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_dedupe', { - defaultMessage: 'POW', + defaultMessage: 'MV_DEDUPE', } ), description: ( - ### POW - Returns the value of \`base\` raised to the power of \`exponent\`. + ### MV_DEDUPE + Remove duplicate values from a multivalued field. \`\`\` - ROW base = 2.0, exponent = 2 - | EVAL result = POW(base, exponent) + ROW a=["foo", "foo", "bar", "foo"] + | EVAL dedupe_a = MV_DEDUPE(a) \`\`\` - Note: It is still possible to overflow a double result here; in that case, null will be returned. + Note: \`MV_DEDUPE\` may, but won't always, sort the values in the column. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -2487,26 +1429,37 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.repeat', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_first', { - defaultMessage: 'REPEAT', + defaultMessage: 'MV_FIRST', } ), description: ( - ### REPEAT - Returns a string constructed by concatenating \`string\` with itself the specified \`number\` of times. + ### MV_FIRST + Converts a multivalued expression into a single valued column containing the + first value. This is most useful when reading from a function that emits + multivalued columns in a known order like \`SPLIT\`. + + The order that multivalued fields are read from + underlying storage is not guaranteed. It is *frequently* ascending, but don't + rely on that. If you need the minimum value use \`MV_MIN\` instead of + \`MV_FIRST\`. \`MV_MIN\` has optimizations for sorted values so there isn't a + performance benefit to \`MV_FIRST\`. \`\`\` - ROW a = "Hello!" - | EVAL triple_a = REPEAT(a, 3); + ROW a="foo;bar;baz" + | EVAL first_a = MV_FIRST(SPLIT(a, ";")) \`\`\` `, description: @@ -2520,28 +1473,37 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.replace', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_last', { - defaultMessage: 'REPLACE', + defaultMessage: 'MV_LAST', } ), description: ( - ### REPLACE - The function substitutes in the string \`str\` any match of the regular expression \`regex\` - with the replacement string \`newStr\`. + ### MV_LAST + Converts a multivalue expression into a single valued column containing the last + value. This is most useful when reading from a function that emits multivalued + columns in a known order like \`SPLIT\`. + + The order that multivalued fields are read from + underlying storage is not guaranteed. It is *frequently* ascending, but don't + rely on that. If you need the maximum value use \`MV_MAX\` instead of + \`MV_LAST\`. \`MV_MAX\` has optimizations for sorted values so there isn't a + performance benefit to \`MV_LAST\`. \`\`\` - ROW str = "Hello World" - | EVAL str = REPLACE(str, "World", "Universe") - | KEEP str + ROW a="foo;bar;baz" + | EVAL last_a = MV_LAST(SPLIT(a, ";")) \`\`\` `, description: @@ -2555,29 +1517,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.right', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_max', { - defaultMessage: 'RIGHT', + defaultMessage: 'MV_MAX', } ), description: ( - ### RIGHT - Return the substring that extracts 'length' chars from 'str' starting from the right. + ### MV_MAX + Converts a multivalued expression into a single valued column containing the maximum value. \`\`\` - FROM employees - | KEEP last_name - | EVAL right = RIGHT(last_name, 3) - | SORT last_name ASC - | LIMIT 5 + ROW a=[3, 5, 1] + | EVAL max_a = MV_MAX(a) \`\`\` `, description: @@ -2591,30 +1553,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.round', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_median', { - defaultMessage: 'ROUND', + defaultMessage: 'MV_MEDIAN', } ), description: ( - ### ROUND - Rounds a number to the specified number of decimal places. - Defaults to 0, which returns the nearest integer. If the - precision is a negative number, rounds to the number of digits left - of the decimal point. + ### MV_MEDIAN + Converts a multivalued field into a single valued field containing the median value. \`\`\` - FROM employees - | KEEP first_name, last_name, height - | EVAL height_ft = ROUND(height * 3.281, 1) + ROW a=[3, 5, 1] + | EVAL median_a = MV_MEDIAN(a) \`\`\` `, description: @@ -2628,30 +1589,33 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.rtrim', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_median_absolute_deviation', { - defaultMessage: 'RTRIM', + defaultMessage: 'MV_MEDIAN_ABSOLUTE_DEVIATION', } ), description: ( - ### RTRIM - Removes trailing whitespaces from a string. + ### MV_MEDIAN_ABSOLUTE_DEVIATION + Converts a multivalued field into a single valued field containing the median absolute deviation. + + It is calculated as the median of each data point's deviation from the median of the entire sample. That is, for a random variable \`X\`, the median absolute deviation is \`median(|median(X) - X|)\`. \`\`\` - ROW message = " some text ", color = " red " - | EVAL message = RTRIM(message) - | EVAL color = RTRIM(color) - | EVAL message = CONCAT("'", message, "'") - | EVAL color = CONCAT("'", color, "'") + ROW values = [0, 2, 5, 6] + | EVAL median_absolute_deviation = MV_MEDIAN_ABSOLUTE_DEVIATION(values), median = MV_MEDIAN(values) \`\`\` + Note: If the field has an even number of values, the medians will be calculated as the average of the middle two values. If the value is not a floating point number, the averages are rounded towards 0. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -2664,27 +1628,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.signum', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_min', { - defaultMessage: 'SIGNUM', + defaultMessage: 'MV_MIN', } ), description: ( - ### SIGNUM - Returns the sign of the given number. - It returns \`-1\` for negative numbers, \`0\` for \`0\` and \`1\` for positive numbers. + ### MV_MIN + Converts a multivalued expression into a single valued column containing the minimum value. \`\`\` - ROW d = 100.0 - | EVAL s = SIGNUM(d) + ROW a=[2, 1] + | EVAL min_a = MV_MIN(a) \`\`\` `, description: @@ -2698,26 +1664,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sin', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_percentile', { - defaultMessage: 'SIN', + defaultMessage: 'MV_PERCENTILE', } ), description: ( - ### SIN - Returns ths Sine trigonometric function of an angle. + ### MV_PERCENTILE + Converts a multivalued field into a single valued field containing the value at which a certain percentage of observed values occur. \`\`\` - ROW a=1.8 - | EVAL sin=SIN(a) + ROW values = [5, 5, 10, 12, 5000] + | EVAL p50 = MV_PERCENTILE(values, 50), median = MV_MEDIAN(values) \`\`\` `, description: @@ -2731,26 +1700,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sinh', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_pseries_weighted_sum', { - defaultMessage: 'SINH', + defaultMessage: 'MV_PSERIES_WEIGHTED_SUM', } ), description: ( - ### SINH - Returns the hyperbolic sine of an angle. + ### MV_PSERIES_WEIGHTED_SUM + Converts a multivalued expression into a single-valued column by multiplying every element on the input list by its corresponding term in P-Series and computing the sum. \`\`\` - ROW a=1.8 - | EVAL sinh=SINH(a) + ROW a = [70.0, 45.0, 21.0, 21.0, 21.0] + | EVAL sum = MV_PSERIES_WEIGHTED_SUM(a, 1.5) + | KEEP sum \`\`\` `, description: @@ -2764,26 +1737,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.split', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_slice', { - defaultMessage: 'SPLIT', + defaultMessage: 'MV_SLICE', } ), description: ( - ### SPLIT - Split a single valued string into multiple strings. + ### MV_SLICE + Returns a subset of the multivalued field using the start and end index values. \`\`\` - ROW words="foo;bar;baz;qux;quux;corge" - | EVAL word = SPLIT(words, ";") + row a = [1, 2, 2, 3] + | eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3) \`\`\` `, description: @@ -2797,27 +1773,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sqrt', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_sort', { - defaultMessage: 'SQRT', + defaultMessage: 'MV_SORT', } ), description: ( - ### SQRT - Returns the square root of a number. The input can be any numeric value, the return value is always a double. - Square roots of negative numbers and infinities are null. + ### MV_SORT + Sorts a multivalued field in lexicographical order. \`\`\` - ROW d = 100.0 - | EVAL s = SQRT(d) + ROW a = [4, 2, -3, 2] + | EVAL sa = mv_sort(a), sd = mv_sort(a, "DESC") \`\`\` `, description: @@ -2831,28 +1809,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_contains', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_sum', { - defaultMessage: 'ST_CONTAINS', + defaultMessage: 'MV_SUM', } ), description: ( - ### ST_CONTAINS - Returns whether the first geometry contains the second geometry. - This is the inverse of the \`ST_WITHIN\` function. + ### MV_SUM + Converts a multivalued field into a single valued field containing the sum of all of the values. \`\`\` - FROM airport_city_boundaries - | WHERE ST_CONTAINS(city_boundary, TO_GEOSHAPE("POLYGON((109.35 18.3, 109.45 18.3, 109.45 18.4, 109.35 18.4, 109.35 18.3))")) - | KEEP abbrev, airport, region, city, city_location + ROW a=[3, 5, 6] + | EVAL sum_a = MV_SUM(a) \`\`\` `, description: @@ -2866,29 +1845,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_disjoint', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_zip', { - defaultMessage: 'ST_DISJOINT', + defaultMessage: 'MV_ZIP', } ), description: ( - ### ST_DISJOINT - Returns whether the two geometries or geometry columns are disjoint. - This is the inverse of the \`ST_INTERSECTS\` function. - In mathematical terms: ST_Disjoint(A, B) ⇔ A ⋂ B = ∅ + ### MV_ZIP + Combines the values from two multivalued fields with a delimiter that joins them together. \`\`\` - FROM airport_city_boundaries - | WHERE ST_DISJOINT(city_boundary, TO_GEOSHAPE("POLYGON((-10 -60, 120 -60, 120 60, -10 60, -10 -60))")) - | KEEP abbrev, airport, region, city, city_location + ROW a = ["x", "y", "z"], b = ["1", "2"] + | EVAL c = mv_zip(a, b, "-") + | KEEP a, b, c \`\`\` `, description: @@ -2902,30 +1882,28 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_distance', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.now', { - defaultMessage: 'ST_DISTANCE', + defaultMessage: 'NOW', } ), description: ( - ### ST_DISTANCE - Computes the distance between two points. - For cartesian geometries, this is the pythagorean distance in the same units as the original coordinates. - For geographic geometries, this is the circular distance along the great circle in meters. + ### NOW + Returns current date and time. \`\`\` - FROM airports - | WHERE abbrev == "CPH" - | EVAL distance = ST_DISTANCE(location, city_location) - | KEEP abbrev, name, location, city_location, distance + ROW current_date = NOW() \`\`\` `, description: @@ -2938,31 +1916,26 @@ export const functions = { }, // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { - label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_intersects', - { - defaultMessage: 'ST_INTERSECTS', - } - ), + label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pi', { + defaultMessage: 'PI', + }), description: ( - ### ST_INTERSECTS - Returns true if two geometries intersect. - They intersect if they have any point in common, including their interior points - (points along lines or within polygons). - This is the inverse of the \`ST_DISJOINT\` function. - In mathematical terms: ST_Intersects(A, B) ⇔ A ⋂ B ≠ ∅ + ### PI + Returns Pi, the ratio of a circle's circumference to its diameter. \`\`\` - FROM airports - | WHERE ST_INTERSECTS(location, TO_GEOSHAPE("POLYGON((42 14, 43 14, 43 15, 42 15, 42 14))")) + ROW PI() \`\`\` `, description: @@ -2976,29 +1949,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_within', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pow', { - defaultMessage: 'ST_WITHIN', + defaultMessage: 'POW', } ), description: ( - ### ST_WITHIN - Returns whether the first geometry is within the second geometry. - This is the inverse of the \`ST_CONTAINS\` function. + ### POW + Returns the value of \`base\` raised to the power of \`exponent\`. \`\`\` - FROM airport_city_boundaries - | WHERE ST_WITHIN(city_boundary, TO_GEOSHAPE("POLYGON((109.1 18.15, 109.6 18.15, 109.6 18.65, 109.1 18.65, 109.1 18.15))")) - | KEEP abbrev, airport, region, city, city_location + ROW base = 2.0, exponent = 2 + | EVAL result = POW(base, exponent) \`\`\` + Note: It is still possible to overflow a double result here; in that case, null will be returned. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -3011,27 +1986,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_x', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.repeat', { - defaultMessage: 'ST_X', + defaultMessage: 'REPEAT', } ), description: ( - ### ST_X - Extracts the \`x\` coordinate from the supplied point. - If the points is of type \`geo_point\` this is equivalent to extracting the \`longitude\` value. + ### REPEAT + Returns a string constructed by concatenating \`string\` with itself the specified \`number\` of times. \`\`\` - ROW point = TO_GEOPOINT("POINT(42.97109629958868 14.7552534006536)") - | EVAL x = ST_X(point), y = ST_Y(point) + ROW a = "Hello!" + | EVAL triple_a = REPEAT(a, 3); \`\`\` `, description: @@ -3045,27 +2022,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_y', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.replace', { - defaultMessage: 'ST_Y', + defaultMessage: 'REPLACE', } ), description: ( - ### ST_Y - Extracts the \`y\` coordinate from the supplied point. - If the points is of type \`geo_point\` this is equivalent to extracting the \`latitude\` value. + ### REPLACE + The function substitutes in the string \`str\` any match of the regular expression \`regex\` + with the replacement string \`newStr\`. \`\`\` - ROW point = TO_GEOPOINT("POINT(42.97109629958868 14.7552534006536)") - | EVAL x = ST_X(point), y = ST_Y(point) + ROW str = "Hello World" + | EVAL str = REPLACE(str, "World", "Universe") + | KEEP str \`\`\` `, description: @@ -3079,27 +2060,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.starts_with', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.right', { - defaultMessage: 'STARTS_WITH', + defaultMessage: 'RIGHT', } ), description: ( - ### STARTS_WITH - Returns a boolean that indicates whether a keyword string starts with another string. + ### RIGHT + Return the substring that extracts 'length' chars from 'str' starting from the right. \`\`\` FROM employees | KEEP last_name - | EVAL ln_S = STARTS_WITH(last_name, "B") + | EVAL right = RIGHT(last_name, 3) + | SORT last_name ASC + | LIMIT 5 \`\`\` `, description: @@ -3113,27 +2099,33 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.substring', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.round', { - defaultMessage: 'SUBSTRING', + defaultMessage: 'ROUND', } ), description: ( - ### SUBSTRING - Returns a substring of a string, specified by a start position and an optional length. + ### ROUND + Rounds a number to the specified number of decimal places. + Defaults to 0, which returns the nearest integer. If the + precision is a negative number, rounds to the number of digits left + of the decimal point. \`\`\` FROM employees - | KEEP last_name - | EVAL ln_sub = SUBSTRING(last_name, 1, 3) + | KEEP first_name, last_name, height + | EVAL height_ft = ROUND(height * 3.281, 1) \`\`\` `, description: @@ -3147,26 +2139,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tan', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.rtrim', { - defaultMessage: 'TAN', + defaultMessage: 'RTRIM', } ), description: ( - ### TAN - Returns the Tangent trigonometric function of an angle. + ### RTRIM + Removes trailing whitespaces from a string. \`\`\` - ROW a=1.8 - | EVAL tan=TAN(a) + ROW message = " some text ", color = " red " + | EVAL message = RTRIM(message) + | EVAL color = RTRIM(color) + | EVAL message = CONCAT("'", message, "'") + | EVAL color = CONCAT("'", color, "'") \`\`\` `, description: @@ -3180,26 +2178,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tanh', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.signum', { - defaultMessage: 'TANH', + defaultMessage: 'SIGNUM', } ), description: ( - ### TANH - Returns the Tangent hyperbolic function of an angle. + ### SIGNUM + Returns the sign of the given number. + It returns \`-1\` for negative numbers, \`0\` for \`0\` and \`1\` for positive numbers. \`\`\` - ROW a=1.8 - | EVAL tanh=TANH(a) + ROW d = 100.0 + | EVAL s = SIGNUM(d) \`\`\` `, description: @@ -3213,25 +2215,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tau', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sin', { - defaultMessage: 'TAU', + defaultMessage: 'SIN', } ), description: ( - ### TAU - Returns the ratio of a circle's circumference to its radius. + ### SIN + Returns the sine of an angle. \`\`\` - ROW TAU() + ROW a=1.8 + | EVAL sin=SIN(a) \`\`\` `, description: @@ -3245,26 +2251,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_base64', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sinh', { - defaultMessage: 'TO_BASE64', + defaultMessage: 'SINH', } ), description: ( - ### TO_BASE64 - Encode a string to a base64 string. + ### SINH + Returns the hyperbolic sine of a number. \`\`\` - row a = "elastic" - | eval e = to_base64(a) + ROW a=1.8 + | EVAL sinh=SINH(a) \`\`\` `, description: @@ -3278,29 +2287,28 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_boolean', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.space', { - defaultMessage: 'TO_BOOLEAN', + defaultMessage: 'SPACE', } ), description: ( - ### TO_BOOLEAN - Converts an input value to a boolean value. - A string value of *true* will be case-insensitive converted to the Boolean *true*. - For anything else, including the empty string, the function will return *false*. - The numerical value of *0* will be converted to *false*, anything else will be converted to *true*. + ### SPACE + Returns a string made of \`number\` spaces. \`\`\` - ROW str = ["true", "TRuE", "false", "", "yes", "1"] - | EVAL bool = TO_BOOLEAN(str) + ROW message = CONCAT("Hello", SPACE(1), "World!"); \`\`\` `, description: @@ -3314,28 +2322,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_cartesianpoint', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.split', { - defaultMessage: 'TO_CARTESIANPOINT', + defaultMessage: 'SPLIT', } ), description: ( - ### TO_CARTESIANPOINT - Converts an input value to a \`cartesian_point\` value. - A string will only be successfully converted if it respects WKT Point format. + ### SPLIT + Split a single valued string into multiple strings. \`\`\` - ROW wkt = ["POINT(4297.11 -1475.53)", "POINT(7580.93 2272.77)"] - | MV_EXPAND wkt - | EVAL pt = TO_CARTESIANPOINT(wkt) + ROW words="foo;bar;baz;qux;quux;corge" + | EVAL word = SPLIT(words, ";") \`\`\` `, description: @@ -3349,28 +2358,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_cartesianshape', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sqrt', { - defaultMessage: 'TO_CARTESIANSHAPE', + defaultMessage: 'SQRT', } ), description: ( - ### TO_CARTESIANSHAPE - Converts an input value to a \`cartesian_shape\` value. - A string will only be successfully converted if it respects WKT format. + ### SQRT + Returns the square root of a number. The input can be any numeric value, the return value is always a double. + Square roots of negative numbers and infinities are null. \`\`\` - ROW wkt = ["POINT(4297.11 -1475.53)", "POLYGON ((3339584.72 1118889.97, 4452779.63 4865942.27, 2226389.81 4865942.27, 1113194.90 2273030.92, 3339584.72 1118889.97))"] - | MV_EXPAND wkt - | EVAL geom = TO_CARTESIANSHAPE(wkt) + ROW d = 100.0 + | EVAL s = SQRT(d) \`\`\` `, description: @@ -3384,30 +2395,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_datetime', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_contains', { - defaultMessage: 'TO_DATETIME', + defaultMessage: 'ST_CONTAINS', } ), description: ( - ### TO_DATETIME - Converts an input value to a date value. - A string will only be successfully converted if it's respecting the format \`yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\`. - To convert dates in other formats, use \`DATE_PARSE\`. + ### ST_CONTAINS + Returns whether the first geometry contains the second geometry. + This is the inverse of the \`ST_WITHIN\` function. \`\`\` - ROW string = ["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"] - | EVAL datetime = TO_DATETIME(string) + FROM airport_city_boundaries + | WHERE ST_CONTAINS(city_boundary, TO_GEOSHAPE("POLYGON((109.35 18.3, 109.45 18.3, 109.45 18.4, 109.35 18.4, 109.35 18.3))")) + | KEEP abbrev, airport, region, city, city_location \`\`\` - Note: Note that when converting from nanosecond resolution to millisecond resolution with this function, the nanosecond date is truncated, not rounded. `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -3420,26 +2433,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_degrees', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_disjoint', { - defaultMessage: 'TO_DEGREES', + defaultMessage: 'ST_DISJOINT', } ), description: ( - ### TO_DEGREES - Converts a number in radians to degrees. + ### ST_DISJOINT + Returns whether the two geometries or geometry columns are disjoint. + This is the inverse of the \`ST_INTERSECTS\` function. + In mathematical terms: ST_Disjoint(A, B) ⇔ A ⋂ B = ∅ \`\`\` - ROW rad = [1.57, 3.14, 4.71] - | EVAL deg = TO_DEGREES(rad) + FROM airport_city_boundaries + | WHERE ST_DISJOINT(city_boundary, TO_GEOSHAPE("POLYGON((-10 -60, 120 -60, 120 60, -10 60, -10 -60))")) + | KEEP abbrev, airport, region, city, city_location \`\`\` `, description: @@ -3453,28 +2472,33 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_double', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_distance', { - defaultMessage: 'TO_DOUBLE', + defaultMessage: 'ST_DISTANCE', } ), description: ( - ### TO_DOUBLE - Converts an input value to a double value. If the input parameter is of a date type, - its value will be interpreted as milliseconds since the Unix epoch, - converted to double. Boolean *true* will be converted to double *1.0*, *false* to *0.0*. + ### ST_DISTANCE + Computes the distance between two points. + For cartesian geometries, this is the pythagorean distance in the same units as the original coordinates. + For geographic geometries, this is the circular distance along the great circle in meters. \`\`\` - ROW str1 = "5.20128E11", str2 = "foo" - | EVAL dbl = TO_DOUBLE("520128000000"), dbl1 = TO_DOUBLE(str1), dbl2 = TO_DOUBLE(str2) + FROM airports + | WHERE abbrev == "CPH" + | EVAL distance = ST_DISTANCE(location, city_location) + | KEEP abbrev, name, location, city_location, distance \`\`\` `, description: @@ -3488,27 +2512,33 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_geopoint', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_intersects', { - defaultMessage: 'TO_GEOPOINT', + defaultMessage: 'ST_INTERSECTS', } ), description: ( - ### TO_GEOPOINT - Converts an input value to a \`geo_point\` value. - A string will only be successfully converted if it respects WKT Point format. + ### ST_INTERSECTS + Returns true if two geometries intersect. + They intersect if they have any point in common, including their interior points + (points along lines or within polygons). + This is the inverse of the \`ST_DISJOINT\` function. + In mathematical terms: ST_Intersects(A, B) ⇔ A ⋂ B ≠ ∅ \`\`\` - ROW wkt = "POINT(42.97109630194 14.7552534413725)" - | EVAL pt = TO_GEOPOINT(wkt) + FROM airports + | WHERE ST_INTERSECTS(location, TO_GEOSHAPE("POLYGON((42 14, 43 14, 43 15, 42 15, 42 14))")) \`\`\` `, description: @@ -3522,27 +2552,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_geoshape', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_within', { - defaultMessage: 'TO_GEOSHAPE', + defaultMessage: 'ST_WITHIN', } ), description: ( - ### TO_GEOSHAPE - Converts an input value to a \`geo_shape\` value. - A string will only be successfully converted if it respects WKT format. + ### ST_WITHIN + Returns whether the first geometry is within the second geometry. + This is the inverse of the \`ST_CONTAINS\` function. \`\`\` - ROW wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))" - | EVAL geom = TO_GEOSHAPE(wkt) + FROM airport_city_boundaries + | WHERE ST_WITHIN(city_boundary, TO_GEOSHAPE("POLYGON((109.1 18.15, 109.6 18.15, 109.6 18.65, 109.1 18.65, 109.1 18.15))")) + | KEEP abbrev, airport, region, city, city_location \`\`\` `, description: @@ -3556,29 +2590,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_integer', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_x', { - defaultMessage: 'TO_INTEGER', + defaultMessage: 'ST_X', } ), description: ( - - ### TO_INTEGER - Converts an input value to an integer value. - If the input parameter is of a date type, its value will be interpreted as milliseconds - since the Unix epoch, converted to integer. - Boolean *true* will be converted to integer *1*, *false* to *0*. + --> + + ### ST_X + Extracts the \`x\` coordinate from the supplied point. + If the points is of type \`geo_point\` this is equivalent to extracting the \`longitude\` value. \`\`\` - ROW long = [5013792, 2147483647, 501379200000] - | EVAL int = TO_INTEGER(long) + ROW point = TO_GEOPOINT("POINT(42.97109629958868 14.7552534006536)") + | EVAL x = ST_X(point), y = ST_Y(point) \`\`\` `, description: @@ -3592,27 +2627,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_ip', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.st_y', { - defaultMessage: 'TO_IP', + defaultMessage: 'ST_Y', } ), description: ( - ### TO_IP - Converts an input string to an IP value. + ### ST_Y + Extracts the \`y\` coordinate from the supplied point. + If the points is of type \`geo_point\` this is equivalent to extracting the \`latitude\` value. \`\`\` - ROW str1 = "1.1.1.1", str2 = "foo" - | EVAL ip1 = TO_IP(str1), ip2 = TO_IP(str2) - | WHERE CIDR_MATCH(ip1, "1.0.0.0/8") + ROW point = TO_GEOPOINT("POINT(42.97109629958868 14.7552534006536)") + | EVAL x = ST_X(point), y = ST_Y(point) \`\`\` `, description: @@ -3626,28 +2664,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_long', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.starts_with', { - defaultMessage: 'TO_LONG', + defaultMessage: 'STARTS_WITH', } ), description: ( - ### TO_LONG - Converts an input value to a long value. If the input parameter is of a date type, - its value will be interpreted as milliseconds since the Unix epoch, converted to long. - Boolean *true* will be converted to long *1*, *false* to *0*. + ### STARTS_WITH + Returns a boolean that indicates whether a keyword string starts with another string. \`\`\` - ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo" - | EVAL long1 = TO_LONG(str1), long2 = TO_LONG(str2), long3 = TO_LONG(str3) + FROM employees + | KEEP last_name + | EVAL ln_S = STARTS_WITH(last_name, "B") \`\`\` `, description: @@ -3661,26 +2701,30 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_lower', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.substring', { - defaultMessage: 'TO_LOWER', + defaultMessage: 'SUBSTRING', } ), description: ( - ### TO_LOWER - Returns a new string representing the input string converted to lower case. + ### SUBSTRING + Returns a substring of a string, specified by a start position and an optional length. \`\`\` - ROW message = "Some Text" - | EVAL message_lower = TO_LOWER(message) + FROM employees + | KEEP last_name + | EVAL ln_sub = SUBSTRING(last_name, 1, 3) \`\`\` `, description: @@ -3694,26 +2738,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_radians', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tan', { - defaultMessage: 'TO_RADIANS', + defaultMessage: 'TAN', } ), description: ( - ### TO_RADIANS - Converts a number in degrees to radians. + ### TAN + Returns the tangent of an angle. \`\`\` - ROW deg = [90.0, 180.0, 270.0] - | EVAL rad = TO_RADIANS(deg) + ROW a=1.8 + | EVAL tan=TAN(a) \`\`\` `, description: @@ -3727,26 +2774,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_string', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tanh', { - defaultMessage: 'TO_STRING', + defaultMessage: 'TANH', } ), description: ( - ### TO_STRING - Converts an input value into a string. + ### TANH + Returns the hyperbolic tangent of a number. \`\`\` - ROW a=10 - | EVAL j = TO_STRING(a) + ROW a=1.8 + | EVAL tanh=TANH(a) \`\`\` `, description: @@ -3760,28 +2810,28 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_unsigned_long', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tau', { - defaultMessage: 'TO_UNSIGNED_LONG', + defaultMessage: 'TAU', } ), description: ( - ### TO_UNSIGNED_LONG - Converts an input value to an unsigned long value. If the input parameter is of a date type, - its value will be interpreted as milliseconds since the Unix epoch, converted to unsigned long. - Boolean *true* will be converted to unsigned long *1*, *false* to *0*. + ### TAU + Returns the ratio of a circle's circumference to its radius. \`\`\` - ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo" - | EVAL long1 = TO_UNSIGNED_LONG(str1), long2 = TO_ULONG(str2), long3 = TO_UL(str3) + ROW TAU() \`\`\` `, description: @@ -3795,26 +2845,29 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_upper', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_base64', { - defaultMessage: 'TO_UPPER', + defaultMessage: 'TO_BASE64', } ), description: ( - ### TO_UPPER - Returns a new string representing the input string converted to upper case. + ### TO_BASE64 + Encode a string to a base64 string. \`\`\` - ROW message = "Some Text" - | EVAL message_upper = TO_UPPER(message) + row a = "elastic" + | eval e = to_base64(a) \`\`\` `, description: @@ -3828,25 +2881,32 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_version', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_boolean', { - defaultMessage: 'TO_VERSION', + defaultMessage: 'TO_BOOLEAN', } ), description: ( - ### TO_VERSION - Converts an input string to a version value. + ### TO_BOOLEAN + Converts an input value to a boolean value. + A string value of *true* will be case-insensitive converted to the Boolean *true*. + For anything else, including the empty string, the function will return *false*. + The numerical value of *0* will be converted to *false*, anything else will be converted to *true*. \`\`\` - ROW v = TO_VERSION("1.2.3") + ROW str = ["true", "TRuE", "false", "", "yes", "1"] + | EVAL bool = TO_BOOLEAN(str) \`\`\` `, description: @@ -3860,27 +2920,31 @@ export const functions = { // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.trim', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_cartesianpoint', { - defaultMessage: 'TRIM', + defaultMessage: 'TO_CARTESIANPOINT', } ), description: ( - ### TRIM - Removes leading and trailing whitespaces from a string. + ### TO_CARTESIANPOINT + Converts an input value to a \`cartesian_point\` value. + A string will only be successfully converted if it respects WKT Point format. \`\`\` - ROW message = " some text ", color = " red " - | EVAL message = TRIM(message) - | EVAL color = TRIM(color) + ROW wkt = ["POINT(4297.11 -1475.53)", "POINT(7580.93 2272.77)"] + | MV_EXPAND wkt + | EVAL pt = TO_CARTESIANPOINT(wkt) \`\`\` `, description: @@ -3891,663 +2955,553 @@ export const functions = { /> ), }, - ], -}; - -export const aggregationFunctions = { - label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.aggregationFunctions', { - defaultMessage: 'Aggregation functions', - }), - description: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.aggregationFunctionsDocumentationESQLDescription', - { - defaultMessage: `These functions can by used with STATS...BY:`, - } - ), - items: [ + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.avgFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_cartesianshape', { - defaultMessage: 'AVG', + defaultMessage: 'TO_CARTESIANSHAPE', } ), description: ( -The expression can use inline functions. For example, to calculate the average over a multivalued column, first use \`MV_AVG\` to average the multiple values per row, and use the result with the \`AVG\` function: + ### TO_CARTESIANSHAPE + Converts an input value to a \`cartesian_shape\` value. + A string will only be successfully converted if it respects WKT format. -\`\`\` -FROM employees -| STATS avg_salary_change = AVG(MV_AVG(salary_change)) -\`\`\` - `, + \`\`\` + ROW wkt = ["POINT(4297.11 -1475.53)", "POLYGON ((3339584.72 1118889.97, 4452779.63 4865942.27, 2226389.81 4865942.27, 1113194.90 2273030.92, 3339584.72 1118889.97))"] + | MV_EXPAND wkt + | EVAL geom = TO_CARTESIANSHAPE(wkt) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_dateperiod', { - defaultMessage: 'COUNT', + defaultMessage: 'TO_DATEPERIOD', } ), description: ( -The expression can use inline functions. This example splits a string into multiple values using the \`SPLIT\` function and counts the values: + ### TO_DATEPERIOD + Converts an input value into a \`date_period\` value. -\`\`\` -ROW words="foo;bar;baz;qux;quux;foo" -| STATS word_count = COUNT(SPLIT(words, ";")) -\`\`\` - `, + \`\`\` + row x = "2024-01-01"::datetime | eval y = x + "3 DAYS"::date_period, z = x - to_dateperiod("3 days"); + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countDistinctFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_datetime', { - defaultMessage: 'COUNT_DISTINCT', + defaultMessage: 'TO_DATETIME', } ), description: ( -The expression can use inline functions. This example splits a string into multiple values using the \`SPLIT\` function and counts the unique values: + ### TO_DATETIME + Converts an input value to a date value. + A string will only be successfully converted if it's respecting the format \`yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\`. + To convert dates in other formats, use \`DATE_PARSE\`. -\`\`\` -ROW words="foo;bar;baz;qux;quux;foo" -| STATS distinct_word_count = COUNT_DISTINCT(SPLIT(words, ";")) -\`\`\` - `, + \`\`\` + ROW string = ["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"] + | EVAL datetime = TO_DATETIME(string) + \`\`\` + Note: Note that when converting from nanosecond resolution to millisecond resolution with this function, the nanosecond date is truncated, not rounded. + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.maxFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_degrees', { - defaultMessage: 'MAX', + defaultMessage: 'TO_DEGREES', } ), description: ( -The expression can use inline functions. For example, to calculate the maximum over an average of a multivalued column, use \`MV_AVG\` to first average the multiple values per row, and use the result with the \`MAX\` function: + ### TO_DEGREES + Converts a number in radians to degrees. -\`\`\` -FROM employees -| STATS max_avg_salary_change = MAX(MV_AVG(salary_change)) -\`\`\` - `, + \`\`\` + ROW rad = [1.57, 3.14, 4.71] + | EVAL deg = TO_DEGREES(rad) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_double', { - defaultMessage: 'MEDIAN', + defaultMessage: 'TO_DOUBLE', } ), description: ( -The expression can use inline functions. For example, to calculate the median of the maximum values of a multivalued column, first use \`MV_MAX\` to get the maximum value per row, and use the result with the \`MEDIAN\` function: + ### TO_DOUBLE + Converts an input value to a double value. If the input parameter is of a date type, + its value will be interpreted as milliseconds since the Unix epoch, + converted to double. Boolean *true* will be converted to double *1.0*, *false* to *0.0*. -\`\`\` -FROM employees -| STATS median_max_salary_change = MEDIAN(MV_MAX(salary_change)) -\`\`\` - `, + \`\`\` + ROW str1 = "5.20128E11", str2 = "foo" + | EVAL dbl = TO_DOUBLE("520128000000"), dbl1 = TO_DOUBLE(str1), dbl2 = TO_DOUBLE(str2) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianAbsoluteDeviationFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_geopoint', { - defaultMessage: 'MEDIAN_ABSOLUTE_DEVIATION', + defaultMessage: 'TO_GEOPOINT', } ), description: ( -\`\`\` -FROM employees -| STATS m_a_d_max_salary_change = MEDIAN_ABSOLUTE_DEVIATION(MV_MAX(salary_change)) -\`\`\` + ### TO_GEOPOINT + Converts an input value to a \`geo_point\` value. + A string will only be successfully converted if it respects WKT Point format. -`, + \`\`\` + ROW wkt = "POINT(42.97109630194 14.7552534413725)" + | EVAL pt = TO_GEOPOINT(wkt) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.minFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_geoshape', { - defaultMessage: 'MIN', + defaultMessage: 'TO_GEOSHAPE', } ), description: ( -The expression can use inline functions. For example, to calculate the minimum over an average of a multivalued column, use \`MV_AVG\` to first average the multiple values per row, and use the result with the \`MIN\` function: + ### TO_GEOSHAPE + Converts an input value to a \`geo_shape\` value. + A string will only be successfully converted if it respects WKT format. -\`\`\` -FROM employees -| STATS min_avg_salary_change = MIN(MV_AVG(salary_change)) -\`\`\` - `, + \`\`\` + ROW wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))" + | EVAL geom = TO_GEOSHAPE(wkt) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.percentileFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_integer', { - defaultMessage: 'PERCENTILE', + defaultMessage: 'TO_INTEGER', } ), description: ( -The expression can use inline functions. For example, to calculate a percentile of the maximum values of a multivalued column, first use \`MV_MAX\` to get the maximum value per row, and use the result with the \`PERCENTILE\` function: + ### TO_INTEGER + Converts an input value to an integer value. + If the input parameter is of a date type, its value will be interpreted as milliseconds + since the Unix epoch, converted to integer. + Boolean *true* will be converted to integer *1*, *false* to *0*. -\`\`\` -FROM employees -| STATS p80_max_salary_change = PERCENTILE(MV_MAX(salary_change), 80) -\`\`\` - `, + \`\`\` + ROW long = [5013792, 2147483647, 501379200000] + | EVAL int = TO_INTEGER(long) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stCentroidFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_ip', { - defaultMessage: 'ST_CENTROID_AGG', + defaultMessage: 'TO_IP', } ), description: ( -Calculates the spatial centroid over a field with spatial point geometry type. + ### TO_IP + Converts an input string to an IP value. -\`\`\` -FROM airports -| STATS centroid=ST_CENTROID_AGG(location) -\`\`\` - `, + \`\`\` + ROW str1 = "1.1.1.1", str2 = "foo" + | EVAL ip1 = TO_IP(str1), ip2 = TO_IP(str2) + | WHERE CIDR_MATCH(ip1, "1.0.0.0/8") + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sumFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_long', { - defaultMessage: 'SUM', + defaultMessage: 'TO_LONG', } ), description: ( -The expression can use inline functions. For example, to calculate the sum of each employee’s maximum salary changes, apply the \`MV_MAX\` function to each row and then \`SUM\` the results: + ### TO_LONG + Converts an input value to a long value. If the input parameter is of a date type, + its value will be interpreted as milliseconds since the Unix epoch, converted to long. + Boolean *true* will be converted to long *1*, *false* to *0*. -\`\`\` -FROM employees -| STATS total_salary_changes = SUM(MV_MAX(salary_change)) -\`\`\` - `, + \`\`\` + ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo" + | EVAL long1 = TO_LONG(str1), long2 = TO_LONG(str2), long3 = TO_LONG(str3) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.valuesFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_lower', { - defaultMessage: 'VALUES', + defaultMessage: 'TO_LOWER', } ), description: ( -> _**WARNING:** This can use a significant amount of memory and ES|QL doesn’t yet grow aggregations beyond memory. So this aggregation will work until it is used to collect more values than can fit into memory. Once it collects too many values it will fail the query with a [Circuit Breaker Error](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker-errors.html)._ + ### TO_LOWER + Returns a new string representing the input string converted to lower case. - `, + \`\`\` + ROW message = "Some Text" + | EVAL message_lower = TO_LOWER(message) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, - ], -}; - -export const groupingFunctions = { - label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.groupingFunctions', { - defaultMessage: 'Grouping functions', - }), - description: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.groupingFunctionsDocumentationESQLDescription', - { - defaultMessage: `These grouping functions can be used with \`STATS...BY\`:`, - } - ), - items: [ + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.autoBucketFunction', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_radians', { - defaultMessage: 'BUCKET', + defaultMessage: 'TO_RADIANS', } ), description: ( = "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" -| STATS hire_date = MV_SORT(VALUES(hire_date)) BY month = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") -| SORT hire_date -\`\`\` - -**NOTE**: The goal isn’t to provide the exact target number of buckets, it’s to pick a range that provides _at most_ the target number of buckets. - -You can combine \`BUCKET\` with an aggregation to create a histogram: - -\`\`\` -FROM employees -| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" -| STATS hires_per_month = COUNT(*) BY month = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") -| SORT month -\`\`\` - -**NOTE**: \`BUCKET\` does not create buckets that match zero documents. That’s why the previous example is missing \`1985-03-01\` and other dates. - -Asking for more buckets can result in a smaller range. For example, requesting at most 100 buckets in a year results in weekly buckets: - -\`\`\` -FROM employees -| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" -| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 100, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") -| SORT week -\`\`\` - -**NOTE**: \`BUCKET\` does not filter any rows. It only uses the provided range to pick a good bucket size. For rows with a value outside of the range, it returns a bucket value that corresponds to a bucket outside the range. Combine \`BUCKET\` with \`WHERE\` to filter rows. - -If the desired bucket size is known in advance, simply provide it as the second argument, leaving the range out: - -\`\`\` -FROM employees -| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" -| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 1 week) -| SORT week -\`\`\` - -**NOTE**: When providing the bucket size as the second parameter, it must be a time duration or date period. - -\`BUCKET\` can also operate on numeric fields. For example, to create a salary histogram: - -\`\`\` -FROM employees -| STATS COUNT(*) by bs = BUCKET(salary, 20, 25324, 74999) -| SORT bs -\`\`\` - -Unlike the earlier example that intentionally filters on a date range, you rarely want to filter on a numeric range. You have to find the min and max separately. ES|QL doesn’t yet have an easy way to do that automatically. - -The range can be omitted if the desired bucket size is known in advance. Simply provide it as the second argument: - -\`\`\` -FROM employees -| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" -| STATS c = COUNT(1) BY b = BUCKET(salary, 5000.) -| SORT b -\`\`\` - -**NOTE**: When providing the bucket size as the second parameter, it must be of a **floating point type**. - -Here's an example to create hourly buckets for the last 24 hours, and calculate the number of events per hour: - -\`\`\` -FROM sample_data -| WHERE @timestamp >= NOW() - 1 day and @timestamp < NOW() -| STATS COUNT(*) BY bucket = BUCKET(@timestamp, 25, NOW() - 1 day, NOW()) -\`\`\` - -Here's an example to create monthly buckets for the year 1985, and calculate the average salary by hiring month: - -\`\`\` -FROM employees -| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" -| STATS AVG(salary) BY bucket = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") -| SORT bucket -\`\`\` - -\`BUCKET\` may be used in both the aggregating and grouping part of the \`STATS …​ BY …\`​ command, provided that in the aggregating part the function is **referenced by an alias defined in the grouping part**, or that it is invoked with the exact same expression. + defaultMessage: ` -For example: + ### TO_RADIANS + Converts a number in degrees to radians. -\`\`\` -FROM employees -| STATS s1 = b1 + 1, s2 = BUCKET(salary / 1000 + 999, 50.) + 2 BY b1 = BUCKET(salary / 100 + 99, 50.), b2 = BUCKET(salary / 1000 + 999, 50.) -| SORT b1, b2 -| KEEP s1, b1, s2, b2 -\`\`\` - `, + \`\`\` + ROW deg = [90.0, 180.0, 270.0] + | EVAL rad = TO_RADIANS(deg) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, - ], -}; - -export const operators = { - label: i18n.translate('textBasedEditor.query.textBasedLanguagesEditor.operators', { - defaultMessage: 'Operators', - }), - description: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.operatorsDocumentationESQLDescription', - { - defaultMessage: `ES|QL supports the following operators:`, - } - ), - items: [ + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.binaryOperators', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_string', { - defaultMessage: 'Binary operators', + defaultMessage: 'TO_STRING', } ), description: ( \` -* greater than or equal: \`>=\` -* add: \`+\` -* subtract: \`-\` -* multiply: \`*\` -* divide: \`/\` -* modulus: \`%\` - `, + defaultMessage: ` + + ### TO_STRING + Converts an input value into a string. + + \`\`\` + ROW a=10 + | EVAL j = TO_STRING(a) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.booleanOperators', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_timeduration', { - defaultMessage: 'Boolean operators', + defaultMessage: 'TO_TIMEDURATION', } ), description: ( + + ### TO_TIMEDURATION + Converts an input value into a \`time_duration\` value. -* \`AND\` -* \`OR\` -* \`NOT\` - `, + \`\`\` + row x = "2024-01-01"::datetime | eval y = x + "3 hours"::time_duration, z = x - to_timeduration("3 hours"); + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.castOperator', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_unsigned_long', { - defaultMessage: 'Cast (::)', + defaultMessage: 'TO_UNSIGNED_LONG', } ), description: ( \` type conversion functions. - -Example: -\`\`\` -ROW ver = CONCAT(("0"::INT + 1)::STRING, ".2.3")::VERSION -\`\`\` - `, + defaultMessage: ` + + ### TO_UNSIGNED_LONG + Converts an input value to an unsigned long value. If the input parameter is of a date type, + its value will be interpreted as milliseconds since the Unix epoch, converted to unsigned long. + Boolean *true* will be converted to unsigned long *1*, *false* to *0*. + + \`\`\` + ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo" + | EVAL long1 = TO_UNSIGNED_LONG(str1), long2 = TO_ULONG(str2), long3 = TO_UL(str3) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', ignoreTag: true, @@ -4556,105 +3510,109 @@ ROW ver = CONCAT(("0"::INT + 1)::STRING, ".2.3")::VERSION /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.inOperator', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_upper', { - defaultMessage: 'IN', + defaultMessage: 'TO_UPPER', } ), description: ( + + ### TO_UPPER + Returns a new string representing the input string converted to upper case. + + \`\`\` + ROW message = "Some Text" + | EVAL message_upper = TO_UPPER(message) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stringOperators', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_version', { - defaultMessage: 'LIKE and RLIKE', + defaultMessage: 'TO_VERSION', } ), description: ( -Use \`RLIKE\` to match strings using regular expressions: + ### TO_VERSION + Converts an input string to a version value. -\`\`\` -FROM employees -| WHERE first_name RLIKE ".leja.*" -| KEEP first_name, last_name -\`\`\` - `, + \`\`\` + ROW v = TO_VERSION("1.2.3") + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> ), }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.predicates', + 'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.trim', { - defaultMessage: 'NULL values', + defaultMessage: 'TRIM', } ), description: ( + + ### TRIM + Removes leading and trailing whitespaces from a string. + + \`\`\` + ROW message = " some text ", color = " red " + | EVAL message = TRIM(message) + | EVAL color = TRIM(color) + \`\`\` + `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, } )} /> diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 3f3a6e8b1fef9..dd4d2709bd4cf 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -5331,7 +5331,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.atan": "Renvoie l'arc tangente de l'entrée\nexpression numérique sous forme d'angle, exprimée en radians.", "kbn-esql-validation-autocomplete.esql.definitions.atan2": "L'angle entre l'axe positif des x et le rayon allant de\nl'origine au point (x , y) dans le plan cartésien, exprimée en radians.", "kbn-esql-validation-autocomplete.esql.definitions.autoBucketDoc": "Groupement automatique des dates en fonction d'une plage et d'un compartiment cible donnés.", - "kbn-esql-validation-autocomplete.esql.definitions.avgDoc": "Renvoie la moyenne des valeurs dans un champ", "kbn-esql-validation-autocomplete.esql.definitions.byDoc": "Par", "kbn-esql-validation-autocomplete.esql.definitions.case": "Accepte les paires de conditions et de valeurs. La fonction renvoie la valeur correspondant à la première condition évaluée à `true` (vraie). Si le nombre d'arguments est impair, le dernier argument est la valeur par défaut qui est renvoyée si aucune condition ne correspond.", "kbn-esql-validation-autocomplete.esql.definitions.cbrt": "Renvoie la racine cubique d'un nombre. La valeur de renvoi est toujours un double, quelle que soit la valeur numérique de l'entrée.\nLa racine cubique de l’infini est nulle.", @@ -5345,8 +5344,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.concat": "Concatène deux ou plusieurs chaînes.", "kbn-esql-validation-autocomplete.esql.definitions.cos": "Renvoie le cosinus d'un angle.", "kbn-esql-validation-autocomplete.esql.definitions.cosh": "Renvoie le cosinus hyperbolique d'un angle.", - "kbn-esql-validation-autocomplete.esql.definitions.countDistinctDoc": "Renvoie le décompte des valeurs distinctes dans un champ.", - "kbn-esql-validation-autocomplete.esql.definitions.countDoc": "Renvoie le décompte des valeurs dans un champ.", "kbn-esql-validation-autocomplete.esql.definitions.date_diff": "Soustrait le `startTimestamp` du `endTimestamp` et renvoie la différence en multiples d'`unité`.\nSi `startTimestamp` est postérieur à `endTimestamp`, des valeurs négatives sont renvoyées.", "kbn-esql-validation-autocomplete.esql.definitions.date_extract": "Extrait des parties d'une date, telles que l'année, le mois, le jour, l'heure.", "kbn-esql-validation-autocomplete.esql.definitions.date_format": "Renvoie une représentation sous forme de chaîne d'une date dans le format fourni.", @@ -5391,12 +5388,8 @@ "kbn-esql-validation-autocomplete.esql.definitions.log": "Renvoie le logarithme d'une valeur dans une base. La valeur de renvoi est toujours un double, quelle que soit la valeur numérique de l'entrée.\n\nLes journaux de zéros, de nombres négatifs et de base 1 renvoient `null` ainsi qu'un avertissement.", "kbn-esql-validation-autocomplete.esql.definitions.log10": "Renvoie le logarithme d'une valeur en base 10. La valeur de renvoi est toujours un double, quelle que soit la valeur numérique de l'entrée.\n\nLes logs de 0 et de nombres négatifs renvoient `null` ainsi qu'un avertissement.", "kbn-esql-validation-autocomplete.esql.definitions.ltrim": "Retire les espaces au début des chaînes.", - "kbn-esql-validation-autocomplete.esql.definitions.maxDoc": "Renvoie la valeur maximale dans un champ.", - "kbn-esql-validation-autocomplete.esql.definitions.medianDeviationDoc": "Renvoie la médiane de chaque écart de point de données par rapport à la médiane de l'ensemble de l'échantillon.", - "kbn-esql-validation-autocomplete.esql.definitions.medianDoc": "Renvoie le 50centile.", "kbn-esql-validation-autocomplete.esql.definitions.metadataDoc": "Métadonnées", "kbn-esql-validation-autocomplete.esql.definitions.metricsDoc": "Une commande source spécifique aux indicateurs, utilisez-la pour charger des données à partir des index de TSDB. Similaire à la commande STATS : calcule les statistiques agrégées, telles que la moyenne, le décompte et la somme, sur l'ensemble des résultats de recherche entrants. Si elle est utilisée sans clause BY, une seule ligne est renvoyée, qui est l'agrégation de tout l'ensemble des résultats de recherche entrants. Lorsque vous utilisez une clause BY, une ligne est renvoyée pour chaque valeur distincte dans le champ spécifié dans la clause BY. La commande renvoie uniquement les champs dans l'agrégation, et vous pouvez utiliser un large éventail de fonctions statistiques avec la commande stats. Lorsque vous effectuez plusieurs agrégations, séparez chacune d'entre elle par une virgule.", - "kbn-esql-validation-autocomplete.esql.definitions.minDoc": "Renvoie la valeur minimale dans un champ.", "kbn-esql-validation-autocomplete.esql.definitions.mv_append": "Concatène les valeurs de deux champs à valeurs multiples.", "kbn-esql-validation-autocomplete.esql.definitions.mv_avg": "Convertit un champ multivalué en un champ à valeur unique comprenant la moyenne de toutes les valeurs.", "kbn-esql-validation-autocomplete.esql.definitions.mv_concat": "Convertit une expression de type chaîne multivalué en une colonne à valeur unique comprenant la concaténation de toutes les valeurs, séparées par un délimiteur.", @@ -5414,7 +5407,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.mvExpandDoc": "Développe des champs comportant des valeurs multiples en indiquant une valeur par ligne et en dupliquant les autres champs", "kbn-esql-validation-autocomplete.esql.definitions.now": "Renvoie la date et l'heure actuelles.", "kbn-esql-validation-autocomplete.esql.definitions.onDoc": "Activé", - "kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc": "Renvoie le n-ième centile d'un champ.", "kbn-esql-validation-autocomplete.esql.definitions.pi": "Renvoie Pi, le rapport entre la circonférence et le diamètre d'un cercle.", "kbn-esql-validation-autocomplete.esql.definitions.pow": "Renvoie la valeur d’une `base` élevée à la puissance d’un `exposant`.", "kbn-esql-validation-autocomplete.esql.definitions.renameDoc": "Attribue un nouveau nom à une ancienne colonne", @@ -5440,9 +5432,7 @@ "kbn-esql-validation-autocomplete.esql.definitions.st_y": "Extrait la coordonnée `y` du point fourni.\nSi les points sont de type `geo_point`, cela revient à extraire la valeur de la `latitude`.", "kbn-esql-validation-autocomplete.esql.definitions.starts_with": "Renvoie un booléen qui indique si une chaîne de mot-clés débute par une autre chaîne.", "kbn-esql-validation-autocomplete.esql.definitions.statsDoc": "Calcule les statistiques agrégées, telles que la moyenne, le décompte et la somme, sur l'ensemble des résultats de recherche entrants. Comme pour l'agrégation SQL, si la commande stats est utilisée sans clause BY, une seule ligne est renvoyée, qui est l'agrégation de tout l'ensemble des résultats de recherche entrants. Lorsque vous utilisez une clause BY, une ligne est renvoyée pour chaque valeur distincte dans le champ spécifié dans la clause BY. La commande stats renvoie uniquement les champs dans l'agrégation, et vous pouvez utiliser un large éventail de fonctions statistiques avec la commande stats. Lorsque vous effectuez plusieurs agrégations, séparez chacune d'entre elle par une virgule.", - "kbn-esql-validation-autocomplete.esql.definitions.stCentroidDoc": "Renvoie le décompte des valeurs distinctes dans un champ.", "kbn-esql-validation-autocomplete.esql.definitions.substring": "Renvoie la sous-chaîne d'une chaîne, délimitée en fonction d'une position de départ et d'une longueur facultative", - "kbn-esql-validation-autocomplete.esql.definitions.sumDoc": "Renvoie la somme des valeurs dans un champ.", "kbn-esql-validation-autocomplete.esql.definitions.tan": "Renvoie la fonction trigonométrique Tangente d'un angle.", "kbn-esql-validation-autocomplete.esql.definitions.tanh": "Renvoie la fonction hyperbolique Tangente d'un angle.", "kbn-esql-validation-autocomplete.esql.definitions.tau": "Renvoie le rapport entre la circonférence et le rayon d'un cercle.", @@ -5464,10 +5454,8 @@ "kbn-esql-validation-autocomplete.esql.definitions.to_unsigned_long": "Convertit une valeur d'entrée en une valeur longue non signée. Si le paramètre d'entrée est de type date,\nsa valeur sera interprétée en millisecondes depuis l'heure Unix, convertie en valeur longue non signée.\nLe booléen *true* sera converti en valeur longue non signée *1*, et *false* en *0*.", "kbn-esql-validation-autocomplete.esql.definitions.to_upper": "Renvoie une nouvelle chaîne représentant la chaîne d'entrée convertie en majuscules.", "kbn-esql-validation-autocomplete.esql.definitions.to_version": "Convertit une chaîne d'entrée en une valeur de version.", - "kbn-esql-validation-autocomplete.esql.definitions.topListDoc": "Collecte les N premières valeurs par compartiment.", "kbn-esql-validation-autocomplete.esql.definitions.trim": "Supprime les espaces de début et de fin d'une chaîne.", "kbn-esql-validation-autocomplete.esql.definitions.values": "Renvoie toutes les valeurs d'un groupe dans un tableau.", - "kbn-esql-validation-autocomplete.esql.definitions.weightedAvgDoc": "Une agrégation qui calcule la moyenne pondérée des valeurs numériques extraites des documents agrégés.", "kbn-esql-validation-autocomplete.esql.definitions.whereDoc": "Utilise \"predicate-expressions\" pour filtrer les résultats de recherche. Une expression predicate, lorsqu'elle est évaluée, renvoie TRUE ou FALSE. La commande where renvoie uniquement les résultats qui donnent la valeur TRUE. Par exemple, pour filtrer les résultats pour une valeur de champ spécifique", "kbn-esql-validation-autocomplete.esql.definitions.withDoc": "Avec", "kbn-esql-validation-autocomplete.esql.divide.warning.divideByZero": "Impossible de diviser par zéro : {left}/{right}", @@ -7215,8 +7203,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.atan2.markdown": "\n\n ### ATAN2\n L'angle entre l'axe positif des x et le rayon allant de\n l'origine au point (x , y) dans le plan cartésien, exprimée en radians.\n\n ````\n ROW y=12.9, x=.6\n | EVAL atan2=ATAN2(y, x)\n ````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.autoBucketFunction": "COMPARTIMENT", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.autoBucketFunction.markdown": "### COMPARTIMENT\nCréer des groupes de valeurs, des compartiments (\"buckets\"), à partir d'une entrée d'un numéro ou d'un horodatage. La taille des compartiments peut être fournie directement ou choisie selon une plage de valeurs et de décompte recommandée.\n\n`BUCKET` a deux modes de fonctionnement : \n\n1. Dans lequel la taille du compartiment est calculée selon la recommandation de décompte d'un compartiment (quatre paramètres) et une plage.\n2. Dans lequel la taille du compartiment est fournie directement (deux paramètres).\n\nAvec un nombre cible de compartiments, le début d'une plage et la fin d'une plage, `BUCKET` choisit une taille de compartiment appropriée afin de générer le nombre cible de compartiments ou moins.\n\nPar exemple, demander jusqu'à 20 compartiments pour une année organisera les données en intervalles mensuels :\n\n````\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hire_date = MV_SORT(VALUES(hire_date)) BY month = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT hire_date\n````\n\n**REMARQUE** : Le but n'est pas de fournir le nombre précis de compartiments, mais plutôt de sélectionner une plage qui fournit, tout au plus, le nombre cible de compartiments.\n\nVous pouvez combiner `BUCKET` avec une agrégation pour créer un histogramme :\n\n````\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_month = COUNT(*) BY month = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT month\n````\n\n**REMARQUE** : `BUCKET` ne crée pas de compartiments qui ne correspondent à aucun document. C'est pourquoi, dans l'exemple précédent, il manque 1985-03-01 ainsi que d'autres dates.\n\nDemander d'autres compartiments peut résulter en une plage réduite. Par exemple, demander jusqu'à 100 compartiments en un an résulte en des compartiments hebdomadaires :\n\n````\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 100, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT week\n````\n\n**REMARQUE** : `AUTO_BUCKET` ne filtre aucune ligne. Il n'utilise que la plage fournie pour choisir une taille de compartiment appropriée. Pour les lignes dont la valeur se situe en dehors de la plage, il renvoie une valeur de compartiment qui correspond à un compartiment situé en dehors de la plage. Associez `BUCKET` à `WHERE` pour filtrer les lignes.\n\nSi la taille de compartiment désirée est connue à l'avance, fournissez-la comme second argument, en ignorant la plage :\n\n````\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 1 week)\n| SORT week\n````\n\n**REMARQUE** : Lorsque vous fournissez la taille du compartiment comme second argument, ce dernier doit être une période temporelle ou une durée.\n\n`BUCKET` peut également être utilisé pour des champs numériques. Par exemple, pour créer un histogramme de salaire :\n\n````\nFROM employees\n| STATS COUNT(*) by bs = BUCKET(salary, 20, 25324, 74999)\n| SORT bs\n````\n\nContrairement à l'exemple précédent qui filtre intentionnellement sur une plage temporelle, vous n'avez pas souvent besoin de filtrer sur une plage numérique. Vous devez trouver les valeurs min et max séparément. ES|QL n'a pas encore de façon aisée d'effectuer cette opération automatiquement.\n\nLa plage peut être ignorée si la taille désirée de compartiment est connue à l'avance. Fournissez-la simplement comme second argument :\n\n````\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS c = COUNT(1) BY b = BUCKET(salary, 5000.)\n| SORT b\n````\n\n**REMARQUE** : Lorsque vous fournissez la taille du compartiment comme second argument, elle doit être de type à **virgule flottante**.\n\nVoici un exemple sur comment créer des compartiments horaires pour les dernières 24 heures, et calculer le nombre d'événements par heure :\n\n````\nFROM sample_data\n| WHERE @timestamp >= NOW() - 1 day and @timestamp < NOW()\n| STATS COUNT(*) BY bucket = BUCKET(@timestamp, 25, NOW() - 1 day, NOW())\n````\n\nVoici un exemple permettant de créer des compartiments mensuels pour l'année 1985, et calculer le salaire moyen par mois d'embauche :\n\n````\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS AVG(salary) BY bucket = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT bucket\n````\n\n`BUCKET` peut être utilisé pour les parties de groupage et d'agrégation de la commande `STATS …​ BY ...`, tant que la partie d'agrégation de la fonction est **référencée par un alias défini dans la partie de groupage**, ou que celle-ci est invoquée avec exactement la même expression.\n\nPar exemple :\n\n````\nFROM employees\n| STATS s1 = b1 + 1, s2 = BUCKET(salary / 1000 + 999, 50.) + 2 BY b1 = BUCKET(salary / 100 + 99, 50.), b2 = BUCKET(salary / 1000 + 999, 50.)\n| SORT b1, b2\n| KEEP s1, b1, s2, b2\n````\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.avgFunction": "AVG", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.avgFunction.markdown": "### AVG\nRenvoie la moyenne d'un champ numérique.\n\n````\nFROM employees\n| STATS AVG(height)\n````\n\nCette expression peut utiliser des fonctions alignées. Par exemple, pour calculer la moyenne sur une colonne multivaluée, il faut d'abord utiliser`MV_AVG` pour faire la moyenne des multiples valeurs par ligne et utiliser le résultat avec la fonction `AVG` :\n\n````\nFROM employees\n| STATS avg_salary_change = AVG(MV_AVG(salary_change))\n````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.binaryOperators": "Opérateurs binaires", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.binaryOperators.markdown": "### Opérateurs binaires\nLes opérateurs de comparaison binaire suivants sont pris en charge :\n\n* égalité : `==`\n* inégalité : `!=`\n* inférieur à : `<`\n* inférieur ou égal à : `<=`\n* supérieur à : `>`\n* supérieur ou égal à : `>=`\n* ajouter : `+`\n* soustraire : `-`\n* multiplier par : `*`\n* diviser par : `/`\n* module : `%`\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.booleanOperators": "Opérateurs booléens", @@ -7241,10 +7227,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cos.markdown": "\n\n ### COS\n Renvoie le cosinus d'un angle.\n\n ````\n ROW a=1.8 \n | EVAL cos=COS(a)\n ````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cosh": "COSH", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cosh.markdown": "\n\n ### COSH\n Renvoie le cosinus hyperbolique d'un angle.\n\n ````\n ROW a=1.8 \n | EVAL cosh=COSH(a)\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countDistinctFunction": "COUNT_DISTINCT", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countDistinctFunction.markdown": "### COUNT_DISTINCT\nDécompte le nombre approximatif de valeurs distinctes.\n\n````\nFROM hosts\n| STATS COUNT_DISTINCT(ip0), COUNT_DISTINCT(ip1)\n```\n\nLa fonction `COUNT_DISTINCT` est approximative, basée sur l'algorithme HyperLogLog++. Pour en savoir plus, consultez la [documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#_counts_are_approximate). La précision est configurable à l'aide d'un deuxième paramètre facultatif. La valeur maximale compatible est 40000. Les seuils supérieurs à ce nombre auront le même effet qu'un seuil de 40000. La valeur par défaut est 3000.\n\n````\nFROM hosts\n| STATS COUNT_DISTINCT(ip0, 80000), COUNT_DISTINCT(ip1, 5)\n````\n\nCette expression peut utiliser des fonctions alignées. Cet exemple divise une chaîne en plusieurs valeurs à l'aide de la fonction `SPLIT` et compte les valeurs uniques :\n\n````\nROW words=\"foo;bar;baz;qux;quux;foo\"\n| STATS distinct_word_count = COUNT_DISTINCT(SPLIT(words, \";\"))\n````\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countFunction": "COUNT", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countFunction.markdown": "### COUNT\nRenvoie le nombre total de valeurs en entrée.\n\n````\nFROM employees\n| STATS COUNT(height)\n````\n\nPeut prendre n'importe quel type de champ en entrée.\n\nPour compter le nombre de lignes, utiliser `COUNT()` ou `COUNT(*)` :\n\n````\nFROM employees\n| STATS count = COUNT(*) BY languages\n| SORT languages DESC\n````\n\nCette expression peut utiliser des fonctions alignées. Cet exemple divise une chaîne en plusieurs valeurs à l'aide de la fonction `SPLIT` et compte les valeurs :\n\n````\nROW words=\"foo;bar;baz;qux;quux;foo\"\n| STATS word_count = COUNT(SPLIT(words, \";\"))\n````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_diff": "DATE_DIFF", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_diff.markdown": "\n\n ### DATE_DIFF\n Soustrait le `startTimestamp` du `endTimestamp` et renvoie la différence en multiples `d'unité`.\n Si `startTimestamp` est postérieur à `endTimestamp`, des valeurs négatives sont renvoyées.\n\n ````\n ROW date1 = TO_DATETIME(\"2023-12-02T11:00:00.000Z\"), date2 = TO_DATETIME(\"2023-12-02T11:00:00.001Z\")\n | EVAL dd_ms = DATE_DIFF(\"microseconds\", date1, date2)\n ````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_extract": "DATE_EXTRACT", @@ -7300,14 +7282,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ltrim": "LTRIM", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ltrim.markdown": "\n\n ### LTRIM\n Retire les espaces au début des chaînes.\n\n ````\n ROW message = \" some text \", color = \" red \"\n | EVAL message = LTRIM(message)\n | EVAL color = LTRIM(color)\n | EVAL message = CONCAT(\"'\", message, \"'\")\n | EVAL color = CONCAT(\"'\", color, \"'\")\n ````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.markdown": "## ES|QL\n\nUne requête ES|QL (langage de requête Elasticsearch) se compose d'une série de commandes, séparées par une barre verticale : `|`. Chaque requête commence par une **commande source**, qui produit un tableau, habituellement avec des données issues d'Elasticsearch. \n\nUne commande source peut être suivie d'une ou plusieurs **commandes de traitement**. Les commandes de traitement peuvent modifier le tableau de sortie de la commande précédente en ajoutant, supprimant ou modifiant les lignes et les colonnes.\n\n````\nsource-command\n| processing-command1\n| processing-command2\n````\n\nLe résultat d'une requête est le tableau produit par la dernière commande de traitement. \n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.maxFunction": "MAX", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.maxFunction.markdown": "### MAX\nRenvoie la valeur maximale d'une expression numérique.\n\n````\nFROM employees\n| STATS MAX(languages)\n````\n\nCette expression peut utiliser des fonctions alignées. Par exemple, pour calculer le maximum sur une moyenne d'une colonne multivaluée, il faut utiliser `MV_AVG` pour faire la moyenne des multiples valeurs par ligne et utiliser le résultat avec la fonction `MAX` :\n\n````\nFROM employees\n| STATS max_avg_salary_change = MAX(MV_AVG(salary_change))\n````\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianAbsoluteDeviationFunction": "MEDIAN_ABSOLUTE_DEVIATION", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianAbsoluteDeviationFunction.markdown": "### MEDIAN_ABSOLUTE_DEVIATION\nRenvoie l'écart absolu médian, une mesure de la variabilité. Il s'agit d'un indicateur robuste, ce qui signifie qu'il est utile pour décrire des données qui peuvent présenter des valeurs aberrantes ou ne pas être normalement distribuées. Pour de telles données, il peut être plus descriptif que l'écart-type.\n\nIl est calculé comme la médiane de chaque écart de point de données par rapport à la médiane de l'ensemble de l'échantillon. Autrement dit, pour une variable aléatoire X, l'écart absolu médian est `median(|median(X) - X|)`.\n\n````\nFROM employees\n| STATS MEDIAN(salary), MEDIAN_ABSOLUTE_DEVIATION(salary)\n````\n\nREMARQUE : Comme la fonction `PERCENTILE`, la fonction `MEDIAN_ABSOLUTE_DEVIATION` est généralement approximative, et basée sur l'algorithme TDigest. Elle est également non déterministe. Cela signifie que vous pouvez obtenir des résultats légèrement différents en utilisant les mêmes données.\n\nCette expression peut utiliser des fonctions alignées. Par exemple, pour calculer l'écart absolu médian des valeurs maximales d'une colonne multivaluée, il faut d'abord utiliser `MV_MAX` pour obtenir la valeur maximale par ligne, et utiliser le résultat avec la fonction `MEDIAN_ABSOLUTE_DEVIATION` :\n\n````\nFROM employees\n| STATS m_a_d_max_salary_change = MEDIAN_ABSOLUTE_DEVIATION(MV_MAX(salary_change))\n````\n\n", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianFunction": "MEDIAN", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianFunction.markdown": "### MEDIAN\nRenvoie la valeur qui est supérieure à la moitié de toutes les valeurs et inférieure à la moitié de toutes les valeurs, également connue sous le nom de `PERCENTILE` 50 %.\n\n**REMARQUE :** Comme la fonction `PERCENTILE`, la fonction `MEDIAN` est généralement approximative et basée sur l'algorithme TDigest.\n\n**AVERTISSEMENT :** `MEDIAN` est également [non déterministe](https://en.wikipedia.org/wiki/Nondeterministic_algorithm). Cela signifie que vous pouvez obtenir des résultats légèrement différents en utilisant les mêmes données.\n\nExemple :\n\n````\nFROM employees\n| STATS MEDIAN(salary), PERCENTILE(salary, 50)\n````\n\nCette expression peut utiliser des fonctions alignées. Par exemple, pour calculer le médian des valeurs maximales d'une colonne multivaluée, il faut d'abord utiliser `MV_MAX` pour obtenir la valeur maximale par ligne et utiliser le résultat avec la fonction `MEDIAN` :\n\n````\nFROM employees\n| STATS median_max_salary_change = MEDIAN(MV_MAX(salary_change))\n````\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.minFunction": "MIN", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.minFunction.markdown": "### MIN\nRenvoie la valeur minimale d'un champ numérique.\n\n````\nFROM employees\n| STATS MIN(languages)\n````\n\nCette expression peut utiliser des fonctions alignées. Par exemple, pour calculer le minimum sur une moyenne d'une colonne multivaluée, il faut utiliser `MV_AVG` pour faire la moyenne des valeurs multiples par ligne et utiliser le résultat avec la fonction `MIN` :\n\n````\nFROM employees\n| STATS min_avg_salary_change = MIN(MV_AVG(salary_change))\n````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_append": "MV_APPEND", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_append.markdown": "\n\n ### MV_APPEND\n Concatène les valeurs de deux champs à valeurs multiples.\n\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_avg": "MV_AVG", @@ -7340,8 +7314,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mvExpand.markdown": "### MV_EXPAND\nLa commande de traitement `MV_EXPAND` développe les champs multivalués en indiquant une valeur par ligne et en dupliquant les autres champs : \n````\nROW a=[1,2,3], b=\"b\", j=[\"a\",\"b\"]\n| MV_EXPAND a\n````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.now": "NOW", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.now.markdown": "\n\n ### NOW\n Renvoie la date et l'heure actuelles.\n\n ````\n ROW current_date = NOW()\n ````\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.percentileFunction": "PERCENTILE", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.percentileFunction.markdown": "### PERCENTILE\nValeur à laquelle un certain pourcentage des valeurs observées se produit. Par exemple, le 95e percentile est la valeur qui est supérieure à 95 % des valeurs observées et le 50percentile est la médiane (`MEDIAN`).\n\n````\nFROM employees\n| STATS p0 = PERCENTILE(salary, 0)\n , p50 = PERCENTILE(salary, 50)\n , p99 = PERCENTILE(salary, 99)\n````\n\n**REMARQUE** : La fonction `PERCENTILE` est généralement approximative et basée sur l'algorithme TDigest. \n\n**AVERTISSEMENT :** `PERCENTILE` est aussi [non déterministe](https://en.wikipedia.org/wiki/Nondeterministic_algorithm). Cela signifie que vous pouvez obtenir des résultats légèrement différents en utilisant les mêmes données.\n\nCette expression peut utiliser des fonctions alignées. Par exemple, pour calculer un percentile des valeurs maximales d'une colonne multivaluée, il faut d'abord utiliser `MV_MAX` pour obtenir la valeur maximale par ligne et utiliser le résultat avec la fonction `PERCENTILE` :\n\n````\nFROM employees\n| STATS p80_max_salary_change = PERCENTILE(MV_MAX(salary_change), 80)\n````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pi": "PI", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pi.markdown": "\n\n ### PI\n Renvoie Pi, le rapport entre la circonférence et le diamètre d'un cercle.\n\n ````\n ROW PI()\n ````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pow": "POW", @@ -7394,14 +7366,10 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.starts_with.markdown": "\n\n ### STARTS_WITH\n Renvoie un booléen qui indique si une chaîne de mot-clés débute par une autre chaîne.\n\n ````\n FROM employees\n | KEEP last_name\n | EVAL ln_S = STARTS_WITH(last_name, \"B\")\n ````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.statsby": "STATS ... BY", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.statsby.markdown": "### STATS ... BY\nUtilisez `STATS ... BY` pour regrouper les lignes en fonction d'une valeur commune et calculer une ou plusieurs valeurs agrégées sur les lignes regroupées.\n\n**Exemples** :\n\n````\nFROM employees\n| STATS count = COUNT(emp_no) BY languages\n| SORT languages\n````\n\nSi `BY` est omis, le tableau de sortie contient exactement une ligne avec les agrégations appliquées sur l'ensemble des données :\n\n````\nFROM employees\n| STATS avg_lang = AVG(languages)\n````\n\nIl est possible de calculer plusieurs valeurs :\n\n````\nFROM employees\n| STATS avg_lang = AVG(languages), max_lang = MAX(languages)\n````\n\nIl est également possible d'effectuer des regroupements en fonction de plusieurs valeurs (uniquement pour les champs longs et les champs de la famille de mots-clés) :\n\n````\nFROM employees\n| EVAL hired = DATE_FORMAT(hire_date, \"YYYY\")\n| STATS avg_salary = AVG(salary) BY hired, languages.long\n| EVAL avg_salary = ROUND(avg_salary)\n| SORT hired, languages.long\n````\n\nConsultez la rubrique **Fonctions d'agrégation** pour obtenir la liste des fonctions pouvant être utilisées avec `STATS ... BY`.\n\nLes fonctions d'agrégation et les expressions de regroupement acceptent toutes deux d'autres fonctions. Ceci est utile pour utiliser `STATS...BY` sur des colonnes à valeur multiple. Par exemple, pour calculer l'évolution moyenne du salaire, vous pouvez utiliser `MV_AVG` pour faire la moyenne des multiples valeurs par employé, et utiliser le résultat avec la fonction `AVG` :\n\n````\nFROM employees\n| STATS avg_salary_change = AVG(MV_AVG(salary_change))\n````\n\nLe regroupement par expression est par exemple le regroupement des employés en fonction de la première lettre de leur nom de famille :\n\n````\nFROM employees\n| STATS my_count = COUNT() BY LEFT(last_name, 1)\n| SORT \"LEFT(last_name, 1)\"\n````\n\nIl n'est pas obligatoire d'indiquer le nom de la colonne de sortie. S'il n'est pas spécifié, le nouveau nom de la colonne est égal à l'expression. La requête suivante renvoie une colonne appelée `AVG(salary)` :\n\n````\nFROM employees\n| STATS AVG(salary)\n````\n\nComme ce nom contient des caractères spéciaux, il doit être placé entre deux caractères (`) lorsqu'il est utilisé dans des commandes suivantes :\n\n````\nFROM employees\n| STATS AVG(salary)\n| EVAL avg_salary_rounded = ROUND(\"AVG(salary)\")\n````\n\n**Remarque** : `STATS` sans aucun groupe est beaucoup plus rapide que l'ajout d'un groupe.\n\n**Remarque** : Le regroupement sur une seule expression est actuellement beaucoup plus optimisé que le regroupement sur plusieurs expressions.\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stCentroidFunction": "ST_CENTROID_AGG", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stCentroidFunction.markdown": "### ST_CENTROID_AGG\n**AVERTISSEMENT : Cette fonctionnalité est en version d'évaluation technique et pourra être modifiée ou supprimée dans une future version. Elastic s'efforcera de corriger tout problème éventuel, mais les fonctionnalités des versions d'évaluation technique ne sont pas soumises aux accords de niveau de service (SLA) d'assistance des fonctionnalités officielles en disponibilité générale.**\n\nCalcule le centroïde spatial sur un champ avec un type de géométrie de point spatial.\n\n````\nAéroports FROM\n| STATS centroid=ST_CENTROID_AGG(location)\n````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stringOperators": "LIKE et RLIKE", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stringOperators.markdown": "### LIKE et RLIKE\nPour comparer des chaînes en utilisant des caractères génériques ou des expressions régulières, utilisez `LIKE` ou `RLIKE` :\n\nUtilisez `LIKE` pour faire correspondre des chaînes à l'aide de caractères génériques. Les caractères génériques suivants sont pris en charge :\n\n* `*` correspond à zéro caractère ou plus.\n* `?` correspond à un seul caractère.\n\n````\nFROM employees\n| WHERE first_name LIKE \"?b*\"\n| KEEP first_name, last_name\n````\n\nUtilisez `RLIKE` pour faire correspondre des chaînes à l'aide d'expressions régulières :\n\n````\nFROM employees\n| WHERE first_name RLIKE \".leja.*\"\n| KEEP first_name, last_name\n````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.substring": "SUBSTRING", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.substring.markdown": "\n\n ### SUBSTRING\n Renvoie la sous-chaîne d'une chaîne, délimitée en fonction d'une position de départ et d'une longueur facultative\n\n ````\n FROM employees\n | KEEP last_name\n | EVAL ln_sub = SUBSTRING(last_name, 1, 3)\n ````\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sumFunction": "SUM", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sumFunction.markdown": "### SUM\nRenvoie la somme d'un champ numérique.\n\n````\nFROM employees\n| STATS SUM(languages)\n````\n\nCette expression peut utiliser des fonctions alignées. Par exemple, pour calculer la somme de l'évolution de salaire maximale de chaque employé, appliquez la fonction `MV_MAX` à chaque ligne et additionnez les résultats (`SUM`) :\n\n````\nFROM employees\n| STATS total_salary_changes = SUM(MV_MAX(salary_change))\n````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tan": "TAN", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tan.markdown": "\n\n ### TAN\n Renvoie la fonction trigonométrique Tangente d'un angle.\n\n ````\n ROW a=1.8 \n | EVAL tan=TAN(a)\n ````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tanh": "TANH", @@ -7446,8 +7414,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_version.markdown": "\n\n ### TO_VERSION\n Convertit une chaîne d'entrée en une valeur de version.\n\n ````\n ROW v = TO_VERSION(\"1.2.3\")\n ````\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.trim": "TRIM", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.trim.markdown": "\n\n ### TRIM\n Supprime les espaces de début et de fin d'une chaîne.\n\n ````\n ROW message = \" some text \", color = \" red \"\n | EVAL message = TRIM(message)\n | EVAL color = TRIM(color)\n ````\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.valuesFunction": "VALEURS", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.valuesFunction.markdown": "### VALEURS\n\n**AVERTISSEMENT : N’utilisez pas `VALUES` dans les environnements de production. Cette fonctionnalité est en version d'évaluation technique et pourra être modifiée ou supprimée dans une future version. Elastic s'efforcera de corriger tout problème éventuel, mais les fonctionnalités des versions d'évaluation technique ne sont pas soumises aux accords de niveau de service (SLA) d'assistance des fonctionnalités officielles en disponibilité générale.**\n\nRenvoie toutes les valeurs d’un groupe dans un champ multivalué. L'ordre des valeurs renvoyées n'est pas garanti. Si vous avez besoin que les valeurs renvoyées soient dans l'ordre, utilisez `MV_SORT`.\n\nAccepte une expression de n'importe quel type, sauf `geo_point`, `cartesian_point`, `geo_shape` ou `cartesian_shape`.\n\n\nExemple :\n\n````\n FROM employees\n| EVAL first_letter = SUBSTRING(first_name, 0, 1)\n| STATS first_name=MV_SORT(VALUES(first_name)) BY first_letter\n| SORT first_letter\n````\n\n> _**AVERTISSEMENT :** Ceci peut utiliser une quantité importante de mémoire et ES|QL ne développe pas encore les agrégations au-delà de la mémoire. Cette agrégation fonctionnera donc jusqu'à ce qu'elle soit utilisée pour collecter plus de valeurs que la mémoire ne peut en contenir. Lorsque le nombre de valeurs collectées est trop élevé, la requête échoue avec un message d'erreur de type [Circuit Breaker Error](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker-errors.html)._\n\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.where": "WHERE", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.where.markdown": "### WHERE\nUtilisez `WHERE` afin d'obtenir un tableau qui comprend toutes les lignes du tableau d'entrée pour lesquelles la condition fournie est évaluée à `true` :\n \n````\nFROM employees\n| KEEP first_name, last_name, still_hired\n| WHERE still_hired == true\n````\n\n#### Opérateurs\n\nPour obtenir un aperçu des opérateurs pris en charge, consultez la section **Opérateurs**.\n\n#### Fonctions\n`WHERE` prend en charge diverses fonctions de calcul des valeurs. Pour en savoir plus, consultez la section **Fonctions**.\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationLabel": "Documentation", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 017ceeaa66c08..1e6b0cb9dab35 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -5328,7 +5328,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.atan": "入力\n数値式のアークタンジェントをラジアンで表記された角度として返します。", "kbn-esql-validation-autocomplete.esql.definitions.atan2": "直交平面上の\n原点から点(x , y)に向かう光線と正のx軸のなす角(ラジアン表記)。", "kbn-esql-validation-autocomplete.esql.definitions.autoBucketDoc": "指定された範囲とバケット目標に基づいて、日付を自動的にバケット化します。", - "kbn-esql-validation-autocomplete.esql.definitions.avgDoc": "フィールドの値の平均を返します", "kbn-esql-validation-autocomplete.esql.definitions.byDoc": "グループ基準", "kbn-esql-validation-autocomplete.esql.definitions.case": "条件と値のペアを指定できます。この関数は、最初にtrueと評価された条件に属する値を返します。引数の数が奇数の場合、最後の引数は条件に一致しない場合に返されるデフォルト値になります。", "kbn-esql-validation-autocomplete.esql.definitions.cbrt": "数値の立方根を返します。入力は任意の数値で、戻り値は常にdoubleです。\n無限大の立方根はnullです。", @@ -5342,8 +5341,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.concat": "2つ以上の文字列を連結します。", "kbn-esql-validation-autocomplete.esql.definitions.cos": "角度の余弦を返します。", "kbn-esql-validation-autocomplete.esql.definitions.cosh": "角度の双曲余弦を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.countDistinctDoc": "フィールド内の異なる値の数を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.countDoc": "フィールドの値の数を返します。", "kbn-esql-validation-autocomplete.esql.definitions.date_diff": "startTimestampをendTimestampから減算し、unitの乗数の差を返します。\nstartTimestampがendTimestampより後の場合は、負の値が返されます。", "kbn-esql-validation-autocomplete.esql.definitions.date_extract": "年、月、日、時間など、日付の一部を抽出します。", "kbn-esql-validation-autocomplete.esql.definitions.date_format": "指定した書式の日付の文字列表現を返します。", @@ -5388,12 +5385,8 @@ "kbn-esql-validation-autocomplete.esql.definitions.log": "基数に対する値の対数を返します。入力は任意の数値で、戻り値は常にdoubleです。\n\nゼロの対数、負数、1の基数はnullと警告を返します。", "kbn-esql-validation-autocomplete.esql.definitions.log10": "基数10に対する値の対数を返します。入力は任意の数値で、戻り値は常にdoubleです。\n\n0の対数および負数はnullと警告を返します。", "kbn-esql-validation-autocomplete.esql.definitions.ltrim": "文字列から先頭の空白を取り除きます。", - "kbn-esql-validation-autocomplete.esql.definitions.maxDoc": "フィールドの最大値を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.medianDeviationDoc": "サンプル全体の中央値からの各データポイントの偏差の中央値を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.medianDoc": "50%パーセンタイルを返します。", "kbn-esql-validation-autocomplete.esql.definitions.metadataDoc": "メタデータ", "kbn-esql-validation-autocomplete.esql.definitions.metricsDoc": "メトリック固有のソースコマンド。TSDBインデックスからデータを読み込むするには、このコマンドを使用します。STATSコマンドのように、受信検索結果セットで、平均、カウント、合計などの集約統計情報を計算できます。BY句なしで使用した場合は、1行のみが返されます。これは、受信検索結果セット全体に対する集約です。BY句を使用すると、BY句で指定したフィールドの1つの値ごとに1行が返されます。このコマンドは集約のフィールドのみを返します。statsコマンドではさまざまな統計関数を使用できます。複数の集約を実行するときには、各集約をカンマで区切ります。", - "kbn-esql-validation-autocomplete.esql.definitions.minDoc": "フィールドの最小値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.mv_append": "2つの複数値フィールドの値を連結します", "kbn-esql-validation-autocomplete.esql.definitions.mv_avg": "複数値フィールドを、すべての値の平均を含む単一値フィールドに変換します。", "kbn-esql-validation-autocomplete.esql.definitions.mv_concat": "複数値文字列式を、区切り文字で区切られたすべての値を連結した単一値列に変換します。", @@ -5411,7 +5404,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.mvExpandDoc": "複数値フィールドを値ごとに1行に展開し、他のフィールドを複製します", "kbn-esql-validation-autocomplete.esql.definitions.now": "現在の日付と時刻を返します。", "kbn-esql-validation-autocomplete.esql.definitions.onDoc": "オン", - "kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc": "フィールドのnパーセンタイルを返します。", "kbn-esql-validation-autocomplete.esql.definitions.pi": "円の円周と直径の比率であるPiを返します。", "kbn-esql-validation-autocomplete.esql.definitions.pow": "exponentのべき乗にしたbaseの値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.renameDoc": "古い列の名前を新しい列に変更", @@ -5437,9 +5429,7 @@ "kbn-esql-validation-autocomplete.esql.definitions.st_y": "指定された点からy座標を抽出します。\nこの点がgeo_pointタイプの場合は、latitude値を抽出するのと同じ結果になります。", "kbn-esql-validation-autocomplete.esql.definitions.starts_with": "キーワード文字列が他の文字列で始まるかどうかを示すブール値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.statsDoc": "受信検索結果セットで、平均、カウント、合計などの集約統計情報を計算します。SQL集約と同様に、statsコマンドをBY句なしで使用した場合は、1行のみが返されます。これは、受信検索結果セット全体に対する集約です。BY句を使用すると、BY句で指定したフィールドの1つの値ごとに1行が返されます。statsコマンドは集約のフィールドのみを返します。statsコマンドではさまざまな統計関数を使用できます。複数の集約を実行するときには、各集約をカンマで区切ります。", - "kbn-esql-validation-autocomplete.esql.definitions.stCentroidDoc": "フィールド内の異なる値の数を返します。", "kbn-esql-validation-autocomplete.esql.definitions.substring": "文字列のサブ文字列を、開始位置とオプションの長さで指定して返します。", - "kbn-esql-validation-autocomplete.esql.definitions.sumDoc": "フィールドの値の合計を返します。", "kbn-esql-validation-autocomplete.esql.definitions.tan": "角度の正接三角関数を返します。", "kbn-esql-validation-autocomplete.esql.definitions.tanh": "角度の正接双曲線関数を返します。", "kbn-esql-validation-autocomplete.esql.definitions.tau": "円の円周と半径の比率を返します。", @@ -5461,10 +5451,8 @@ "kbn-esql-validation-autocomplete.esql.definitions.to_unsigned_long": "入力値を符号なしlong値に変換します。入力パラメーターが日付型の場合、\nその値はUnixのエポックからのミリ秒として解釈され、符号なしlong値に変換されます。\nブール値の*true*は符号なしlong値の*1*に、*false*は*0*に変換されます。", "kbn-esql-validation-autocomplete.esql.definitions.to_upper": "大文字に変換された入力文字列を表す新しい文字列を返します。", "kbn-esql-validation-autocomplete.esql.definitions.to_version": "入力文字列をバージョン値に変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.topListDoc": "バケットごとに上位N値を収集します。", "kbn-esql-validation-autocomplete.esql.definitions.trim": "文字列から先頭と末尾の空白を削除します。", "kbn-esql-validation-autocomplete.esql.definitions.values": "グループのすべての値を配列として返します。", - "kbn-esql-validation-autocomplete.esql.definitions.weightedAvgDoc": "集約されたドキュメントから抽出された数値の加重平均値を計算する集約。", "kbn-esql-validation-autocomplete.esql.definitions.whereDoc": "「predicate-expressions」を使用して、検索結果をフィルターします。予測式は評価時にTRUEまたはFALSEを返します。whereコマンドはTRUEに評価される結果のみを返します。たとえば、特定のフィールド値の結果をフィルターします", "kbn-esql-validation-autocomplete.esql.definitions.withDoc": "を使用して", "kbn-esql-validation-autocomplete.esql.divide.warning.divideByZero": "ゼロで除算できません:{left}/{right}", @@ -7209,8 +7197,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.atan2.markdown": "\n\n ### ATAN2\n 直交平面上の原点から点(x , y)に向かう光線と正のx軸のなす角(ラジアン表記)。\n \n\n ```\n ROW y=12.9, x=.6\n | EVAL atan2=ATAN2(y, x)\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.autoBucketFunction": "BUCKET", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.autoBucketFunction.markdown": "### バケット\n日時または数値入力から、値(バケット)のグループを作成します。バケットのサイズは直接指定するか、推奨される数と値の範囲に基づいて選択できます。\n\nBUCKETは次の2つのモードで動作します。\n\n1.バケットのサイズがバケット数の提案(4つのパラメーター)と範囲に基づいて計算される。\n2.バケットサイズが直接指定される(2つのパラメーター)。\n\n目標バケット数、開始日、終了日を使用すると、目標バケット数以下のバケットを生成するために適切なバケットサイズがBUCKETによって選択されます。\n\nたとえば、1年に最大20バケットをリクエストすると、データが1か月間隔で整理されます。\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hire_date = MV_SORT(VALUES(hire_date)) BY month = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT hire_date\n```\n\n**注**:ここでは、正確な目標バケット数を指定するのではなく、目標バケット数を_上限_として範囲を指定します。\n\nBUCKETを集約と組み合わせ、ヒストグラムを作成できます。\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_month = COUNT(*) BY month = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT month\n```\n\n**注**:BUCKETは、どのドキュメントにも一致しないバケットを作成しません。そのため、前の例では1985-03-01やその他の日付が抜けています。\n\nその他のバケットを要求すると、範囲が小さくなることがあります。たとえば、1年に最大100バケットをリクエストすると、1週間単位のバケットになります。\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 100, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT week\n```\n\n**注**:AUTO_BUCKETは行をフィルタリングしません。指定された範囲のみを使用して、適切なバケットサイズを選択します。範囲外の値の行に対しては、範囲外のバケツに対応するバケット値を返します。行をフィルタリングするには、BUCKETとWHEREを組み合わせます。\n\n事前に任意のバケットサイズがわかっている場合は、2番目の引数として指定し、範囲を除外します。\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 1 week)\n| SORT week\n```\n\n**注**:バケットサイズを2番目のパラメーターとして指定するときには、時間の期間または日付の期間を選択する必要があります。\n\nBUCKETは数値フィールドでも動作します。たとえば、給与ヒストグラムを作成します。\n\n```\nFROM employees\n| STATS COUNT(*) by bs = BUCKET(salary, 20, 25324, 74999)\n| SORT bs\n```\n\n日付範囲で意図的フィルタリングする前の例とは異なり、数値フィールドでフィルタリングすることはほとんどありません。最小値と最大値を別々に見つける必要があります。ES|QLにはそれを自動的に実行するための簡単な方法がありません。\n\n任意のバケットサイズが事前にわかっている場合は、範囲を省略できます。2番目の引数として指定します。\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS c = COUNT(1) BY b = BUCKET(salary, 5000.)\n| SORT b\n```\n\n**注**:バケットサイズを2番目のパラメーターとして指定するときには、**浮動小数点数型**でなければなりません。\n\n次の例は、過去24時間の1時間単位のバケットを作成し、1時間当たりのイベント数を計算します。\n\n```\nFROM sample_data\n| WHERE @timestamp >= NOW() - 1 day and @timestamp < NOW()\n| STATS COUNT(*) BY bucket = BUCKET(@timestamp, 25, NOW() - 1 day, NOW())\n```\n\n次の例は、1985年の1か月単位のバケットを作成し、採用月別に平均給与を計算します。\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS AVG(salary) BY bucket = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT bucket\n```\n\n集約部で関数が**グループ部で定義されたエイリアスによって参照されている**場合、またはまったく同じ式で呼び出されている場合、BUCKETは、 STATS …​ BY …コマンドの集約部とグループ部の両方で使用できます。\n\n例:\n\n```\nFROM employees\n| STATS s1 = b1 + 1, s2 = BUCKET(salary / 1000 + 999, 50.) + 2 BY b1 = BUCKET(salary / 100 + 99, 50.), b2 = BUCKET(salary / 1000 + 999, 50.)\n| SORT b1, b2\n| KEEP s1, b1, s2, b2\n```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.avgFunction": "AVG", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.avgFunction.markdown": "### AVG\n数値フィールドの平均を返します。\n\n```\nFROM employees\n| STATS AVG(height)\n```\n\n式はインライン関数を使用できます。たとえば、複数値列で平均を計算するには、まず、MV_AVGを使用して行ごとに複数の値の平均を求め、その結果にAVG関数を適用します。\n\n```\nFROM employees\n| STATS avg_salary_change = AVG(MV_AVG(salary_change))\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.binaryOperators": "バイナリ演算子", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.binaryOperators.markdown": "### バイナリ演算子\n次のバイナリ比較演算子がサポートされています。\n\n* 等号:`==`\n* 不等号:`!=`\n* より小さい:`<`\n* 以下:`<=`\n* より大きい:`>`\n* 以上:`>=`\n* 加算:`+`\n* 減算:`-`\n* 乗算:`*`\n* 除算:`/`\n* 係数:`%`\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.booleanOperators": "ブール演算子", @@ -7235,10 +7221,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cos.markdown": "\n\n ### COS\n 角度の余弦を返します。\n\n ```\n ROW a=1.8 \n | EVAL cos=COS(a)\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cosh": "COSH", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cosh.markdown": "\n\n ### COSH\n 角度の双曲余弦を返します。\n\n ```\n ROW a=1.8 \n | EVAL cosh=COSH(a)\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countDistinctFunction": "COUNT_DISTINCT", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countDistinctFunction.markdown": "### COUNT_DISTINCT\n異なる値のおおよその数をカウントします。\n\n```\nFROM hosts\n| STATS COUNT_DISTINCT(ip0), COUNT_DISTINCT(ip1)\n```\n\nCOUNT_DISTINCT関数はHyperLogLog++アルゴリズムに基づく近似関数です。詳細については、[ドキュメント](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#_counts_are_approximate)を参照してください。精度は、オプションの2番目のパラメーターを使って設定できます。サポートされている最大値は40000です。この数値を超えたしきい値は、しきい値40000と同じ結果になります。デフォルト値は3000です。\n\n```\nFROM hosts\n| STATS COUNT_DISTINCT(ip0, 80000), COUNT_DISTINCT(ip1, 5)\n```\n\n式はインライン関数を使用できます。この例では、SPLIT関数を使用して、複数の値を分割し、一意の値をカウントします。\n\n```\nROW words=\"foo;bar;baz;qux;quux;foo\"\n| STATS distinct_word_count = COUNT_DISTINCT(SPLIT(words, \";\"))\n```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countFunction": "COUNT", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countFunction.markdown": "### COUNT\n入力値の合計数(カウント)が返されます。\n\n```\nFROM employees\n| STATS COUNT(height)\n```\n\n任意のフィールドを入力として渡すことができます。\n\n行数をカウントするには、`COUNT()`または`COUNT(*)`を使用します。\n\n```\nFROM employees\n| STATS count = COUNT(*) BY languages\n| SORT languages DESC\n```\n\n式はインライン関数を使用できます。この例では、SPLIT関数を使用して、複数の値を分割し、値をカウントします。\n\n```\nROW words=\"foo;bar;baz;qux;quux;foo\"\n| STATS word_count = COUNT(SPLIT(words, \";\"))\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_diff": "DATE_DIFF", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_diff.markdown": "\n\n ### DATE_DIFF\n startTimestampをendTimestampから減算し、unitの乗数の差を返します。\n startTimestampがendTimestampより後の場合は、負の値が返されます。\n\n ```\n ROW date1 = TO_DATETIME(\"2023-12-02T11:00:00.000Z\"), date2 = TO_DATETIME(\"2023-12-02T11:00:00.001Z\")\n | EVAL dd_ms = DATE_DIFF(\"microseconds\", date1, date2)\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_extract": "DATE_EXTRACT", @@ -7294,14 +7276,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ltrim": "LTRIM", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ltrim.markdown": "\n\n ### LTRIM\n 文字列から先頭の空白を取り除きます。\n\n ```\n ROW message = \" some text \", color = \" red \"\n | EVAL message = LTRIM(message)\n | EVAL color = LTRIM(color)\n | EVAL message = CONCAT(\"'\", message, \"'\")\n | EVAL color = CONCAT(\"'\", color, \"'\")\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.markdown": "## ES|QL\n\nES|QL(Elasticsearch クエリー言語)クエリーは、パイプ文字の|で区切られた一連のコマンドで構成されます。各クエリーは**ソースコマンド**で始まり、通常はElasticsearchのデータを使ってテーブルを生成します。\n\nソースコマンドには、1つ以上の**処理コマンド**を続けることができます。処理コマンドは、行や列を追加、削除、変更することで、前のコマンドの出力テーブルを変更することができます。\n\n```\nsource-command\n| processing-command1\n| processing-command2\n```\n\nクエリーの結果は、最終的な処理コマンドによって生成されるテーブルです。 \n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.maxFunction": "MAX", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.maxFunction.markdown": "### MAX\n数値式の最大値を返します。\n\n```\nFROM employees\n| STATS MAX(languages)\n```\n\n式はインライン関数を使用できます。たとえば、複数値列の平均に対して最大値を計算するには、まず、MV_AVGを使用して行ごとに複数の値の平均を求め、その結果にMAX関数を適用します。\n\n```\nFROM employees\n| STATS max_avg_salary_change = MAX(MV_AVG(salary_change))\n```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianAbsoluteDeviationFunction": "MEDIAN_ABSOLUTE_DEVIATION", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianAbsoluteDeviationFunction.markdown": "### MEDIAN_ABSOLUTE_DEVIATION\n絶対偏差の中央値で、ばらつきを表す指標を返します。これはロバスト統計量であり、外れ値があったり、正規分布していない可能性があるデータを説明するのに有用です。このようなデータでは、標準偏差よりもわかりやすくなります。\n\nこれは、サンプル全体の中央値からの各データポイントの偏差の中央値として計算されます。つまり、確率変数Xに対して、絶対偏差の中央値はmedian(|median(X) - X|)です。\n\n```\nFROM employees\n| STATS MEDIAN(salary), MEDIAN_ABSOLUTE_DEVIATION(salary)\n```\n\n注:PERCENTILEと同様に、通常、MEDIAN_ABSOLUTE_DEVIATIONはTDigestアルゴリズムに基づく近似値です。MEDIAN_ABSOLUTE_DEVIATIONも非決定論的です。つまり、同じデータでも微妙に異なる結果が得られる可能性があります。\n\n式はインライン関数を使用できます。たとえば、複数値列の最大値の中央絶対偏差を計算するには、まず、MV_MAXを使用して行ごとの最大値を取得し、その結果に対してMEDIAN_ABSOLUTE_DEVIATION関数を使用します。\n\n```\nFROM employees\n| STATS m_a_d_max_salary_change = MEDIAN_ABSOLUTE_DEVIATION(MV_MAX(salary_change))\n```\n\n", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianFunction": "MEDIAN", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianFunction.markdown": "### MEDIAN\n全数値の半分より大きく、全数値の半分より小さい値で、50%パーセンタイルとも呼ばれる値を返します。\n\n**注:**PERCENTILEと同様に、通常MEDIANはTDigestアルゴリズムに基づく近似値です。\n\n**警告:** MEDIANは[非決定性](https://en.wikipedia.org/wiki/Nondeterministic_algorithm)です。つまり、同じデータでも微妙に異なる結果が得られる可能性があります。\n\n例:\n\n```\nFROM employees\n| STATS MEDIAN(salary), PERCENTILE(salary, 50)\n```\n\n式はインライン関数を使用できます。たとえば、複数値列の最大値の中央値を計算するには、まず、MV_MAXを使用して行ごとに最大値を求め、その結果にMEDIAN関数を適用します。\n\n```\nFROM employees\n| STATS median_max_salary_change = MEDIAN(MV_MAX(salary_change))\n```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.minFunction": "MIN", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.minFunction.markdown": "### MIN\n数値フィールドの最小値を返します。\n\n```\nFROM employees\n| STATS MIN(languages)\n```\n\n式はインライン関数を使用できます。たとえば、複数値列の平均に対して最小値を計算するには、まず、MV_AVGを使用して行ごとに複数の値の平均を求め、その結果にMIN関数を適用します。\n\n```\nFROM employees\n| STATS min_avg_salary_change = MIN(MV_AVG(salary_change))\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_append": "MV_APPEND", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_append.markdown": "\n\n ### MV_APPEND\n 2つの複数値フィールドの値を連結します\n\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_avg": "MV_AVG", @@ -7334,8 +7308,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mvExpand.markdown": "### MV_EXPAND\nMV_EXPAND処理コマンドは、複数値フィールドを値ごとに1行に展開し、他のフィールドを複製します。 \n```\nROW a=[1,2,3], b=\"b\", j=[\"a\",\"b\"]\n| MV_EXPAND a\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.now": "NOW", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.now.markdown": "\n\n ### NOW\n 現在の日付と時刻を返します。\n\n ```\n ROW current_date = NOW()\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.percentileFunction": "PERCENTILE", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.percentileFunction.markdown": "### PERCENTILE\n観測値の特定の割合で発生する値。たとえば、95パーセンタイルは観測値の95%より大きい値で、50パーセンタイルはMEDIAN`です。\n\n```\nFROM employees\n| STATS p0 = PERCENTILE(salary, 0)\n , p50 = PERCENTILE(salary, 50)\n , p99 = PERCENTILE(salary, 99)\n```\n\n**注**:PERCENTILEは通常TDigestアルゴリズムに基づく近似値です。\n\n**警告:**PERCENTILEは[非決定性](https://en.wikipedia.org/wiki/Nondeterministic_algorithm)です。つまり、同じデータでも微妙に異なる結果が得られる可能性があります。\n\n式はインライン関数を使用できます。たとえば、複数値列の最大値のパーセンタイルを計算するには、まず、MV_MAXを使用して行ごとの最大値を取得し、その結果に対してMEDIAN_ABSOLUTE_DEVIATION関数を使用します。\n\n```\nFROM employees\n| STATS p80_max_salary_change = PERCENTILE(MV_MAX(salary_change), 80)\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pi": "PI", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pi.markdown": "\n\n ### PI\n 円の円周と直径の比率であるPiを返します。\n\n ```\n ROW PI()\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pow": "POW", @@ -7388,14 +7360,10 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.starts_with.markdown": "\n\n ### STARTS_WITH\n キーワード文字列が他の文字列で始まるかどうかを示すブール値を返します。\n\n ```\n FROM employees\n | KEEP last_name\n | EVAL ln_S = STARTS_WITH(last_name, \"B\")\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.statsby": "STATS ...BY", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.statsby.markdown": "### STATS ...BY\nSTATS ...BYを使用すると、共通の値に従って行をグループ化し、グループ化された行に対する1つ以上の集約値を計算します。\n\n**例**:\n\n```\nFROM employees\n| STATS count = COUNT(emp_no) BY languages\n| SORT languages\n```\n\nBYが省略された場合、出力テーブルには、データセット全体に適用された集約が正確に1行だけ含まれます。\n\n```\nFROM employees\n| STATS avg_lang = AVG(languages)\n```\n\n複数の値を計算することができます。\n\n```\nFROM employees\n| STATS avg_lang = AVG(languages), max_lang = MAX(languages)\n```\n\n複数の値でグループ化することも可能です(longおよびkeywordファミリーフィールドでのみサポート)。\n\n```\nFROM employees\n| EVAL hired = DATE_FORMAT(hire_date, \"YYYY\")\n| STATS avg_salary = AVG(salary) BY hired, languages.long\n| EVAL avg_salary = ROUND(avg_salary)\n| SORT hired, languages.long\n```\n\nSTATS ...BYで使用できる関数の一覧については、**集計関数**を参照してください。\n\n集計関数とグループ式の両方で他の関数を使用できます。これは、複数値列でSTATS...BYを使用するときに有用です。たとえば、平均給与変動を計算するには、まず、MV_AVGを使用して従業員ごとに複数の値の平均を求め、その結果にAVG関数を適用します。\n\n```\nFROM employees\n| STATS avg_salary_change = AVG(MV_AVG(salary_change))\n```\n\n式によるグループ化の例は、姓の最初の文字で従業員をグループ化することです。\n\n```\nFROM employees\n| STATS my_count = COUNT() BY LEFT(last_name, 1)\n| SORT `LEFT(last_name, 1)`\n```\n\n出力列名の指定は任意です。指定しない場合は、新しい列名が式と等しくなります。次のクエリーは列\"AVG(salary)\"を返します。\n\n```\nFROM employees\n| STATS AVG(salary)\n```\n\nこの名前には特殊文字が含まれているため、後続のコマンドで使用するときには、バッククオート(`)で囲む必要があります。\n\n```\nFROM employees\n| STATS AVG(salary)\n| EVAL avg_salary_rounded = ROUND(`AVG(salary)`)\n```\n\n**注**:グループなしのSTATSは、グループを追加するよりも大幅に高速です。\n\n**注**:単一式でのグループは、現在、複数式でのグループよりも大幅に最適化されています。\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stCentroidFunction": "ST_CENTROID_AGG", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stCentroidFunction.markdown": "### ST_CENTROID_AGG\n**警告:この機能はテクニカルプレビュー中であり、将来のリリースでは変更されたり削除されたりする場合があります。Elasticはすべての問題の修正に努めますが、テクニカルプレビュー中の機能には正式なGA機能のサポートSLAが適用されません。**\n\n空間点ジオメトリタイプのフィールドで、空間中心を計算します。\n\n```\nFROM airports\n| STATS centroid=ST_CENTROID_AGG(location)\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stringOperators": "LIKEおよびRLIKE", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stringOperators.markdown": "### LIKEおよびRLIKE\nワイルドカードや正規表現を使った文字列比較にはLIKEまたはRLIKEを使います。\n\nワイルドカードを使って文字列を一致させるにはLIKEを使います。次のワイルドカード文字がサポートされています。\n\n* `*`は0文字以上と一致します。\n* `?`は1文字と一致します。\n\n```\nFROM employees\n| WHERE first_name LIKE \"?b*\"\n| KEEP first_name, last_name\n```\n\n正規表現を使って文字列を一致させるには、RLIKEを使います。\n\n```\nFROM employees\n| WHERE first_name RLIKE \".leja.*\"\n| KEEP first_name, last_name\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.substring": "SUBSTRING", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.substring.markdown": "\n\n ### SUBSTRING\n 文字列のサブ文字列を、開始位置とオプションの長さで指定して返します。\n\n ```\n FROM employees\n | KEEP last_name\n | EVAL ln_sub = SUBSTRING(last_name, 1, 3)\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sumFunction": "SUM", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sumFunction.markdown": "### SUM\n数値フィールドの合計を返します。\n\n```\nFROM employees\n| STATS SUM(languages)\n```\n\n式はインライン関数を使用できます。たとえば、各従業員の最大給与変動の総計を計算するには、MV_MAX関数を各行に適用してから、その結果にSUMを適用します。\n\n```\nFROM employees\n| STATS total_salary_changes = SUM(MV_MAX(salary_change))\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tan": "TAN", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tan.markdown": "\n\n ### TAN\n 角度の正接三角関数を返します。\n\n ```\n ROW a=1.8 \n | EVAL tan=TAN(a)\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tanh": "TANH", @@ -7440,8 +7408,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_version.markdown": "\n\n ### TO_VERSION\n 入力文字列をバージョン値に変換します。\n\n ```\n ROW v = TO_VERSION(\"1.2.3\")\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.trim": "TRIM", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.trim.markdown": "\n\n ### TRIM\n 文字列から先頭と末尾の空白を削除します。\n\n ```\n ROW message = \" some text \", color = \" red \"\n | EVAL message = TRIM(message)\n | EVAL color = TRIM(color)\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.valuesFunction": "VALUES", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.valuesFunction.markdown": "### 値\n\n**警告:本番環境ではVALUESを使用しないでください。この機能はテクニカルプレビュー中であり、将来のリリースでは変更されたり削除されたりする場合があります。Elasticはすべての問題の修正に努めますが、テクニカルプレビュー中の機能には正式なGA機能のサポートSLAが適用されません。**\n\nグループのすべての値を複数値フィールドとして返します。返された値の順序は保証されません。返された値を並べ替える必要がある場合はMV_SORTを使用します。\n\ngeo_point、cartesian_point、geo_shape、またはcartesian_shapeを除く任意のタイプの式を使用できます。\n\n\n例:\n\n```\n FROM employees\n| EVAL first_letter = SUBSTRING(first_name, 0, 1)\n| STATS first_name=MV_SORT(VALUES(first_name)) BY first_letter\n| SORT first_letter\n```\n\n> _**警告:** これはメモリの使用量が非常に大きくなるため、ES|QLはメモリを超えると、集約を拡大しません。このため、この集約は、収集する値がメモリに収まらなくなるまでは機能します。収集する値が多くなりすぎると、[回路ブレーカーエラー](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker-errors.html)でクエリが失敗します。_\n\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.where": "WHERE", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.where.markdown": "### WHERE\nWHEREを使用すると、入力テーブルから、指定した条件がtrueと評価されるすべての行を含むテーブルを作成します。\n \n```\nFROM employees\n| KEEP first_name, last_name, still_hired\n| WHERE still_hired == true\n```\n\n#### 演算子\n\nサポートされている演算子の概要については、**演算子**を参照してください。\n\n#### 関数\nWHEREは値を計算するためのさまざまな関数をサポートしています。**関数**をクリックすると詳細が表示されます。\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationLabel": "ドキュメント", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 7a0121a444e71..a2dd46f2f7c18 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -5336,7 +5336,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.atan": "返回输入数字表达式的反正切\n作为角度,以弧度表示。", "kbn-esql-validation-autocomplete.esql.definitions.atan2": "笛卡儿平面中正 x 轴\n与从原点到点 (x , y) 构成的射线之间的角度,以弧度表示。", "kbn-esql-validation-autocomplete.esql.definitions.autoBucketDoc": "根据给定范围和存储桶目标自动收集存储桶日期。", - "kbn-esql-validation-autocomplete.esql.definitions.avgDoc": "返回字段中的值的平均值", "kbn-esql-validation-autocomplete.esql.definitions.byDoc": "依据", "kbn-esql-validation-autocomplete.esql.definitions.case": "接受成对的条件和值。此函数返回属于第一个评估为 `true` 的条件的值。如果参数数量为奇数,则最后一个参数为在无条件匹配时返回的默认值。", "kbn-esql-validation-autocomplete.esql.definitions.cbrt": "返回数字的立方根。输入可以为任何数字值,返回值始终为双精度值。\n无穷大的立方根为 null。", @@ -5350,8 +5349,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.concat": "串联两个或多个字符串。", "kbn-esql-validation-autocomplete.esql.definitions.cos": "返回角度的余弦。", "kbn-esql-validation-autocomplete.esql.definitions.cosh": "返回角度的双曲余弦。", - "kbn-esql-validation-autocomplete.esql.definitions.countDistinctDoc": "返回字段中不同值的计数。", - "kbn-esql-validation-autocomplete.esql.definitions.countDoc": "返回字段中的值的计数。", "kbn-esql-validation-autocomplete.esql.definitions.date_diff": "从 `endTimestamp` 中减去 `startTimestamp`,并以倍数 `unit` 返回差异。\n如果 `startTimestamp` 晚于 `endTimestamp`,则返回负值。", "kbn-esql-validation-autocomplete.esql.definitions.date_extract": "提取日期的某些部分,如年、月、日、小时。", "kbn-esql-validation-autocomplete.esql.definitions.date_format": "以提供的格式返回日期的字符串表示形式。", @@ -5396,12 +5393,8 @@ "kbn-esql-validation-autocomplete.esql.definitions.log": "以某底数返回值的对数。输入可以为任何数字值,返回值始终为双精度值。\n\n求零、负数的对数,以及底数为一时将返回 `null`,并显示警告。", "kbn-esql-validation-autocomplete.esql.definitions.log10": "以底数 10 返回值的对数。输入可以为任何数字值,返回值始终为双精度值。\n\n求 0 和负数的对数时将返回 `null`,并显示警告。", "kbn-esql-validation-autocomplete.esql.definitions.ltrim": "从字符串中移除前导空格。", - "kbn-esql-validation-autocomplete.esql.definitions.maxDoc": "返回字段中的最大值。", - "kbn-esql-validation-autocomplete.esql.definitions.medianDeviationDoc": "返回每个数据点的中位数与整个样例的中位数的偏差。", - "kbn-esql-validation-autocomplete.esql.definitions.medianDoc": "返回 50% 百分位数。", "kbn-esql-validation-autocomplete.esql.definitions.metadataDoc": "元数据", "kbn-esql-validation-autocomplete.esql.definitions.metricsDoc": "特定于指标的源命令,使用此命令可从 TSDB 索引加载数据。类似于 STATS 命令,可对传入的搜索结果集计算汇总统计信息,如平均值、计数和总和。在不含 BY 子句的情况下使用时,只返回一行内容,即聚合传入的整个搜索结果集。使用 BY 子句时,将为在 BY 子句中指定的字段中的每个不同值返回一行内容。此命令仅返回聚合中的字段,并且您可以将一系列统计函数与 stats 命令搭配在一起使用。执行多个聚合时,请用逗号分隔每个聚合。", - "kbn-esql-validation-autocomplete.esql.definitions.minDoc": "返回字段中的最小值。", "kbn-esql-validation-autocomplete.esql.definitions.mv_append": "串联两个多值字段的值。", "kbn-esql-validation-autocomplete.esql.definitions.mv_avg": "将多值字段转换为包含所有值的平均值的单值字段。", "kbn-esql-validation-autocomplete.esql.definitions.mv_concat": "将多值字符串表达式转换为单值列,其中包含由分隔符分隔的所有值的串联形式。", @@ -5419,7 +5412,6 @@ "kbn-esql-validation-autocomplete.esql.definitions.mvExpandDoc": "将多值字段扩展成每个值一行,从而复制其他字段", "kbn-esql-validation-autocomplete.esql.definitions.now": "返回当前日期和时间。", "kbn-esql-validation-autocomplete.esql.definitions.onDoc": "开启", - "kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc": "返回字段的第 n 个百分位。", "kbn-esql-validation-autocomplete.esql.definitions.pi": "返回 Pi,即圆的周长与其直径的比率。", "kbn-esql-validation-autocomplete.esql.definitions.pow": "返回提升为 `exponent` 幂的 `base` 的值。", "kbn-esql-validation-autocomplete.esql.definitions.renameDoc": "将旧列重命名为新列", @@ -5445,9 +5437,7 @@ "kbn-esql-validation-autocomplete.esql.definitions.st_y": "从提供的点中提取 `y` 坐标。\n如果点的类型为 `geo_point`,则这等同于提取 `latitude` 值。", "kbn-esql-validation-autocomplete.esql.definitions.starts_with": "返回指示关键字字符串是否以另一个字符串开头的布尔值。", "kbn-esql-validation-autocomplete.esql.definitions.statsDoc": "对传入的搜索结果集计算汇总统计信息,如平均值、计数和总和。与 SQL 聚合类似,如果使用不含 BY 子句的 stats 命令,则只返回一行内容,即聚合传入的整个搜索结果集。使用 BY 子句时,将为在 BY 子句中指定的字段中的每个不同值返回一行内容。stats 命令仅返回聚合中的字段,并且您可以将一系列统计函数与 stats 命令搭配在一起使用。执行多个聚合时,请用逗号分隔每个聚合。", - "kbn-esql-validation-autocomplete.esql.definitions.stCentroidDoc": "返回字段中不同值的计数。", "kbn-esql-validation-autocomplete.esql.definitions.substring": "返回字符串的子字符串,用起始位置和可选长度指定", - "kbn-esql-validation-autocomplete.esql.definitions.sumDoc": "返回字段中的值的总和。", "kbn-esql-validation-autocomplete.esql.definitions.tan": "返回角度的正切三角函数。", "kbn-esql-validation-autocomplete.esql.definitions.tanh": "返回角度的正切双曲函数。", "kbn-esql-validation-autocomplete.esql.definitions.tau": "返回圆的圆周长与其半径的比率。", @@ -5469,10 +5459,8 @@ "kbn-esql-validation-autocomplete.esql.definitions.to_unsigned_long": "将输入值转换为无符号长整型值。如果输入参数为日期类型,\n会将其值解析为自 Unix epoch 以来的毫秒数,并转换为无符号长整型值。\n布尔值 *true* 将转换为无符号长整型值 *1*,*false* 转换为 *0*。", "kbn-esql-validation-autocomplete.esql.definitions.to_upper": "返回一个新字符串,表示已将输入字符串转为大写。", "kbn-esql-validation-autocomplete.esql.definitions.to_version": "将输入字符串转换为版本值。", - "kbn-esql-validation-autocomplete.esql.definitions.topListDoc": "收集每个存储桶的排名前 N 值。", "kbn-esql-validation-autocomplete.esql.definitions.trim": "从字符串中移除前导和尾随空格。", "kbn-esql-validation-autocomplete.esql.definitions.values": "以数组的形式返回组中的所有值。", - "kbn-esql-validation-autocomplete.esql.definitions.weightedAvgDoc": "计算从聚合文档提取的数值的加权平均值的聚合。", "kbn-esql-validation-autocomplete.esql.definitions.whereDoc": "使用“predicate-expressions”可筛选搜索结果。进行计算时,谓词表达式将返回 TRUE 或 FALSE。where 命令仅返回计算结果为 TRUE 的结果。例如,筛选特定字段值的结果", "kbn-esql-validation-autocomplete.esql.definitions.withDoc": "具有", "kbn-esql-validation-autocomplete.esql.divide.warning.divideByZero": "不能除以零:{left}/{right}", @@ -7222,8 +7210,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.atan2.markdown": "\n\n ### ATAN2\n 笛卡儿平面中正 x 轴\n 与从原点到点 (x , y) 构成的射线之间的角度,以弧度表示。\n\n ```\n ROW y=12.9, x=.6\n | EVAL atan2=ATAN2(y, x)\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.autoBucketFunction": "BUCKET", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.autoBucketFunction.markdown": "### BUCKET\n用日期时间或数字输入创建值(存储桶)的分组。存储桶的大小可以直接提供,或基于建议的计数和值范围进行选择。\n\n`BUCKET` 以两种模式运行:\n\n1.在此模式下基于存储桶计数建议(四个参数)和范围计算存储桶的大小。\n2.在此模式下直接提供存储桶大小(两个参数)。\n\n使用存储桶的目标数量、起始范围和结束范围,`BUCKET` 将选取适当的存储桶大小以生成目标数量或更小数量的存储桶。\n\n例如,一年请求多达 20 个存储桶会按每月时间间隔组织数据:\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hire_date = MV_SORT(VALUES(hire_date)) BY month = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT hire_date\n```\n\n**注意**:目标并不是提供存储桶的确切目标数量,而是选择一个范围,最多提供存储桶的目标数量。\n\n可以组合 `BUCKET` 与聚合以创建直方图:\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_month = COUNT(*) BY month = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT month\n```\n\n**注意**:`BUCKET` 不会创建未匹配任何文档的存储桶。因此,上一示例缺少 `1985-03-01` 和其他日期。\n\n如果需要更多存储桶,可能导致更小的范围。例如,如果一年内最多请求 100 个存储桶,会导致周期为周的存储桶:\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 100, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT week\n```\n\n**注意**:`AUTO_BUCKET` 不筛选任何行。它只会使用提供的范围来选取适当的存储桶大小。对于值超出范围的行,它会返回与超出范围的存储桶对应的存储桶值。组合 `BUCKET` 与 `WHERE` 可筛选行。\n\n如果提前已知所需存储桶大小,则只需提供它作为第二个参数,而忽略范围:\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 1 week)\n| SORT week\n```\n\n**注意**:提供存储桶大小作为第二个参数时,它必须为持续时间或日期期间。\n\n`BUCKET` 还可对数字字段执行操作。例如,要创建工资直方图:\n\n```\nFROM employees\n| STATS COUNT(*) by bs = BUCKET(salary, 20, 25324, 74999)\n| SORT bs\n```\n\n与前面的有意筛选日期范围示例不同,您极少想要筛选数值范围。您必须分别查找最小值和最大值。ES|QL 尚未提供简便方法来自动执行此操作。\n\n如果提前已知所需存储桶大小,则可以忽略该范围。只需提供它作为第二个参数即可:\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS c = COUNT(1) BY b = BUCKET(salary, 5000.)\n| SORT b\n```\n\n**注意**:提供存储桶大小作为第二个参数时,它必须为 **浮点类型**。\n\n这里提供了一个示例,用于为过去 24 小时创建小时存储桶,并计算每小时的事件数:\n\n```\nFROM sample_data\n| WHERE @timestamp >= NOW() - 1 day and @timestamp < NOW()\n| STATS COUNT(*) BY bucket = BUCKET(@timestamp, 25, NOW() - 1 day, NOW())\n```\n\n这里提供了一个示例,用于为 1985 年创建月度存储桶,并按聘用月份计算平均工资:\n\n```\nFROM employees\n| WHERE hire_date >= \"1985-01-01T00:00:00Z\" AND hire_date < \"1986-01-01T00:00:00Z\"\n| STATS AVG(salary) BY bucket = BUCKET(hire_date, 20, \"1985-01-01T00:00:00Z\", \"1986-01-01T00:00:00Z\")\n| SORT bucket\n```\n\n`BUCKET` 可用在 `STATS …​ BY …`​ 命令的聚合和分组部分, 前提是在聚合部分中,该函数 **由在分组部分中定义的别名引用**,或使用完全相同的表达式调用。\n\n例如:\n\n```\nFROM employees\n| STATS s1 = b1 + 1, s2 = BUCKET(salary / 1000 + 999, 50.) + 2 BY b1 = BUCKET(salary / 100 + 99, 50.), b2 = BUCKET(salary / 1000 + 999, 50.)\n| SORT b1, b2\n| KEEP s1, b1, s2, b2\n```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.avgFunction": "AVG", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.avgFunction.markdown": "### AVG\n返回数字字段的平均值。\n\n```\nFROM employees\n| STATS AVG(height)\n```\n\n此表达式可使用内联函数。例如,要计算一个多值列的平均值,应首先使用 `MV_AVG` 对每行的多个值求平均值,然后将结果用于 `AVG` 函数:\n\n```\nFROM employees\n| STATS avg_salary_change = AVG(MV_AVG(salary_change))\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.binaryOperators": "二进制运算符", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.binaryOperators.markdown": "### 二进制运算符\n支持这些二进制比较运算符:\n\n* 等于:`==`\n* 不等于:`!=`\n* 小于:`<`\n* 小于或等于:`<=`\n* 大于:`>`\n* 大于或等于:`>=`\n* 加:`+`\n* 减:`-`\n* 乘:`*`\n* 除:`/`\n* 取模:`%`\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.booleanOperators": "布尔运算符", @@ -7248,10 +7234,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cos.markdown": "\n\n ### COS\n 返回角度的余弦。\n\n ```\n ROW a=1.8 \n | EVAL cos=COS(a)\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cosh": "COSH", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.cosh.markdown": "\n\n ### COSH\n 返回角度的双曲余弦。\n\n ```\n ROW a=1.8 \n | EVAL cosh=COSH(a)\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countDistinctFunction": "COUNT_DISTINCT", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countDistinctFunction.markdown": "### COUNT_DISTINCT\n对不同值的近似数进行计数。\n\n```\nFROM hosts\n| STATS COUNT_DISTINCT(ip0), COUNT_DISTINCT(ip1)\n```\n\n`COUNT_DISTINCT` 函数为基于 HyperLogLog++ 算法的近似计算。请参阅此[文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#_counts_are_approximate)了解更多信息。精确度可使用可选的第二个参数进行配置。支持的最大值为 40000。高于此数字的阈值与阈值 40000 的效果相同。默认值为 3000。\n\n```\nFROM hosts\n| STATS COUNT_DISTINCT(ip0, 80000), COUNT_DISTINCT(ip1, 5)\n```\n\n此表达式可使用内联函数。此示例会使用 `SPLIT` 函数将字符串拆分成多个值,并对唯一值进行计数:\n\n```\nROW words=\"foo;bar;baz;qux;quux;foo\"\n| STATS distinct_word_count = COUNT_DISTINCT(SPLIT(words, \";\"))\n```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countFunction": "COUNT", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.countFunction.markdown": "### COUNT\n返回输入值的总数(计数)。\n\n```\nFROM employees\n| STATS COUNT(height)\n```\n\n可接受任何字段类型作为输入。\n\n要计算行数,请使用 `COUNT()` 或 `COUNT(*)`:\n\n```\nFROM employees\n| STATS count = COUNT(*) BY languages\n| SORT languages DESC\n```\n\n此表达式可使用内联函数。此示例会使用 `SPLIT` 函数将字符串拆分成多个值,并对值进行计数:\n\n```\nROW words=\"foo;bar;baz;qux;quux;foo\"\n| STATS word_count = COUNT(SPLIT(words, \";\"))\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_diff": "DATE_DIFF", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_diff.markdown": "\n\n ### DATE_DIFF\n 从 `endTimestamp` 中减去 `startTimestamp`,并以倍数 `unit` 返回差异。\n 如果 `startTimestamp` 晚于 `endTimestamp`,则返回负值。\n\n ```\n ROW date1 = TO_DATETIME(\"2023-12-02T11:00:00.000Z\"), date2 = TO_DATETIME(\"2023-12-02T11:00:00.001Z\")\n | EVAL dd_ms = DATE_DIFF(\"microseconds\", date1, date2)\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.date_extract": "DATE_EXTRACT", @@ -7307,14 +7289,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ltrim": "LTRIM", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.ltrim.markdown": "\n\n ### LTRIM\n 从字符串中移除前导空格。\n\n ```\n ROW message = \" some text \", color = \" red \"\n | EVAL message = LTRIM(message)\n | EVAL color = LTRIM(color)\n | EVAL message = CONCAT(\"'\", message, \"'\")\n | EVAL color = CONCAT(\"'\", color, \"'\")\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.markdown": "## ES|QL\n\nES|QL(Elasticsearch 查询语言)查询包含一系列命令,它们用管道字符分隔:`|`。每个查询以**源命令**开头,它会生成一个表,其中通常包含来自 Elasticsearch 的数据。\n\n源命令可后接一个或多个**处理命令**。处理命令可通过添加、移除以及更改行和列来更改前一个命令的输出表。\n\n```\nsource-command\n| processing-command1\n| processing-command2\n```\n\n查询的结果为由最后的处理命令生成的表。 \n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.maxFunction": "MAX", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.maxFunction.markdown": "### MAX\n返回数字表达式的最大值。\n\n```\nFROM employees\n| STATS MAX(languages)\n```\n\n此表达式可使用内联函数。例如,要计算一个多值列的平均值的最大值,应首先使用 `MV_AVG` 对每行的多个值求平均值,然后将结果用于 `MAX` 函数:\n\n```\nFROM employees\n| STATS max_avg_salary_change = MAX(MV_AVG(salary_change))\n```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianAbsoluteDeviationFunction": "MEDIAN_ABSOLUTE_DEVIATION", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianAbsoluteDeviationFunction.markdown": "### MEDIAN_ABSOLUTE_DEVIATION\n返回中位数绝对偏差,衡量可变性。这是一种稳健统计,意味着它可用于描述可能包含离群值,或可能不是正态分布的数据。对于此类数据,它比标准偏差更具描述性。\n\n它计算为每个数据点的中位数与整个样例的中位数的偏差。也就是说,对于随机变量 X,中位数绝对偏差为 `median(|median(X) - X|)`。\n\n```\nFROM employees\n| STATS MEDIAN(salary), MEDIAN_ABSOLUTE_DEVIATION(salary)\n```\n\n注意:与 `PERCENTILE` 一样,`MEDIAN_ABSOLUTE_DEVIATION` 通常为基于 TDigest 算法的近似计算。`MEDIAN_ABSOLUTE_DEVIATION` 也具有非确定性。这意味着,即使使用相同的数据,但您得到的结果可能会略有不同。\n\n此表达式可使用内联函数。例如,要计算一个多值列的最大值的中位数绝对偏差,应首先使用 `MV_MAX` 获取每行的最大值,然后将结果用于 `MEDIAN_ABSOLUTE_DEVIATION` 函数:\n\n```\nFROM employees\n| STATS m_a_d_max_salary_change = MEDIAN_ABSOLUTE_DEVIATION(MV_MAX(salary_change))\n```\n\n", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianFunction": "MEDIAN", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.medianFunction.markdown": "### MEDIAN\n返回大于所有值的一半且小于所有值的一半的值,也称为 50% `PERCENTILE`。\n\n**注意:**与 `PERCENTILE` 一样,`MEDIAN` 通常为基于 TDigest 算法的近似计算。\n\n**警告:** `MEDIAN` 也具有[非确定性](https://en.wikipedia.org/wiki/Nondeterministic_algorithm)。这意味着,即使使用相同的数据,但您得到的结果可能会略有不同。\n\n例如:\n\n```\nFROM employees\n| STATS MEDIAN(salary), PERCENTILE(salary, 50)\n```\n\n此表达式可使用内联函数。例如,要计算一个多值列的最大值的中位数,应首先使用 `MV_MAX` 获取每行的最大值,然后将结果用于 `MEDIAN` 函数:\n\n```\nFROM employees\n| STATS median_max_salary_change = MEDIAN(MV_MAX(salary_change))\n```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.minFunction": "MIN", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.minFunction.markdown": "### MIN\n返回数字字段的最小值。\n\n```\nFROM employees\n| STATS MIN(languages)\n```\n\n此表达式可使用内联函数。例如,要计算一个多值列的平均值的最小值,应首先使用 `MV_AVG` 对每行的多个值求平均值,然后将结果用于 `MIN` 函数:\n\n```\nFROM employees\n| STATS min_avg_salary_change = MIN(MV_AVG(salary_change))\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_append": "MV_APPEND", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_append.markdown": "\n\n ### MV_APPEND\n 串联两个多值字段的值。\n\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_avg": "MV_AVG", @@ -7347,8 +7321,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mvExpand.markdown": "### MV_EXPAND\n`MV_EXPAND` 处理命令将多值字段扩展成每个值一行,从而复制其他字段: \n```\nROW a=[1,2,3], b=\"b\", j=[\"a\",\"b\"]\n| MV_EXPAND a\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.now": "NOW", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.now.markdown": "\n\n ### NOW\n 返回当前日期和时间。\n\n ```\n ROW current_date = NOW()\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.percentileFunction": "PERCENTILE", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.percentileFunction.markdown": "### PERCENTILE\n出现某个百分比的观察值时的值。例如,第 95 个百分位是大于 95% 的观察值的值,第 50 个百分位是 `MEDIAN`。\n\n```\nFROM employees\n| STATS p0 = PERCENTILE(salary, 0)\n , p50 = PERCENTILE(salary, 50)\n , p99 = PERCENTILE(salary, 99)\n```\n\n**注意:** `PERCENTILE` 通常为基于 TDigest 算法的近似计算。\n\n**警告:** `PERCENTILE` 也具有[非确定性](https://en.wikipedia.org/wiki/Nondeterministic_algorithm)。这意味着,即使使用相同的数据,但您得到的结果可能会略有不同。\n\n此表达式可使用内联函数。例如,要计算一个多值列的最大值的百分位数,应首先使用 `MV_MAX` 获取每行的最大值,然后将结果用于 `PERCENTILE` 函数:\n\n```\nFROM employees\n| STATS p80_max_salary_change = PERCENTILE(MV_MAX(salary_change), 80)\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pi": "PI", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pi.markdown": "\n\n ### PI\n 返回 Pi,即圆的周长与其直径的比率。\n\n ```\n ROW PI()\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.pow": "POW", @@ -7401,14 +7373,10 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.starts_with.markdown": "\n\n ### STARTS_WITH\n 返回指示关键字字符串是否以另一个字符串开头的布尔值。\n\n ```\n FROM employees\n | KEEP last_name\n | EVAL ln_S = STARTS_WITH(last_name, \"B\")\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.statsby": "STATS ...BY", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.statsby.markdown": "### STATS ...BY\n使用 `STATS ...BY` 可根据公共值对行分组,并计算已分组行中的一个或多个聚合值。\n\n**示例**:\n\n```\nFROM employees\n| STATS count = COUNT(emp_no) BY languages\n| SORT languages\n```\n\n如果省略 `BY`,输出表实际将包含一行,其中为应用于整个数据集的聚合:\n\n```\nFROM employees\n| STATS avg_lang = AVG(languages)\n```\n\n可以计算多个值:\n\n```\nFROM employees\n| STATS avg_lang = AVG(languages), max_lang = MAX(languages)\n```\n\n也可以按多个值分组(仅长整型和关键字家族字段支持):\n\n```\nFROM employees\n| EVAL hired = DATE_FORMAT(hire_date, \"YYYY\")\n| STATS avg_salary = AVG(salary) BY hired, languages.long\n| EVAL avg_salary = ROUND(avg_salary)\n| SORT hired, languages.long\n```\n\n请参阅**聚合函数**获取可与 `STATS ...BY` 搭配使用的函数列表。\n\n聚合函数和分组表达式均接受其他函数。这在对多值列使用 `STATS...BY` 时有用。例如,要计算平均工资变动,可以首先使用 `MV_AVG` 对每名员工的多个值求平均值,然后将结果用于 `AVG` 函数:\n\n```\nFROM employees\n| STATS avg_salary_change = AVG(MV_AVG(salary_change))\n```\n\n按表达式分组的示例为根据员工姓氏的第一个字母对其进行分组:\n\n```\nFROM employees\n| STATS my_count = COUNT() BY LEFT(last_name, 1)\n| SORT `LEFT(last_name, 1)`\n```\n\n指定输出列名称为可选操作。如果未指定,新列名称等于该表达式。以下查询将返回名为 `AVG(salary)` 的列:\n\n```\nFROM employees\n| STATS AVG(salary)\n```\n\n由于此名称包含特殊字符,在后续命令中使用该名称时,需要用反撇号 (`) 引用它:\n\n```\nFROM employees\n| STATS AVG(salary)\n| EVAL avg_salary_rounded = ROUND(`AVG(salary)`)\n```\n\n**注意**:不包含任何组的 `STATS` 比添加组更快。\n\n**注意**:当前,根据单一表达式进行分组比根据许多表达式进行分组更为优化。\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stCentroidFunction": "ST_CENTROID_AGG", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stCentroidFunction.markdown": "### ST_CENTROID_AGG\n**警告:此功能处于技术预览状态,在未来版本中可能会更改或移除。Elastic 将努力修复任何问题,但处于技术预览状态的功能不受正式 GA 功能支持 SLA 的约束。**\n\n对包含空间点几何图形类型的字段计算空间重心。\n\n```\nFROM airports\n| STATS centroid=ST_CENTROID_AGG(location)\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stringOperators": "LIKE 和 RLIKE", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.stringOperators.markdown": "### LIKE 和 RLIKE\n使用通配符或正则表达式比较字符串时,请使用 `LIKE` 或 `RLIKE`:\n\n使用 `LIKE` 时,可使用通配符来匹配字符串。支持以下通配符字符:\n\n* `*` 匹配零个或更多字符。\n* `?` 匹配一个字符。\n\n```\nFROM employees\n| WHERE first_name LIKE \"?b*\"\n| KEEP first_name, last_name\n```\n\n使用 `RLIKE` 时,可使用正则表达式来匹配字符串:\n\n```\nFROM employees\n| WHERE first_name RLIKE \".leja.*\"\n| KEEP first_name, last_name\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.substring": "SUBSTRING", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.substring.markdown": "\n\n ### SUBSTRING\n 返回字符串的子字符串,用起始位置和可选长度指定\n\n ```\n FROM employees\n | KEEP last_name\n | EVAL ln_sub = SUBSTRING(last_name, 1, 3)\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sumFunction": "SUM", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.sumFunction.markdown": "### SUM\n返回数字字段的总和。\n\n```\nFROM employees\n| STATS SUM(languages)\n```\n\n此表达式可使用内联函数。例如,要计算每名员工的最大工资变动的总和,请对每行应用 `MV_MAX` 函数,然后对结果使用 `SUM`:\n\n```\nFROM employees\n| STATS total_salary_changes = SUM(MV_MAX(salary_change))\n```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tan": "TAN", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tan.markdown": "\n\n ### TAN\n 返回角度的正切三角函数。\n\n ```\n ROW a=1.8 \n | EVAL tan=TAN(a)\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.tanh": "TANH", @@ -7453,8 +7421,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.to_version.markdown": "\n\n ### TO_VERSION\n 将输入字符串转换为版本值。\n\n ```\n ROW v = TO_VERSION(\"1.2.3\")\n ```\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.trim": "TRIM", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.trim.markdown": "\n\n ### TRIM\n 从字符串中移除前导和尾随空格。\n\n ```\n ROW message = \" some text \", color = \" red \"\n | EVAL message = TRIM(message)\n | EVAL color = TRIM(color)\n ```\n ", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.valuesFunction": "VALUES", - "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.valuesFunction.markdown": "### VALUES\n\n**警告:请勿在生产环境中使用 `VALUES`。此功能处于技术预览状态,在未来版本中可能会更改或移除。Elastic 将努力修复任何问题,但处于技术预览状态的功能不受正式 GA 功能支持 SLA 的约束。**\n\n以多值字段的形式返回组中的所有值。无法保证返回值的顺序。如果需要按顺序返回值,请使用 `MV_SORT`。\n\n接受任何类型的表达式,但 `geo_point`、`cartesian_point`、`geo_shape` 或 `cartesian_shape` 除外。\n\n\n例如:\n\n```\n FROM employees\n| EVAL first_letter = SUBSTRING(first_name, 0, 1)\n| STATS first_name=MV_SORT(VALUES(first_name)) BY first_letter\n| SORT first_letter\n```\n\n> _**警告:**这可能会占用大量内存,但除内存以外,ES|QL 尚不会增长聚合。因此,此聚合会正常工作,直到将其用于收集的值超出内存装载量。一旦收集的值过多,查询将会失败,并出现[断路器错误](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker-errors.html)。_\n\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.where": "WHERE", "textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.where.markdown": "### WHERE\n使用 `WHERE` 可生成一个表,其中包含输入表中所提供的条件评估为 `true` 的所有行:\n \n```\nFROM employees\n| KEEP first_name, last_name, still_hired\n| WHERE still_hired == true\n```\n\n#### 运算符\n\n请参阅**运算符**了解所支持的运算符的概览。\n\n#### 函数\n`WHERE` 支持各种用于计算值的函数。请参阅**函数**了解更多信息。\n ", "textBasedEditor.query.textBasedLanguagesEditor.documentationLabel": "文档", From 95869237eeb6c4d2adccc6fa2aa1fadcf1036db6 Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Wed, 11 Sep 2024 07:21:59 -0700 Subject: [PATCH 23/52] [ResponseOps][ES Query] Grouped over field is not populated correctly when editing a rule (#192297) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves https://github.com/elastic/kibana/issues/191077 ## Summary This PR fixes a bug loading the `groupby` field when editing an ES query rule. While the form was loading fields from the index, the `fields` array was empty ([]). This wasn't caught by a truthy check, so `termField` was set to undefined as the fields array didn’t contain the selected field. As a result, the form failed to populate correctly. To fix this, I updated it to only check if the array contains the selected field when the array is defined and also not empty. I tested this for creating and editing the rule and it seemed to work, pls let me know if there is another scenario I am missing with this fix. ### To verify - Create an ES query rule with the `groupby` field set. See example below of what the bug looked like before. - Edit the rule and verify that the grouped by field is populated correctly. I would test it a couple times to verify **Example of Before:** Screen Shot 2024-09-06 at 2 09 43 PM --- .../expression_items/group_by_over.test.tsx | 20 ++++++++++++++++++- .../common/expression_items/group_by_over.tsx | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.test.tsx b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.test.tsx index 1445ae36debf1..d55dcee2843e0 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.test.tsx @@ -219,7 +219,7 @@ describe('group by expression', () => { expect(onChangeSelectedTermField).toHaveBeenCalledWith(['field1', 'field2']); }); - it('do NOT clears selected agg field if fields is undefined', async () => { + it('do NOT clear selected agg field if fields is undefined', async () => { const onChangeSelectedTermField = jest.fn(); render( @@ -236,4 +236,22 @@ describe('group by expression', () => { ); expect(onChangeSelectedTermField).toHaveBeenCalledTimes(0); }); + + it('do NOT clear selected agg field if fields is an empty array', async () => { + const onChangeSelectedTermField = jest.fn(); + render( + + {}} + onChangeSelectedTermSize={() => {}} + onChangeSelectedTermField={onChangeSelectedTermField} + /> + + ); + expect(onChangeSelectedTermField).toHaveBeenCalledTimes(0); + }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.tsx b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.tsx index ea59df8eb40ac..be226d8959c78 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.tsx @@ -109,7 +109,7 @@ export const GroupByExpression = ({ }, [selectedTermsFieldsOptions, groupBy, onChangeSelectedTermField]); useEffect(() => { - if (fields) { + if (fields && fields.length > 0) { // if current field set doesn't contain selected field, clear selection const hasUnknownField = selectedTermsFieldsOptions.some( (fieldOption) => !fields.some((field) => field.name === fieldOption.label) From bcef8521ce71ad7cdaea3692b6cb1d2e8c1262c0 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Wed, 11 Sep 2024 17:40:09 +0300 Subject: [PATCH 24/52] [DevTools] Fix format=txt autocomplete for ES|QL (#192341) - Closes https://github.com/elastic/kibana/issues/189495 - Reference https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-rest.html#esql-rest-format Screenshot 2024-09-09 at 09 51 01 --- .../server/lib/spec_definitions/json/overrides/esql.query.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/console/server/lib/spec_definitions/json/overrides/esql.query.json b/src/plugins/console/server/lib/spec_definitions/json/overrides/esql.query.json index 4aa91f099c077..2dd1f9b50ee3b 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/overrides/esql.query.json +++ b/src/plugins/console/server/lib/spec_definitions/json/overrides/esql.query.json @@ -12,7 +12,7 @@ "csv", "json", "smile", - "text", + "txt", "tsv", "yaml" ], From 4f6f88a7f37a4966e4729825fae85f5fe1778128 Mon Sep 17 00:00:00 2001 From: Julian Gernun <17549662+jcger@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:04:13 +0200 Subject: [PATCH 25/52] [Response Ops][Cases] Flaky Cases List Row Actions Update - Security (#192487) Closes https://github.com/elastic/kibana/issues/191641 Toasts are stacking up until covering the row action to be clicked next. This PR dismiss every toast created after each test. In the status update test this might happen as well and therefore I did add the toast dismissal to the whole row actions test suite. --- .../functional/test_suites/security/ftr/cases/list_view.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts index 4cb9c58a70b94..673dca32d9fd1 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts @@ -20,6 +20,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const svlCases = getService('svlCases'); const svlSecNavigation = getService('svlSecNavigation'); const svlCommonPage = getPageObject('svlCommonPage'); + const toasts = getService('toasts'); describe('Cases List', function () { before(async () => { @@ -217,6 +218,10 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); describe('row actions', () => { + afterEach(async () => { + await toasts.dismissAll(); + }); + describe('Status', () => { createNCasesBeforeDeleteAllAfter(1, getPageObject, getService); From 05c9bbed758ca34392d0b7595f98b3ecfd28fe02 Mon Sep 17 00:00:00 2001 From: Andrea Del Rio Date: Wed, 11 Sep 2024 08:31:40 -0700 Subject: [PATCH 26/52] [Controls] Fix styles (#192319) ## Summary Closes #192229 Frame 547 ### Changes - Fixes padding in the `prepend` in all control types, in both modes (i.e. `view` and `edit`) and in both label positions (i.e. `inline` and `above`) - Removes the empty icon in view mode introduced by #184533. After thinking about this is some more I think this is unnecessary given the shift in the UI that already exists for Dashboards when switching back and forth between `View` and `Edit` Mode. - For better control, this creates and passes custom class names to `controlFrame__formControlLayout`. > [!NOTE] > We will be able to do a further clean up these styles when we are done with [#192005](https://github.com/elastic/kibana/issues/192005). ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Elastic Machine Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../components/control_group.tsx | 2 +- .../components/control_panel.scss | 32 ++++++++++++++++++- .../components/control_panel.tsx | 14 +++++--- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/plugins/controls/public/react_controls/control_group/components/control_group.tsx b/src/plugins/controls/public/react_controls/control_group/components/control_group.tsx index a9b23316bf83f..f6259ddc95149 100644 --- a/src/plugins/controls/public/react_controls/control_group/components/control_group.tsx +++ b/src/plugins/controls/public/react_controls/control_group/components/control_group.tsx @@ -96,7 +96,7 @@ export function ControlGroup({ const ApplyButtonComponent = useMemo(() => { return ( - ) : hideEmptyDragHandle ? null : ( - - ); + ) : null; export const ControlPanel = ({ Component, @@ -115,6 +113,7 @@ export const ControlPanel = Date: Wed, 11 Sep 2024 17:53:48 +0200 Subject: [PATCH 27/52] [RCA] Move charts closer, remove x-axis and labels (#192550) Resolves https://github.com/elastic/kibana/issues/192548 Screenshot 2024-09-11 at 10 54 03 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../items/esql_item/register_esql_item.tsx | 21 ++-- .../items/lens_item/register_lens_item.tsx | 5 +- .../details/components/grid_item/index.tsx | 112 +++++++++--------- .../utils/get_lens_attrs_for_suggestion.ts | 13 ++ .../hooks/use_create_investigation.tsx | 5 +- 5 files changed, 83 insertions(+), 73 deletions(-) diff --git a/x-pack/plugins/observability_solution/investigate_app/public/items/esql_item/register_esql_item.tsx b/x-pack/plugins/observability_solution/investigate_app/public/items/esql_item/register_esql_item.tsx index 6ecab29020eba..5f2f95807b4e0 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/items/esql_item/register_esql_item.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/items/esql_item/register_esql_item.tsx @@ -21,10 +21,6 @@ import { getLensAttrsForSuggestion } from '../../utils/get_lens_attrs_for_sugges import type { Options } from '../register_items'; import { getDateHistogramResults } from './get_date_histogram_results'; -const lensClassName = css` - height: 100%; -`; - interface Props { suggestion: Suggestion; dataView: DataView; @@ -142,7 +138,7 @@ export function EsqlWidget({ suggestion, dataView, esqlQuery, dateHistogramResul grow={false} className={css` > div { - height: 196px; + height: 128px; } `} > @@ -153,15 +149,12 @@ export function EsqlWidget({ suggestion, dataView, esqlQuery, dateHistogramResul } return ( - div { - height: 196px; - } - `} - > - + + ); } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/items/lens_item/register_lens_item.tsx b/x-pack/plugins/observability_solution/investigate_app/public/items/lens_item/register_lens_item.tsx index c81ebec9c6ade..3f2b1d9f9c1bf 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/items/lens_item/register_lens_item.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/items/lens_item/register_lens_item.tsx @@ -148,7 +148,7 @@ export function LensWidget({ interval, }, }, - seriesType: 'bar', + seriesType: 'bar_stacked', }; if (groupBy && groupBy?.length) { @@ -221,12 +221,13 @@ export function LensWidget({ ); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/grid_item/index.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/grid_item/index.tsx index 91f7a58b43b5e..c43ae1ffaa04f 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/grid_item/index.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/grid_item/index.tsx @@ -52,13 +52,13 @@ const panelContentClassName = css` } `; -const headerClassName = css` - height: ${GRID_ITEM_HEADER_HEIGHT}px; -`; - export function GridItem({ id, title, children, onDelete, onCopy, loading }: GridItemProps) { const theme = useTheme(); + const headerClassName = css` + padding: 0 ${theme.size.s} 0 ${theme.size.s}}; +`; + const containerClassName = css` height: 100%; max-width: 100%; @@ -71,58 +71,58 @@ export function GridItem({ id, title, children, onDelete, onCopy, loading }: Gri `; return ( - - - - - - {title} - - - - - - { - onCopy(); - }} - disabled={loading} - /> - - - { - onDelete(); - }} - disabled={loading} - /> - - - - - - - + + + + + + +
{title}
+
+
+ + + + { + onCopy(); + }} + disabled={loading} + /> + + + { + onDelete(); + }} + disabled={loading} + /> + + + +
+
+
{children}
-
-
-
+
+ + ); } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/utils/get_lens_attrs_for_suggestion.ts b/x-pack/plugins/observability_solution/investigate_app/public/utils/get_lens_attrs_for_suggestion.ts index 0483d771954c0..79693ff2941aa 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/utils/get_lens_attrs_for_suggestion.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/utils/get_lens_attrs_for_suggestion.ts @@ -32,6 +32,19 @@ export function getLensAttrsForSuggestion({ dataView, }) as TypedLensByValueInput['attributes']; + attrs.state.visualization = { + ...(attrs.state.visualization as any), + axisTitlesVisibilitySettings: { + x: false, + yLeft: false, + yRight: false, + }, + legend: { + isVisible: false, + position: 'right', + }, + }; + const lensEmbeddableInput: TypedLensByValueInput = { attributes: attrs, id: v4(), diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx index 428e94ef15b15..8fad55195f9b2 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx @@ -32,7 +32,10 @@ export function useCreateInvestigation() { ['createInvestigation'], ({ investigation }) => { const body = JSON.stringify(investigation); - return http.post(`/api/observability/investigations`, { body }); + return http.post(`/api/observability/investigations`, { + body, + version: '2023-10-31', + }); }, { onError: (error, { investigation }, context) => { From f22067fbc907c0ca0c5e919a25cc1afdab90d2c6 Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Wed, 11 Sep 2024 12:10:07 -0500 Subject: [PATCH 28/52] [Alerting] Fix error when saving a rule after toggling alerts filter properties on and off (#192522) ## Summary Closes #184170 Fixes a bug where the `alertsFilter` property gets added to `action`s configured in the rule form when toggled on, but then never gets deleted when toggled off. This would throw a validation error on the server for an empty `alertsFilter` object, which is only meant to throw for user-configured API requests and not for form usage. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ## Release notes Fixed a bug where toggling on and off the "If alert matches a query" or "If alert is generated during timeframe" toggles makes it unable to save the rule due to validation errors. --------- Co-authored-by: Elastic Machine --- .../sections/rule_form/rule_reducer.test.ts | 34 +++++++++++++++++++ .../sections/rule_form/rule_reducer.ts | 4 +-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.test.ts index 373cb70e0ca36..2d2082b64b6e2 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.test.ts @@ -240,4 +240,38 @@ describe('rule reducer', () => { ); expect(updatedRule.rule.alertDelay?.active).toBe(10); }); + + test('if rule action alerts filter was toggled on, then off', () => { + initialRule.actions.push({ + id: '', + actionTypeId: 'testId', + group: 'Rule', + params: {}, + uuid: '123-456', + }); + let updatedRule = ruleReducer( + { rule: initialRule }, + { + command: { type: 'setRuleActionAlertsFilter' }, + payload: { + key: 'query', + value: 'hello', + index: 0, + }, + } + ); + expect((updatedRule.rule.actions[0] as SanitizedRuleAction).alertsFilter).toBeDefined(); + updatedRule = ruleReducer( + { rule: initialRule }, + { + command: { type: 'setRuleActionAlertsFilter' }, + payload: { + key: 'query', + value: undefined, + index: 0, + }, + } + ); + expect((updatedRule.rule.actions[0] as SanitizedRuleAction).alertsFilter).toBeUndefined(); + }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts index c11dd0edb3e71..33a7284ac2bef 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts @@ -6,7 +6,7 @@ */ import { SavedObjectAttribute } from '@kbn/core/public'; -import { isEqual } from 'lodash'; +import { isEqual, isUndefined, omitBy } from 'lodash'; import { Reducer } from 'react'; import { RuleActionParam, @@ -262,7 +262,7 @@ export const getRuleReducer = return state; const { alertsFilter, ...rest } = oldSanitizedAction; - const updatedAlertsFilter = { ...alertsFilter, [key]: value }; + const updatedAlertsFilter = omitBy({ ...alertsFilter, [key]: value }, isUndefined); const updatedAction = { ...rest, From 53e88ec03aaa9383cab1e34890a1dac67103eefd Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Wed, 11 Sep 2024 12:18:44 -0600 Subject: [PATCH 29/52] [Security solution] Handle Gemini `finishReason: SAFETY` (#192304) --- .../server/language_models/gemini_chat.ts | 59 +++++++++++++++++++ .../actions/server/lib/action_executor.ts | 12 ++-- 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/x-pack/packages/kbn-langchain/server/language_models/gemini_chat.ts b/x-pack/packages/kbn-langchain/server/language_models/gemini_chat.ts index a34f34ecce482..fb98232359340 100644 --- a/x-pack/packages/kbn-langchain/server/language_models/gemini_chat.ts +++ b/x-pack/packages/kbn-langchain/server/language_models/gemini_chat.ts @@ -16,6 +16,8 @@ import { POSSIBLE_ROLES, Part, TextPart, + FinishReason, + SafetyRating, } from '@google/generative-ai'; import { ActionsClient } from '@kbn/actions-plugin/server'; import { PublicMethodsOf } from '@kbn/utility-types'; @@ -46,6 +48,12 @@ export interface CustomChatModelInput extends BaseChatModelParams { maxTokens?: number; } +// not sure why these properties are not on the type, as they are on the data +interface SafetyReason extends SafetyRating { + blocked: boolean; + severity: string; +} + export class ActionsClientGeminiChatModel extends ChatGoogleGenerativeAI { #actionsClient: PublicMethodsOf; #connectorId: string; @@ -100,6 +108,14 @@ export class ActionsClientGeminiChatModel extends ChatGoogleGenerativeAI { ); } + if (actionResult.data.candidates && actionResult.data.candidates.length > 0) { + // handle bad finish reason + const errorMessage = convertResponseBadFinishReasonToErrorMsg(actionResult.data); + if (errorMessage != null) { + throw new Error(errorMessage); + } + } + return { response: { ...actionResult.data, @@ -239,6 +255,12 @@ export class ActionsClientGeminiChatModel extends ChatGoogleGenerativeAI { yield chunk; await runManager?.handleLLMNewToken(chunk.text ?? ''); } + } else if (parsedStreamChunk) { + // handle bad finish reason + const errorMessage = convertResponseBadFinishReasonToErrorMsg(parsedStreamChunk); + if (errorMessage != null) { + throw new Error(errorMessage); + } } } } @@ -460,3 +482,40 @@ function messageContentMedia(content: Record): InlineDataPart { } throw new Error('Invalid media content'); } + +const badFinishReasons = [FinishReason.RECITATION, FinishReason.SAFETY]; +function hadBadFinishReason(candidate: { finishReason?: FinishReason }) { + return !!candidate.finishReason && badFinishReasons.includes(candidate.finishReason); +} + +export function convertResponseBadFinishReasonToErrorMsg( + response: EnhancedGenerateContentResponse +): string | null { + if (response.candidates && response.candidates.length > 0) { + const candidate = response.candidates[0]; + if (hadBadFinishReason(candidate)) { + if ( + candidate.finishReason === FinishReason.SAFETY && + candidate.safetyRatings && + (candidate.safetyRatings?.length ?? 0) > 0 + ) { + const safetyReasons = getSafetyReasons(candidate.safetyRatings as SafetyReason[]); + return `ActionsClientGeminiChatModel: action result status is error. Candidate was blocked due to ${candidate.finishReason} - ${safetyReasons}`; + } else { + return `ActionsClientGeminiChatModel: action result status is error. Candidate was blocked due to ${candidate.finishReason}`; + } + } + } + return null; +} + +const getSafetyReasons = (safetyRatings: SafetyReason[]) => { + const reasons = safetyRatings.filter((t: SafetyReason) => t.blocked); + return reasons.reduce( + (acc: string, t: SafetyReason, i: number) => + `${acc.length ? `${acc} ` : ''}${t.category}: ${t.severity}${ + i < reasons.length - 1 ? ',' : '' + }`, + '' + ); +}; diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index c302b0da3e886..4a0b51954ba1d 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -605,15 +605,15 @@ export class ActionExecutor { .then((tokenTracking) => { if (tokenTracking != null) { set(event, 'kibana.action.execution.gen_ai.usage', { - total_tokens: tokenTracking.total_tokens, - prompt_tokens: tokenTracking.prompt_tokens, - completion_tokens: tokenTracking.completion_tokens, + total_tokens: tokenTracking.total_tokens ?? 0, + prompt_tokens: tokenTracking.prompt_tokens ?? 0, + completion_tokens: tokenTracking.completion_tokens ?? 0, }); analyticsService.reportEvent(GEN_AI_TOKEN_COUNT_EVENT.eventType, { actionTypeId, - total_tokens: tokenTracking.total_tokens, - prompt_tokens: tokenTracking.prompt_tokens, - completion_tokens: tokenTracking.completion_tokens, + total_tokens: tokenTracking.total_tokens ?? 0, + prompt_tokens: tokenTracking.prompt_tokens ?? 0, + completion_tokens: tokenTracking.completion_tokens ?? 0, ...(actionTypeId === '.gen-ai' && config?.apiProvider != null ? { provider: config?.apiProvider } : {}), From 40ba80359f7742818a9c4fa310e41ffd770e9dce Mon Sep 17 00:00:00 2001 From: Stephen Schmidt Date: Wed, 11 Sep 2024 14:41:16 -0400 Subject: [PATCH 30/52] chore(progressive-deployment): enable for kibana (#192311) ## Summary This is purely related to the "build" system tooling. ### Checklist N/A ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) Co-authored-by: Elastic Machine --- .../quality-gates/emergency/pipeline.emergency.kibana-tests.yaml | 1 + .../quality-gates/emergency/pipeline.tests-production.yaml | 1 + .../quality-gates/emergency/pipeline.tests-staging.yaml | 1 + .buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml | 1 + .../pipelines/quality-gates/pipeline.tests-production.yaml | 1 + .buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml | 1 + 6 files changed, 6 insertions(+) diff --git a/.buildkite/pipelines/quality-gates/emergency/pipeline.emergency.kibana-tests.yaml b/.buildkite/pipelines/quality-gates/emergency/pipeline.emergency.kibana-tests.yaml index 60ede2aae2b91..5341f967e512f 100644 --- a/.buildkite/pipelines/quality-gates/emergency/pipeline.emergency.kibana-tests.yaml +++ b/.buildkite/pipelines/quality-gates/emergency/pipeline.emergency.kibana-tests.yaml @@ -19,6 +19,7 @@ env: SKIP_NODE_SETUP: true TEAM_CHANNEL: "#kibana-mission-control" ENVIRONMENT: ${ENVIRONMENT?} + DEPLOYMENT_SLICES: ${DEPLOYMENT_SLICES:-""} steps: - label: ":pipeline::grey_question::seedling: Trigger Kibana Tests for ${ENVIRONMENT}" diff --git a/.buildkite/pipelines/quality-gates/emergency/pipeline.tests-production.yaml b/.buildkite/pipelines/quality-gates/emergency/pipeline.tests-production.yaml index a1de7f41a2100..f7689ffeab928 100644 --- a/.buildkite/pipelines/quality-gates/emergency/pipeline.tests-production.yaml +++ b/.buildkite/pipelines/quality-gates/emergency/pipeline.tests-production.yaml @@ -13,6 +13,7 @@ steps: CHECK_SLO_TAG: kibana CHECK_SLO_WAITING_PERIOD: 15m CHECK_SLO_BURN_RATE_THRESHOLD: 0.1 + DEPLOYMENT_SLICES: ${DEPLOYMENT_SLICES:-""} soft_fail: true - label: ":rocket: control-plane e2e tests" diff --git a/.buildkite/pipelines/quality-gates/emergency/pipeline.tests-staging.yaml b/.buildkite/pipelines/quality-gates/emergency/pipeline.tests-staging.yaml index febb61c12c5f1..2bd85e2ad8a74 100644 --- a/.buildkite/pipelines/quality-gates/emergency/pipeline.tests-staging.yaml +++ b/.buildkite/pipelines/quality-gates/emergency/pipeline.tests-staging.yaml @@ -33,6 +33,7 @@ steps: CHECK_SYNTHETICS_MINIMUM_RUNS: 3 MAX_FAILURES: 2 CHECK_SYNTHETIC_MAX_POLL: 50 + DEPLOYMENT_SLICES: ${DEPLOYMENT_SLICES:-""} soft_fail: true - wait: ~ diff --git a/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml b/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml index 6fa4ddf634524..54f5ef6ea9263 100644 --- a/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml +++ b/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml @@ -19,6 +19,7 @@ env: SKIP_NODE_SETUP: true TEAM_CHANNEL: "#kibana-mission-control" ENVIRONMENT: ${ENVIRONMENT?} + DEPLOYMENT_SLICES: ${DEPLOYMENT_SLICES:-""} steps: - label: ":pipeline::grey_question::seedling: Trigger Kibana Tests for ${ENVIRONMENT}" diff --git a/.buildkite/pipelines/quality-gates/pipeline.tests-production.yaml b/.buildkite/pipelines/quality-gates/pipeline.tests-production.yaml index a1de7f41a2100..f7689ffeab928 100644 --- a/.buildkite/pipelines/quality-gates/pipeline.tests-production.yaml +++ b/.buildkite/pipelines/quality-gates/pipeline.tests-production.yaml @@ -13,6 +13,7 @@ steps: CHECK_SLO_TAG: kibana CHECK_SLO_WAITING_PERIOD: 15m CHECK_SLO_BURN_RATE_THRESHOLD: 0.1 + DEPLOYMENT_SLICES: ${DEPLOYMENT_SLICES:-""} soft_fail: true - label: ":rocket: control-plane e2e tests" diff --git a/.buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml b/.buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml index febb61c12c5f1..2bd85e2ad8a74 100644 --- a/.buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml +++ b/.buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml @@ -33,6 +33,7 @@ steps: CHECK_SYNTHETICS_MINIMUM_RUNS: 3 MAX_FAILURES: 2 CHECK_SYNTHETIC_MAX_POLL: 50 + DEPLOYMENT_SLICES: ${DEPLOYMENT_SLICES:-""} soft_fail: true - wait: ~ From 211eb6b5bd8fc0bc37ca3853bae9e509942be5bd Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 11 Sep 2024 11:42:26 -0700 Subject: [PATCH 31/52] [DOCS] Automates TheHive connector screenshots; edits UI text (#192506) Co-authored-by: Antonio --- .../connectors/action-types/thehive.asciidoc | 46 +++++++------- .../connectors/images/thehive-connector.png | Bin 58661 -> 168954 bytes .../images/thehive-params-alert-test.png | Bin 29603 -> 112975 bytes .../images/thehive-params-case-test.png | Bin 28068 -> 118125 bytes .../connector_types/thehive/constants.ts | 4 +- .../connector_types/thehive/thehive.test.tsx | 2 +- .../connector_types/thehive/translations.ts | 18 +++--- .../actions_simulators/server/plugin.ts | 3 + .../stack_connectors/index.ts | 1 + .../stack_connectors/thehive_connector.ts | 56 ++++++++++++++++++ 10 files changed, 92 insertions(+), 38 deletions(-) create mode 100644 x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/thehive_connector.ts diff --git a/docs/management/connectors/action-types/thehive.asciidoc b/docs/management/connectors/action-types/thehive.asciidoc index 3252a1a5830d8..d218833527ee3 100644 --- a/docs/management/connectors/action-types/thehive.asciidoc +++ b/docs/management/connectors/action-types/thehive.asciidoc @@ -8,7 +8,13 @@ :frontmatter-tags-content-type: [how-to] :frontmatter-tags-user-goals: [configure] -TheHive connector uses the https://docs.strangebee.com/thehive/api-docs/[TheHive (v1) REST API] to create cases and alerts. +TheHive connector uses the https://docs.strangebee.com/thehive/api-docs/[TheHive (v1) REST API] to create cases and alerts. added:[8.16.0] + +[NOTE] +==== +If you use this connector with <>, the status values differ in {kib} and TheHive. +The status values are not synchronized when you update a case. +==== [float] [[define-thehive-ui]] @@ -28,9 +34,9 @@ image::management/connectors/images/thehive-connector.png[TheHive connector] TheHive connectors have the following configuration properties: Name:: The name of the connector. -Organisation:: Organisation name in which user intends to create cases or alerts. -URL:: TheHive instance URL. -API Key:: TheHive API key for authentication. +Organisation:: The organisation in TheHive that will contain the cases or alerts. +URL:: The instance URL in TheHive. +API key:: The API key for authentication in TheHive. [float] [[thehive-action-configuration]] @@ -49,28 +55,16 @@ image::management/connectors/images/thehive-params-alert-test.png[TheHive alert TheHive actions have the following configuration properties. -Event Action:: Action that will be performed in thehive. Supported actions are Create Case (default) and Create Alert. -Title:: Title of the incident. +Event action:: The action that will be performed in TheHive: create a case or an alert. +Title:: The title of the incident. Description:: The details about the incident. -Severity:: Severity of the incident. This can be one of `LOW`, `MEDIUM`(default), `HIGH` or `CRITICAL`. -TLP:: Traffic Light Protocol designation for the incident. This can be one of `CLEAR`, `GREEN`, `AMBER`(default), `AMBER+STRICT` or `RED`. -Tags:: The keywords or tags about the incident. -Additional comments:: Additional information about the Case. -Type:: Type of the Alert. -Source:: Source of the Alert. -Source Reference:: Source reference of the Alert. - -[float] -[[thehive-features]] -=== Features - -1. Rule base creation of alerts and cases. -2. Create case, Update case. - -[NOTE] -==== -* For update case, status of the case is not sync with the kibana case. -==== +Severity:: The severity of the incident: `LOW`, `MEDIUM`, `HIGH` or `CRITICAL`. +TLP:: The traffic light protocol designation for the incident: `CLEAR`, `GREEN`, `AMBER`, `AMBER+STRICT` or `RED`. +Tags:: The keywords or tags for the incident. +Additional comments:: Additional information about the incident. +Type:: The type of alert. +Source:: The source of the alert. +Source reference:: A source reference for the alert. [float] [[thehive-connector-networking-configuration]] @@ -82,7 +76,7 @@ Use the <> to customize connecto [[configure-thehive]] === Configure TheHive -To generate an API Key in TheHive: +To generate an API key in TheHive: 1. Log in to your TheHive instance. 2. Open profile tab and select the settings. diff --git a/docs/management/connectors/images/thehive-connector.png b/docs/management/connectors/images/thehive-connector.png index 592307023172eb51869d15d89c8673a6a5210153..d115a4fefb8484b1fecad16c042bdfe0c773e154 100644 GIT binary patch literal 168954 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 KpRckGxcxu=eB3Pn literal 58661 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 diff --git a/docs/management/connectors/images/thehive-params-alert-test.png b/docs/management/connectors/images/thehive-params-alert-test.png index c72eff5e31054527bfd119dc21ed443bc82b7cbd..e2f39565e8d6e69677cebfeb2a83dab706c0748f 100644 GIT binary patch literal 112975 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 RV$H7(9}N7k{)3aB{1cmw??nIr diff --git a/docs/management/connectors/images/thehive-params-case-test.png b/docs/management/connectors/images/thehive-params-case-test.png index a7004bdf35af069fbb6f40948315fed4e0650d15..888df73aa92c67dd7d4f7fd663d3f303d86542fb 100644 GIT binary patch literal 118125 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 - ); -}; - -RuleTitle.displayName = 'RuleTitle'; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/test_ids.ts deleted file mode 100644 index b48e2c9300750..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/test_ids.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { PREFIX } from '../../../shared/test_ids'; -import { CONTENT_TEST_ID, HEADER_TEST_ID } from '../../right/components/expandable_section'; - -const RULE_OVERVIEW_TEST_ID = `${PREFIX}RuleOverview` as const; -export const RULE_OVERVIEW_TITLE_TEST_ID = `${RULE_OVERVIEW_TEST_ID}RuleOverviewTitle` as const; -export const RULE_OVERVIEW_RULE_TITLE_SUPPRESSED_TEST_ID = - `${RULE_OVERVIEW_TITLE_TEST_ID}Suppressed` as const; -export const RULE_OVERVIEW_RULE_CREATED_BY_TEST_ID = - `${RULE_OVERVIEW_TEST_ID}CreatedByText` as const; -export const RULE_OVERVIEW_RULE_UPDATED_BY_TEST_ID = - `${RULE_OVERVIEW_TEST_ID}UpdatedByText` as const; -export const RULE_OVERVIEW_BODY_TEST_ID = `${RULE_OVERVIEW_TEST_ID}Body` as const; - -export const RULE_OVERVIEW_ABOUT_TEST_ID = `${RULE_OVERVIEW_TEST_ID}AboutSection` as const; -export const RULE_OVERVIEW_ABOUT_HEADER_TEST_ID = RULE_OVERVIEW_ABOUT_TEST_ID + HEADER_TEST_ID; -export const RULE_OVERVIEW_ABOUT_CONTENT_TEST_ID = RULE_OVERVIEW_ABOUT_TEST_ID + CONTENT_TEST_ID; - -export const RULE_OVERVIEW_DEFINITION_TEST_ID = - `${RULE_OVERVIEW_TEST_ID}DefinitionSection` as const; -export const RULE_OVERVIEW_DEFINITION_HEADER_TEST_ID = - RULE_OVERVIEW_DEFINITION_TEST_ID + HEADER_TEST_ID; -export const RULE_OVERVIEW_DEFINITION_CONTENT_TEST_ID = - RULE_OVERVIEW_DEFINITION_TEST_ID + CONTENT_TEST_ID; - -export const RULE_OVERVIEW_SCHEDULE_TEST_ID = `${RULE_OVERVIEW_TEST_ID}ScheduleSection` as const; -export const RULE_OVERVIEW_SCHEDULE_HEADER_TEST_ID = - RULE_OVERVIEW_SCHEDULE_TEST_ID + HEADER_TEST_ID; -export const RULE_OVERVIEW_SCHEDULE_CONTENT_TEST_ID = - RULE_OVERVIEW_SCHEDULE_TEST_ID + CONTENT_TEST_ID; - -export const RULE_OVERVIEW_ACTIONS_TEST_ID = `${RULE_OVERVIEW_TEST_ID}ActionsSection` as const; -export const RULE_OVERVIEW_ACTIONS_HEADER_TEST_ID = RULE_OVERVIEW_ACTIONS_TEST_ID + HEADER_TEST_ID; -export const RULE_OVERVIEW_ACTIONS_CONTENT_TEST_ID = - RULE_OVERVIEW_ACTIONS_TEST_ID + CONTENT_TEST_ID; - -export const RULE_OVERVIEW_LOADING_TEST_ID = `${RULE_OVERVIEW_TEST_ID}Loading` as const; -export const RULE_OVERVIEW_FOOTER_TEST_ID = `${RULE_OVERVIEW_TEST_ID}Footer` as const; -export const RULE_OVERVIEW_NAVIGATE_TO_RULE_TEST_ID = - `${RULE_OVERVIEW_FOOTER_TEST_ID}LinkToRuleDetails` as const; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/context.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/context.tsx deleted file mode 100644 index cae182b839e6d..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/context.tsx +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { createContext, memo, useContext, useMemo } from 'react'; -import { FlyoutError } from '@kbn/security-solution-common'; -import type { RuleOverviewPanelProps } from '.'; - -export interface RuleOverviewPanelContext { - /** - * Rule id if preview is rule details - */ - ruleId: string; -} - -export const RuleOverviewPanelContext = createContext( - undefined -); - -export type RuleOverviewPanelProviderProps = { - /** - * React components to render - */ - children: React.ReactNode; -} & Partial; - -export const RuleOverviewPanelProvider = memo( - ({ ruleId, children }: RuleOverviewPanelProviderProps) => { - const contextValue = useMemo(() => (ruleId ? { ruleId } : undefined), [ruleId]); - - if (!contextValue) { - return ; - } - - return ( - - {children} - - ); - } -); - -RuleOverviewPanelProvider.displayName = 'RuleOverviewPanelProvider'; - -export const useRuleOverviewPanelContext = (): RuleOverviewPanelContext => { - const contextValue = useContext(RuleOverviewPanelContext); - - if (!contextValue) { - throw new Error( - 'RuleOverviewPanelContext can only be used within RuleOverviewPanelContext provider' - ); - } - - return contextValue; -}; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/index.tsx deleted file mode 100644 index b978a1697bbd5..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/index.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { memo } from 'react'; -import type { FlyoutPanelProps } from '@kbn/expandable-flyout'; -import { FlyoutBody } from '@kbn/security-solution-common'; -import type { DocumentDetailsRuleOverviewPanelKey } from '../shared/constants/panel_keys'; -import { RuleOverview } from './components/rule_overview'; -import { RuleFooter } from './components/footer'; - -export interface RuleOverviewPanelProps extends FlyoutPanelProps { - key: typeof DocumentDetailsRuleOverviewPanelKey; - params: { - ruleId: string; - }; -} - -/** - * Displays a rule overview panel - */ -export const RuleOverviewPanel: React.FC = memo(() => { - return ( - <> - -
- -
-
- - - ); -}); - -RuleOverviewPanel.displayName = 'RuleOverviewPanel'; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/mocks/mock_context.ts b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/mocks/mock_context.ts deleted file mode 100644 index 4b800e338d85b..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/mocks/mock_context.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { RuleOverviewPanelContext } from '../context'; - -/** - * Mock contextValue for rule overview panel context - */ -export const mockContextValue: RuleOverviewPanelContext = { - ruleId: 'rule id', -}; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/constants/panel_keys.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/constants/panel_keys.ts index a57cbf85fa784..b3f6cd3343ef1 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/constants/panel_keys.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/constants/panel_keys.ts @@ -11,4 +11,3 @@ export const DocumentDetailsPreviewPanelKey = 'document-details-preview' as cons export const DocumentDetailsIsolateHostPanelKey = 'document-details-isolate-host' as const; export const DocumentDetailsAlertReasonPanelKey = 'document-details-alert-reason' as const; -export const DocumentDetailsRuleOverviewPanelKey = 'document-details-rule-overview' as const; diff --git a/x-pack/plugins/security_solution/public/flyout/index.tsx b/x-pack/plugins/security_solution/public/flyout/index.tsx index 8437777a1e891..d137e44641080 100644 --- a/x-pack/plugins/security_solution/public/flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/index.tsx @@ -16,7 +16,6 @@ import { DocumentDetailsRightPanelKey, DocumentDetailsPreviewPanelKey, DocumentDetailsAlertReasonPanelKey, - DocumentDetailsRuleOverviewPanelKey, } from './document_details/shared/constants/panel_keys'; import type { IsolateHostPanelProps } from './document_details/isolate_host'; import { IsolateHostPanel } from './document_details/isolate_host'; @@ -29,9 +28,8 @@ import { PreviewPanel } from './document_details/preview'; import type { AlertReasonPanelProps } from './document_details/alert_reason'; import { AlertReasonPanel } from './document_details/alert_reason'; import { AlertReasonPanelProvider } from './document_details/alert_reason/context'; -import type { RuleOverviewPanelProps } from './document_details/rule_overview'; -import { RuleOverviewPanel } from './document_details/rule_overview'; -import { RuleOverviewPanelProvider } from './document_details/rule_overview/context'; +import type { RulePanelExpandableFlyoutProps } from './rule_details/right'; +import { RulePanel, RulePanelKey, RulePreviewPanelKey } from './rule_details/right'; import type { UserPanelExpandableFlyoutProps } from './entity_details/user_right'; import { UserPanel, UserPanelKey, UserPreviewPanelKey } from './entity_details/user_right'; import type { UserDetailsPanelProps } from './entity_details/user_details_left'; @@ -80,11 +78,13 @@ const expandableFlyoutDocumentsPanels: ExpandableFlyoutProps['registeredPanels'] ), }, { - key: DocumentDetailsRuleOverviewPanelKey, + key: RulePanelKey, + component: (props) => , + }, + { + key: RulePreviewPanelKey, component: (props) => ( - - - + ), }, { diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/hooks/use_rule_details.test.ts b/x-pack/plugins/security_solution/public/flyout/rule_details/hooks/use_rule_details.test.ts new file mode 100644 index 0000000000000..41370334ed6a1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/hooks/use_rule_details.test.ts @@ -0,0 +1,66 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RenderHookResult } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react-hooks'; +import type { UseRuleDetailsParams, UseRuleDetailsResult } from './use_rule_details'; +import { useRuleDetails } from './use_rule_details'; +import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; + +const mockUseRuleWithFallback = useRuleWithFallback as jest.Mock; +jest.mock('../../../detection_engine/rule_management/logic/use_rule_with_fallback'); + +const initialProps: UseRuleDetailsParams = { + ruleId: 'ruleId', +}; + +describe('useRuleDetails', () => { + let hookResult: RenderHookResult; + + it('should return loading as true when the rule is loading', () => { + mockUseRuleWithFallback.mockReturnValue({ + rule: null, + loading: true, + isExistingRule: false, + }); + hookResult = renderHook((props: UseRuleDetailsParams) => useRuleDetails(props), { + initialProps, + }); + expect(hookResult.result.current.loading).toBe(true); + expect(hookResult.result.current.isExistingRule).toBe(false); + expect(hookResult.result.current.rule).toBe(null); + }); + + it('should return empty rule when no rule is found', () => { + mockUseRuleWithFallback.mockReturnValue({ + rule: null, + loading: false, + isExistingRule: false, + }); + hookResult = renderHook((props: UseRuleDetailsParams) => useRuleDetails(props), { + initialProps, + }); + expect(hookResult.result.current.loading).toBe(false); + expect(hookResult.result.current.isExistingRule).toBe(false); + expect(hookResult.result.current.rule).toBe(null); + }); + + it('should return rule data when rule is loaded', () => { + mockUseRuleWithFallback.mockReturnValue({ + rule: { id: 'ruleId' }, + loading: false, + isExistingRule: true, + }); + + hookResult = renderHook((props: UseRuleDetailsParams) => useRuleDetails(props), { + initialProps, + }); + expect(hookResult.result.current.loading).toBe(false); + expect(hookResult.result.current.isExistingRule).toBe(true); + expect(hookResult.result.current.rule).toEqual({ id: 'ruleId' }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/hooks/use_rule_details.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/hooks/use_rule_details.tsx new file mode 100644 index 0000000000000..33f093acbe2c3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/hooks/use_rule_details.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEffect, useMemo, useState } from 'react'; +import type { RuleResponse } from '../../../../common/api/detection_engine'; +import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; + +export interface UseRuleDetailsParams { + /** + * Id of the rule + */ + ruleId: string; +} + +export interface UseRuleDetailsResult { + /** + * Whether the rule exists + */ + isExistingRule: boolean; + /** + * Whether the data is loading + */ + loading: boolean; + /** + * Rule object that represents relevant information about a rule + */ + rule: RuleResponse | null; +} + +/** + * Hook to retrieve rule details for rule details flyout + */ +export const useRuleDetails = ({ ruleId }: UseRuleDetailsParams): UseRuleDetailsResult => { + const [rule, setRule] = useState(null); + const { rule: maybeRule, loading, isExistingRule } = useRuleWithFallback(ruleId ?? ''); + + // persist rule until refresh is complete + useEffect(() => { + if (maybeRule != null) { + setRule(maybeRule); + } + }, [maybeRule]); + + return useMemo( + () => ({ + rule, + loading, + isExistingRule, + }), + [loading, isExistingRule, rule] + ); +}; diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.test.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.test.tsx new file mode 100644 index 0000000000000..f1e276011ca26 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.test.tsx @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render } from '@testing-library/react'; +import React from 'react'; +import { RULE_PREVIEW_FOOTER_TEST_ID, RULE_PREVIEW_OPEN_RULE_FLYOUT_TEST_ID } from './test_ids'; +import { PreviewFooter } from './footer'; +import { mockFlyoutApi } from '../../document_details/shared/mocks/mock_flyout_context'; +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { RulePanelKey } from '../right'; + +jest.mock('@kbn/expandable-flyout'); + +const renderRulePreviewFooter = () => render(); + +describe('', () => { + beforeAll(() => { + jest.mocked(useExpandableFlyoutApi).mockReturnValue(mockFlyoutApi); + }); + + it('should render rule details link correctly when ruleId is available', () => { + const { getByTestId } = renderRulePreviewFooter(); + + expect(getByTestId(RULE_PREVIEW_FOOTER_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(RULE_PREVIEW_OPEN_RULE_FLYOUT_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(RULE_PREVIEW_OPEN_RULE_FLYOUT_TEST_ID)).toHaveTextContent( + 'Show full rule details' + ); + }); + + it('should open rule flyout when clicked', () => { + const { getByTestId } = renderRulePreviewFooter(); + + getByTestId(RULE_PREVIEW_OPEN_RULE_FLYOUT_TEST_ID).click(); + + expect(mockFlyoutApi.openFlyout).toHaveBeenCalledWith({ + right: { id: RulePanelKey, params: { ruleId: 'ruleid' } }, + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/footer.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.tsx similarity index 51% rename from x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/footer.tsx rename to x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.tsx index aca0d23027a61..1774c37d9e535 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/footer.tsx +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.tsx @@ -5,29 +5,39 @@ * 2.0. */ -import React, { memo } from 'react'; +import React, { memo, useCallback } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FlyoutFooter } from '@kbn/security-solution-common'; -import { useRuleOverviewPanelContext } from '../context'; -import { RULE_OVERVIEW_FOOTER_TEST_ID, RULE_OVERVIEW_NAVIGATE_TO_RULE_TEST_ID } from './test_ids'; -import { useRuleDetailsLink } from '../../shared/hooks/use_rule_details_link'; +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { RULE_PREVIEW_FOOTER_TEST_ID, RULE_PREVIEW_OPEN_RULE_FLYOUT_TEST_ID } from './test_ids'; +import { RulePanelKey } from '../right'; /** * Footer in rule preview panel */ -export const RuleFooter = memo(() => { - const { ruleId } = useRuleOverviewPanelContext(); - const href = useRuleDetailsLink({ ruleId }); +export const PreviewFooter = memo(({ ruleId }: { ruleId: string }) => { + const { openFlyout } = useExpandableFlyoutApi(); - return href ? ( - + const openRuleFlyout = useCallback(() => { + openFlyout({ + right: { + id: RulePanelKey, + params: { + ruleId, + }, + }, + }); + }, [openFlyout, ruleId]); + + return ( + {i18n.translate('xpack.securitySolution.flyout.preview.rule.viewDetailsLabel', { defaultMessage: 'Show full rule details', @@ -36,7 +46,7 @@ export const RuleFooter = memo(() => { - ) : null; + ); }); -RuleFooter.displayName = 'RuleFooter'; +PreviewFooter.displayName = 'PreviewFooter'; diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/preview/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/rule_details/preview/test_ids.ts new file mode 100644 index 0000000000000..7cb938cbdce7d --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/preview/test_ids.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PREFIX } from '../../shared/test_ids'; + +const RULE_PREVIEW_TEST_ID = `${PREFIX}RulePreviewPanel` as const; + +export const RULE_PREVIEW_FOOTER_TEST_ID = `${RULE_PREVIEW_TEST_ID}Footer` as const; + +export const RULE_PREVIEW_OPEN_RULE_FLYOUT_TEST_ID = + `${RULE_PREVIEW_FOOTER_TEST_ID}OpenRuleFlyout` as const; diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.test.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.test.tsx new file mode 100644 index 0000000000000..1a65f91273589 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.test.tsx @@ -0,0 +1,98 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { PanelContent } from './content'; +import { ThemeProvider } from 'styled-components'; +import { getMockTheme } from '../../../common/lib/kibana/kibana_react.mock'; +import { TestProviders } from '../../../common/mock'; +import { useRuleDetails } from '../hooks/use_rule_details'; +import { getStepsData } from '../../../detections/pages/detection_engine/rules/helpers'; +import { + mockAboutStepRule, + mockDefineStepRule, + mockScheduleStepRule, +} from '../../../detection_engine/rule_management_ui/components/rules_table/__mocks__/mock'; +import type { RuleResponse } from '../../../../common/api/detection_engine'; +import { + BODY_TEST_ID, + ABOUT_HEADER_TEST_ID, + ABOUT_CONTENT_TEST_ID, + DEFINITION_HEADER_TEST_ID, + DEFINITION_CONTENT_TEST_ID, + SCHEDULE_HEADER_TEST_ID, + SCHEDULE_CONTENT_TEST_ID, + ACTIONS_HEADER_TEST_ID, + ACTIONS_CONTENT_TEST_ID, +} from './test_ids'; + +const mockUseRuleDetails = useRuleDetails as jest.Mock; +jest.mock('../hooks/use_rule_details'); + +const mockGetStepsData = getStepsData as jest.Mock; +jest.mock('../../../detections/pages/detection_engine/rules/helpers'); + +const mockTheme = getMockTheme({ eui: { euiColorMediumShade: '#ece' } }); +const rule = { name: 'rule name', description: 'rule description' } as RuleResponse; + +const renderRulePreview = () => + render( + + + + + + ); + +describe('', () => { + afterEach(() => { + jest.clearAllMocks(); + mockUseRuleDetails.mockReturnValue({ + rule, + loading: false, + isExistingRule: true, + }); + }); + + it('should render rule preview and its sub sections', () => { + mockGetStepsData.mockReturnValue({ + aboutRuleData: mockAboutStepRule(), + defineRuleData: mockDefineStepRule(), + scheduleRuleData: mockScheduleStepRule(), + ruleActionsData: { actions: ['action'] }, + }); + + const { getByTestId } = renderRulePreview(); + + expect(getByTestId(BODY_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(ABOUT_HEADER_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(ABOUT_HEADER_TEST_ID)).toHaveTextContent('About'); + expect(getByTestId(ABOUT_CONTENT_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(DEFINITION_HEADER_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(DEFINITION_HEADER_TEST_ID)).toHaveTextContent('Definition'); + expect(getByTestId(DEFINITION_CONTENT_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(SCHEDULE_HEADER_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(SCHEDULE_HEADER_TEST_ID)).toHaveTextContent('Schedule'); + expect(getByTestId(SCHEDULE_CONTENT_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(ACTIONS_HEADER_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(ACTIONS_HEADER_TEST_ID)).toHaveTextContent('Actions'); + expect(getByTestId(ACTIONS_CONTENT_TEST_ID)).toBeInTheDocument(); + }); + + it('should not render actions if action is not available', () => { + mockGetStepsData.mockReturnValue({ + aboutRuleData: mockAboutStepRule(), + defineRuleData: mockDefineStepRule(), + scheduleRuleData: mockScheduleStepRule(), + }); + const { queryByTestId } = renderRulePreview(); + + expect(queryByTestId(ACTIONS_HEADER_TEST_ID)).not.toBeInTheDocument(); + expect(queryByTestId(ACTIONS_CONTENT_TEST_ID)).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.tsx new file mode 100644 index 0000000000000..2778fc9c7ca22 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.tsx @@ -0,0 +1,145 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { memo } from 'react'; +import { EuiText, EuiHorizontalRule, EuiSpacer, EuiPanel } from '@elastic/eui'; +import { css } from '@emotion/css'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { FlyoutBody } from '@kbn/security-solution-common'; +import { ExpandableSection } from '../../document_details/right/components/expandable_section'; +import { RuleAboutSection } from '../../../detection_engine/rule_management/components/rule_details/rule_about_section'; +import { RuleScheduleSection } from '../../../detection_engine/rule_management/components/rule_details/rule_schedule_section'; +import { RuleDefinitionSection } from '../../../detection_engine/rule_management/components/rule_details/rule_definition_section'; +import { StepRuleActionsReadOnly } from '../../../detection_engine/rule_creation/components/step_rule_actions'; +import { getStepsData } from '../../../detections/pages/detection_engine/rules/helpers'; +import { + BODY_TEST_ID, + ABOUT_TEST_ID, + DEFINITION_TEST_ID, + SCHEDULE_TEST_ID, + ACTIONS_TEST_ID, +} from './test_ids'; +import type { RuleResponse } from '../../../../common/api/detection_engine'; + +const panelViewStyle = css` + dt { + font-size: 90% !important; + } + text-overflow: ellipsis; + .euiFlexGroup { + flex-wrap: inherit; + } + + .euiFlexItem { + inline-size: inherit; + flex-basis: inherit; + } +`; + +export interface RuleDetailsProps { + /** + * Rule object that represents relevant information about a rule + */ + rule: RuleResponse; +} + +/** + * Rule details content on the right section of expandable flyout + */ +export const PanelContent = memo(({ rule }: RuleDetailsProps) => { + const { ruleActionsData } = + rule != null ? getStepsData({ rule, detailsView: true }) : { ruleActionsData: null }; + + const hasNotificationActions = Boolean(ruleActionsData?.actions?.length); + const hasResponseActions = Boolean(ruleActionsData?.responseActions?.length); + const hasActions = ruleActionsData != null && (hasNotificationActions || hasResponseActions); + + return ( + + + + } + expanded + data-test-subj={ABOUT_TEST_ID} + > + {rule.description} + + + + + + } + expanded={false} + data-test-subj={DEFINITION_TEST_ID} + > + + + + + } + expanded={false} + data-test-subj={SCHEDULE_TEST_ID} + > + + + + {hasActions && ruleActionsData != null && ( + + } + expanded={false} + data-test-subj={ACTIONS_TEST_ID} + > + + + )} + + + ); +}); + +PanelContent.displayName = 'PanelContent'; diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.test.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.test.tsx new file mode 100644 index 0000000000000..06919bac4a9ab --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.test.tsx @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import type { PanelHeaderProps } from './header'; +import { PanelHeader } from './header'; +import { TestProvider as ExpandableFlyoutTestProvider } from '@kbn/expandable-flyout/src/test/provider'; +import { TestProviders } from '../../../common/mock'; +import { useRuleDetailsLink } from '../../document_details/shared/hooks/use_rule_details_link'; +import type { Rule } from '../../../detection_engine/rule_management/logic'; +import { + RULE_TITLE_TEST_ID, + RULE_CREATED_BY_TEST_ID, + RULE_UPDATED_BY_TEST_ID, + RULE_TITLE_SUPPRESSED_TEST_ID, + NAVIGATE_TO_RULE_DETAILS_PAGE_TEST_ID, +} from './test_ids'; + +jest.mock('../../document_details/shared/hooks/use_rule_details_link'); +const defaultProps = { + rule: { id: 'id', name: 'rule' } as Rule, + isSuppressed: false, +}; + +const renderRuleTitle = (props: PanelHeaderProps) => + render( + + + + + + ); + +describe('', () => { + it('should render title and its components', () => { + (useRuleDetailsLink as jest.Mock).mockReturnValue('rule_details_link'); + const { getByTestId, queryByTestId } = renderRuleTitle(defaultProps); + + expect(getByTestId(RULE_TITLE_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(NAVIGATE_TO_RULE_DETAILS_PAGE_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(RULE_CREATED_BY_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(RULE_UPDATED_BY_TEST_ID)).toBeInTheDocument(); + expect(queryByTestId(RULE_TITLE_SUPPRESSED_TEST_ID)).not.toBeInTheDocument(); + }); + + it('should render deleted rule badge', () => { + (useRuleDetailsLink as jest.Mock).mockReturnValue('rule_details_link'); + const props = { + ...defaultProps, + isSuppressed: true, + }; + const { getByTestId } = renderRuleTitle(props); + expect(getByTestId(RULE_TITLE_SUPPRESSED_TEST_ID)).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.tsx new file mode 100644 index 0000000000000..3dbbcc6b5b259 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.tsx @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { + EuiTitle, + EuiText, + EuiSpacer, + EuiFlexGroup, + EuiFlexItem, + EuiBadge, + EuiLink, +} from '@elastic/eui'; +import { FlyoutHeader, FlyoutTitle } from '@kbn/security-solution-common'; +import { DELETED_RULE } from '../../../detection_engine/rule_details_ui/pages/rule_details/translations'; +import { CreatedBy, UpdatedBy } from '../../../detections/components/rules/rule_info'; +import { + RULE_TITLE_TEST_ID, + RULE_CREATED_BY_TEST_ID, + RULE_UPDATED_BY_TEST_ID, + RULE_TITLE_SUPPRESSED_TEST_ID, + NAVIGATE_TO_RULE_DETAILS_PAGE_TEST_ID, +} from './test_ids'; +import type { RuleResponse } from '../../../../common/api/detection_engine'; +import { useRuleDetailsLink } from '../../document_details/shared/hooks/use_rule_details_link'; + +export interface PanelHeaderProps { + /** + * Rule object that represents relevant information about a rule + */ + rule: RuleResponse; + /** + * Flag to indicate if rule is suppressed + */ + isSuppressed: boolean; +} + +/** + * Title component that shows basic information of a rule. This is displayed above rule overview body + */ +export const PanelHeader: React.FC = ({ rule, isSuppressed }) => { + const href = useRuleDetailsLink({ ruleId: rule.id }); + + return ( + + {href ? ( + + + + ) : ( + +
{rule.name}
+
+ )} + + {isSuppressed && ( + <> + + + {DELETED_RULE} + + + )} + + + + + + + + + + + + + +
+ ); +}; + +PanelHeader.displayName = 'PanelHeader'; diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.test.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.test.tsx new file mode 100644 index 0000000000000..1ce755575450c --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.test.tsx @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { ThemeProvider } from 'styled-components'; +import { getMockTheme } from '../../../common/lib/kibana/kibana_react.mock'; +import { TestProviders } from '../../../common/mock'; +// import { TestProvider } from '@kbn/expandable-flyout/src/test/provider'; +import { RulePanel } from '.'; +import { getStepsData } from '../../../detections/pages/detection_engine/rules/helpers'; +import { useRuleDetails } from '../hooks/use_rule_details'; +import { + mockAboutStepRule, + mockDefineStepRule, + mockScheduleStepRule, +} from '../../../detection_engine/rule_management_ui/components/rules_table/__mocks__/mock'; +import type { RuleResponse } from '../../../../common/api/detection_engine'; +import { BODY_TEST_ID, LOADING_TEST_ID } from './test_ids'; +import { RULE_PREVIEW_FOOTER_TEST_ID } from '../preview/test_ids'; + +const mockUseRuleDetails = useRuleDetails as jest.Mock; +jest.mock('../hooks/use_rule_details'); + +const mockGetStepsData = getStepsData as jest.Mock; +jest.mock('../../../detections/pages/detection_engine/rules/helpers'); + +const mockTheme = getMockTheme({ eui: { euiColorMediumShade: '#ece' } }); +const rule = { name: 'rule name', description: 'rule description' } as RuleResponse; +const ERROR_MESSAGE = 'There was an error displaying data.'; + +const renderRulePanel = (isPreviewMode = false) => + render( + + + + + + ); + +describe('', () => { + it('should render rule details and its sub sections', () => { + mockUseRuleDetails.mockReturnValue({ + rule, + loading: false, + isExistingRule: true, + }); + mockGetStepsData.mockReturnValue({ + aboutRuleData: mockAboutStepRule(), + defineRuleData: mockDefineStepRule(), + scheduleRuleData: mockScheduleStepRule(), + ruleActionsData: { actions: ['action'] }, + }); + + const { getByTestId, queryByTestId, queryByText } = renderRulePanel(); + + expect(getByTestId(BODY_TEST_ID)).toBeInTheDocument(); + expect(queryByTestId(LOADING_TEST_ID)).not.toBeInTheDocument(); + expect(queryByText(ERROR_MESSAGE)).not.toBeInTheDocument(); + }); + + it('should render loading spinner when rule is loading', () => { + mockUseRuleDetails.mockReturnValue({ + rule: null, + loading: true, + isExistingRule: true, + }); + mockGetStepsData.mockReturnValue({}); + const { getByTestId } = renderRulePanel(); + + expect(getByTestId(LOADING_TEST_ID)).toBeInTheDocument(); + }); + + it('should render error message when rule is null', () => { + mockUseRuleDetails.mockReturnValue({ + rule: null, + loading: false, + isExistingRule: true, + }); + mockGetStepsData.mockReturnValue({}); + const { queryByTestId, getByText } = renderRulePanel(); + + expect(queryByTestId(BODY_TEST_ID)).not.toBeInTheDocument(); + expect(getByText(ERROR_MESSAGE)).toBeInTheDocument(); + }); + + it('should render preview footer when isPreviewMode is true', () => { + mockUseRuleDetails.mockReturnValue({ + rule, + loading: false, + isExistingRule: true, + }); + mockGetStepsData.mockReturnValue({}); + const { getByTestId } = renderRulePanel(true); + + // await act(async () => { + expect(getByTestId(RULE_PREVIEW_FOOTER_TEST_ID)).toBeInTheDocument(); + // }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.tsx new file mode 100644 index 0000000000000..958a2d4265186 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.tsx @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import type { FlyoutPanelProps } from '@kbn/expandable-flyout'; +import { FlyoutLoading, FlyoutError, FlyoutNavigation } from '@kbn/security-solution-common'; +import { i18n } from '@kbn/i18n'; +import { PanelContent } from './content'; +import { PanelHeader } from './header'; +import { PreviewFooter } from '../preview/footer'; +import { useRuleDetails } from '../hooks/use_rule_details'; +import { LOADING_TEST_ID } from './test_ids'; + +export interface RulePanelExpandableFlyoutProps extends FlyoutPanelProps { + key: 'rule-panel' | 'rule-preview-panel'; + params: { + ruleId: string; + isPreviewMode?: boolean; + }; +} + +export const RulePanelKey: RulePanelExpandableFlyoutProps['key'] = 'rule-panel'; +export const RulePreviewPanelKey: RulePanelExpandableFlyoutProps['key'] = 'rule-preview-panel'; + +export const RULE_PREVIEW_BANNER = { + title: i18n.translate('xpack.securitySolution.flyout.right.rule.rulePreviewTitle', { + defaultMessage: 'Preview rule details', + }), + backgroundColor: 'warning', + textColor: 'warning', +}; + +export interface RulePanelProps extends Record { + /** + * Rule ID + */ + ruleId: string; + /** + * If in preview mode, show preview banner and footer + */ + isPreviewMode?: boolean; +} + +/** + * Displays a rule overview panel + */ +export const RulePanel = memo(({ ruleId, isPreviewMode }: RulePanelProps) => { + const { rule, loading, isExistingRule } = useRuleDetails({ ruleId }); + + return loading ? ( + + ) : rule ? ( + <> + + + + {isPreviewMode && } + + ) : ( + + ); +}); + +RulePanel.displayName = 'RulePanel'; diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/rule_details/right/test_ids.ts new file mode 100644 index 0000000000000..0e0073535efba --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/test_ids.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PREFIX } from '../../shared/test_ids'; +import { + CONTENT_TEST_ID, + HEADER_TEST_ID, +} from '../../document_details/right/components/expandable_section'; + +const RULE_PANEL_TEST_ID = `${PREFIX}RulePanel` as const; +export const RULE_TITLE_TEST_ID = `${RULE_PANEL_TEST_ID}Title` as const; +export const NAVIGATE_TO_RULE_DETAILS_PAGE_TEST_ID = + `${RULE_PANEL_TEST_ID}LinkToRuleDetailsPage` as const; + +export const RULE_TITLE_SUPPRESSED_TEST_ID = `${RULE_TITLE_TEST_ID}Suppressed` as const; +export const RULE_CREATED_BY_TEST_ID = `${RULE_PANEL_TEST_ID}CreatedByText` as const; +export const RULE_UPDATED_BY_TEST_ID = `${RULE_PANEL_TEST_ID}UpdatedByText` as const; +export const BODY_TEST_ID = `${RULE_PANEL_TEST_ID}Body` as const; + +export const ABOUT_TEST_ID = `${RULE_PANEL_TEST_ID}AboutSection` as const; +export const ABOUT_HEADER_TEST_ID = ABOUT_TEST_ID + HEADER_TEST_ID; +export const ABOUT_CONTENT_TEST_ID = ABOUT_TEST_ID + CONTENT_TEST_ID; + +export const DEFINITION_TEST_ID = `${RULE_PANEL_TEST_ID}DefinitionSection` as const; +export const DEFINITION_HEADER_TEST_ID = DEFINITION_TEST_ID + HEADER_TEST_ID; +export const DEFINITION_CONTENT_TEST_ID = DEFINITION_TEST_ID + CONTENT_TEST_ID; + +export const SCHEDULE_TEST_ID = `${RULE_PANEL_TEST_ID}ScheduleSection` as const; +export const SCHEDULE_HEADER_TEST_ID = SCHEDULE_TEST_ID + HEADER_TEST_ID; +export const SCHEDULE_CONTENT_TEST_ID = SCHEDULE_TEST_ID + CONTENT_TEST_ID; + +export const ACTIONS_TEST_ID = `${RULE_PANEL_TEST_ID}ActionsSection` as const; +export const ACTIONS_HEADER_TEST_ID = ACTIONS_TEST_ID + HEADER_TEST_ID; +export const ACTIONS_CONTENT_TEST_ID = ACTIONS_TEST_ID + CONTENT_TEST_ID; + +export const LOADING_TEST_ID = `${RULE_PANEL_TEST_ID}Loading` as const; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/preview_link.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/preview_link.test.tsx index 6ffc418c7e54c..c1dfc456f40ce 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/preview_link.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/preview_link.test.tsx @@ -17,6 +17,7 @@ import { HOST_PREVIEW_BANNER } from '../../document_details/right/components/hos import { UserPreviewPanelKey } from '../../entity_details/user_right'; import { USER_PREVIEW_BANNER } from '../../document_details/right/components/user_entity_overview'; import { NetworkPanelKey, NETWORK_PREVIEW_BANNER } from '../../network_details'; +import { RulePreviewPanelKey, RULE_PREVIEW_BANNER } from '../../rule_details/right'; import { createTelemetryServiceMock } from '../../../common/lib/telemetry/telemetry_service.mock'; const mockedTelemetry = createTelemetryServiceMock(); @@ -43,7 +44,13 @@ jest.mock('@kbn/expandable-flyout', () => ({ const renderPreviewLink = (field: string, value: string, dataTestSuj?: string) => render( - + ); @@ -111,6 +118,49 @@ describe('', () => { }, }); }); + + it('should render a link to open rule preview', () => { + const { getByTestId } = renderPreviewLink('kibana.alert.rule.name', 'ruleId', 'rule-link'); + getByTestId('rule-link').click(); + + expect(mockFlyoutApi.openPreviewPanel).toHaveBeenCalledWith({ + id: RulePreviewPanelKey, + params: { + ruleId: 'ruleId', + banner: RULE_PREVIEW_BANNER, + isPreviewMode: true, + }, + }); + }); + + it('should not render a link when ruleId is not provided', () => { + const { queryByTestId } = render( + + + + ); + expect(queryByTestId('rule-link')).not.toBeInTheDocument(); + }); + + it('should not render a link when rule name is rendered in rule preview', () => { + const { queryByTestId } = render( + + + + ); + expect(queryByTestId('rule-link')).not.toBeInTheDocument(); + }); }); describe('hasPreview', () => { @@ -122,6 +172,10 @@ describe('hasPreview', () => { expect(hasPreview('user.name')).toBe(true); }); + it('should return true if field is rule.id', () => { + expect(hasPreview('kibana.alert.rule.name')).toBe(true); + }); + it('should return true if field type is source.ip', () => { expect(hasPreview('source.ip')).toBe(true); expect(hasPreview('destination.ip')).toBe(true); diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/preview_link.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/preview_link.tsx index ceb1f216703c7..fc51a4e64e6c0 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/preview_link.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/preview_link.tsx @@ -13,6 +13,7 @@ import { getEcsField } from '../../document_details/right/components/table_field import { HOST_NAME_FIELD_NAME, USER_NAME_FIELD_NAME, + SIGNAL_RULE_NAME_FIELD_NAME, IP_FIELD_TYPE, } from '../../../timelines/components/timeline/body/renderers/constants'; import { useKibana } from '../../../common/lib/kibana'; @@ -22,12 +23,13 @@ import { HOST_PREVIEW_BANNER } from '../../document_details/right/components/hos import { UserPreviewPanelKey } from '../../entity_details/user_right'; import { USER_PREVIEW_BANNER } from '../../document_details/right/components/user_entity_overview'; import { NetworkPanelKey, NETWORK_PREVIEW_BANNER } from '../../network_details'; +import { RulePreviewPanelKey, RULE_PREVIEW_BANNER } from '../../rule_details/right'; + +const PREVIEW_FIELDS = [HOST_NAME_FIELD_NAME, USER_NAME_FIELD_NAME, SIGNAL_RULE_NAME_FIELD_NAME]; // Helper function to check if the field has a preview link export const hasPreview = (field: string) => - field === HOST_NAME_FIELD_NAME || - field === USER_NAME_FIELD_NAME || - getEcsField(field)?.type === IP_FIELD_TYPE; + PREVIEW_FIELDS.includes(field) || getEcsField(field)?.type === IP_FIELD_TYPE; interface PreviewParams { id: string; @@ -35,7 +37,12 @@ interface PreviewParams { } // Helper get function to get the preview parameters -const getPreviewParams = (value: string, field: string, scopeId: string): PreviewParams | null => { +const getPreviewParams = ( + value: string, + field: string, + scopeId: string, + ruleId?: string +): PreviewParams | null => { if (getEcsField(field)?.type === IP_FIELD_TYPE) { return { id: NetworkPanelKey, @@ -48,6 +55,9 @@ const getPreviewParams = (value: string, field: string, scopeId: string): Previe }, }; } + if (field === SIGNAL_RULE_NAME_FIELD_NAME && !ruleId) { + return null; + } switch (field) { case HOST_NAME_FIELD_NAME: return { @@ -59,6 +69,11 @@ const getPreviewParams = (value: string, field: string, scopeId: string): Previe id: UserPreviewPanelKey, params: { userName: value, scopeId, banner: USER_PREVIEW_BANNER }, }; + case SIGNAL_RULE_NAME_FIELD_NAME: + return { + id: RulePreviewPanelKey, + params: { ruleId, banner: RULE_PREVIEW_BANNER, isPreviewMode: true }, + }; default: return null; } @@ -78,6 +93,14 @@ interface PreviewLinkProps { * Scope id to use for the preview panel */ scopeId: string; + /** + * Rule id to use for the preview panel + */ + ruleId?: string; + /** + * Whether the preview link is in preview mode + */ + isPreview?: boolean; /** * Optional data-test-subj value */ @@ -95,6 +118,8 @@ export const PreviewLink: FC = ({ field, value, scopeId, + ruleId, + isPreview, children, 'data-test-subj': dataTestSubj = FLYOUT_PREVIEW_LINK_TEST_ID, }) => { @@ -102,7 +127,7 @@ export const PreviewLink: FC = ({ const { telemetry } = useKibana().services; const onClick = useCallback(() => { - const previewParams = getPreviewParams(value, field, scopeId); + const previewParams = getPreviewParams(value, field, scopeId, ruleId); if (previewParams) { openPreviewPanel({ id: previewParams.id, @@ -113,12 +138,18 @@ export const PreviewLink: FC = ({ panel: 'preview', }); } - }, [field, scopeId, value, telemetry, openPreviewPanel]); + }, [field, scopeId, value, telemetry, openPreviewPanel, ruleId]); + // If the field is not previewable, do not render link if (!hasPreview(field)) { return <>{children ?? value}; } + // If the field is rule.id, and the ruleId is not provided or currently in rule preview, do not render link + if (field === SIGNAL_RULE_NAME_FIELD_NAME && (!ruleId || isPreview)) { + return <>{children ?? value}; + } + return ( {children ?? value} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx index c0457fffabc36..d41c0238ce592 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field_helpers.tsx @@ -9,17 +9,15 @@ import type { EuiButtonEmpty, EuiButtonIcon } from '@elastic/eui'; import { EuiLink, EuiFlexGroup, EuiFlexItem, EuiIcon, EuiToolTip } from '@elastic/eui'; import { isString, isEmpty } from 'lodash/fp'; import type { SyntheticEvent } from 'react'; -import React, { useCallback, useMemo } from 'react'; +import React, { useCallback, useMemo, useContext } from 'react'; import styled from 'styled-components'; - +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; import { DefaultDraggable } from '../../../../../common/components/draggables'; import { getEmptyTagValue } from '../../../../../common/components/empty_value'; import { getRuleDetailsUrl } from '../../../../../common/components/link_to/redirect_to_detection_engine'; import { TruncatableText } from '../../../../../common/components/truncatable_text'; - import { isUrlInvalid } from '../../../../../common/utils/validators'; import endPointSvg from '../../../../../common/utils/logo_endpoint/64_color.svg'; - import * as i18n from './translations'; import { SecurityPageName } from '../../../../../app/types'; import { useFormatUrl } from '../../../../../common/components/link_to'; @@ -27,6 +25,8 @@ import { useKibana } from '../../../../../common/lib/kibana'; import { APP_UI_ID } from '../../../../../../common/constants'; import { LinkAnchor } from '../../../../../common/components/links'; import { GenericLinkButton } from '../../../../../common/components/links/helpers'; +import { StatefulEventContext } from '../../../../../common/components/events_viewer/stateful_event_context'; +import { RulePanelKey } from '../../../../../flyout/rule_details/right'; const EventModuleFlexItem = styled(EuiFlexItem)` width: 100%; @@ -67,21 +67,38 @@ export const RenderRuleName: React.FC = ({ title, value, }) => { + const { openRightPanel } = useExpandableFlyoutApi(); + const eventContext = useContext(StatefulEventContext); + const ruleName = `${value}`; const ruleId = linkValue; const { search } = useFormatUrl(SecurityPageName.rules); const { navigateToApp, getUrlForApp } = useKibana().services.application; + const isInTimelineContext = + ruleName && eventContext?.enableHostDetailsFlyout && eventContext?.timelineID; + const goToRuleDetails = useCallback( (ev: React.SyntheticEvent) => { ev.preventDefault(); - navigateToApp(APP_UI_ID, { - deepLinkId: SecurityPageName.rules, - path: getRuleDetailsUrl(ruleId ?? '', search), - openInNewTab, + + if (!eventContext || !isInTimelineContext) { + navigateToApp(APP_UI_ID, { + deepLinkId: SecurityPageName.rules, + path: getRuleDetailsUrl(ruleId ?? '', search), + openInNewTab, + }); + return; + } + + openRightPanel({ + id: RulePanelKey, + params: { + ruleId, + }, }); }, - [navigateToApp, ruleId, search, openInNewTab] + [navigateToApp, ruleId, search, openInNewTab, openRightPanel, eventContext, isInTimelineContext] ); const href = useMemo( diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index dd4d2709bd4cf..583b571bbc73f 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -39118,7 +39118,6 @@ "xpack.securitySolution.flyout.preview.rule.viewDetailsLabel": "Afficher l’ensemble des détails de la règle", "xpack.securitySolution.flyout.right.about.description.documentTitle": "Description du document", "xpack.securitySolution.flyout.right.about.description.noRuleDescription": "Il n'existe pas de description pour cette règle.", - "xpack.securitySolution.flyout.right.about.description.rulePreviewTitle": "Afficher les détails de la règle", "xpack.securitySolution.flyout.right.about.description.ruleSummaryButtonAriaLabel": "Afficher le résumé de la règle", "xpack.securitySolution.flyout.right.about.description.ruleSummaryButtonLabel": "Afficher le résumé de la règle", "xpack.securitySolution.flyout.right.about.description.ruleTitle": "Description de la règle", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 1e6b0cb9dab35..70d5a3b861b99 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -39101,7 +39101,6 @@ "xpack.securitySolution.flyout.preview.rule.viewDetailsLabel": "完全なルール詳細を表示", "xpack.securitySolution.flyout.right.about.description.documentTitle": "ドキュメント説明", "xpack.securitySolution.flyout.right.about.description.noRuleDescription": "このルールに関する説明はありません。", - "xpack.securitySolution.flyout.right.about.description.rulePreviewTitle": "ルール詳細をプレビュー", "xpack.securitySolution.flyout.right.about.description.ruleSummaryButtonAriaLabel": "ルール概要を表示", "xpack.securitySolution.flyout.right.about.description.ruleSummaryButtonLabel": "ルール概要を表示", "xpack.securitySolution.flyout.right.about.description.ruleTitle": "ルールの説明", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index a2dd46f2f7c18..5ba58da581710 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -39145,7 +39145,6 @@ "xpack.securitySolution.flyout.preview.rule.viewDetailsLabel": "显示完整规则详情", "xpack.securitySolution.flyout.right.about.description.documentTitle": "文档描述", "xpack.securitySolution.flyout.right.about.description.noRuleDescription": "此规则没有订阅。", - "xpack.securitySolution.flyout.right.about.description.rulePreviewTitle": "预览规则详情", "xpack.securitySolution.flyout.right.about.description.ruleSummaryButtonAriaLabel": "显示规则摘要", "xpack.securitySolution.flyout.right.about.description.ruleSummaryButtonLabel": "显示规则摘要", "xpack.securitySolution.flyout.right.about.description.ruleTitle": "规则描述", diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_rule_preview.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_rule_preview.ts index 1c511e090103f..d6e800517fdcb 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_rule_preview.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_rule_preview.ts @@ -8,30 +8,30 @@ import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_TITLE = getDataTestSubjectSelector( - 'securitySolutionFlyoutRuleOverviewRuleOverviewTitle' + 'securitySolutionFlyoutRulePanelTitle' ); export const DOCUMENT_DETAILS_FLYOUT_CREATED_BY = getDataTestSubjectSelector( - 'securitySolutionFlyoutRuleOverviewCreatedByText' + 'securitySolutionFlyoutRulePanelCreatedByText' ); export const DOCUMENT_DETAILS_FLYOUT_UPDATED_BY = getDataTestSubjectSelector( - 'securitySolutionFlyoutRuleOverviewUpdatedByText' + 'securitySolutionFlyoutRulePanelUpdatedByText' ); export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_ABOUT_SECTION_HEADER = getDataTestSubjectSelector( - 'securitySolutionFlyoutRuleOverviewAboutSectionHeader' + 'securitySolutionFlyoutRulePanelAboutSectionHeader' ); export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_ABOUT_SECTION_CONTENT = - getDataTestSubjectSelector('securitySolutionFlyoutRuleOverviewAboutSectionContent'); + getDataTestSubjectSelector('securitySolutionFlyoutRulePanelAboutSectionContent'); export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_DEFINITION_SECTION_HEADER = - getDataTestSubjectSelector('securitySolutionFlyoutRuleOverviewDefinitionSectionHeader'); + getDataTestSubjectSelector('securitySolutionFlyoutRulePanelDefinitionSectionHeader'); export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_DEFINITION_SECTION_CONTENT = - getDataTestSubjectSelector('securitySolutionFlyoutRuleOverviewDefinitionSectionContent'); + getDataTestSubjectSelector('securitySolutionFlyoutRulePanelDefinitionSectionContent'); export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SCHEDULE_SECTION_HEADER = - getDataTestSubjectSelector('securitySolutionFlyoutRuleOverviewScheduleSectionHeader'); + getDataTestSubjectSelector('securitySolutionFlyoutRulePanelScheduleSectionHeader'); export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SCHEDULE_SECTION_CONTENT = - getDataTestSubjectSelector('securitySolutionFlyoutRuleOverviewScheduleSectionContent'); + getDataTestSubjectSelector('securitySolutionFlyoutRulePanelScheduleSectionContent'); export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_FOOTER = getDataTestSubjectSelector( - 'securitySolutionFlyoutRuleOverviewFooter' + 'securitySolutionFlyoutRulePreviewPanelFooter' ); export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_FOOTER_LINK = getDataTestSubjectSelector( - 'securitySolutionFlyoutRuleOverviewFooterLinkToRuleDetails' + 'securitySolutionFlyoutRulePreviewPanelFooterOpenRuleFlyout' ); From ca0d60cb042c6a46afee2297ac2715092917670f Mon Sep 17 00:00:00 2001 From: Gabriel Landau <42078554+gabriellandau@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:25:43 -0400 Subject: [PATCH 33/52] [Defend] Identify and exclude 24H2+ hotpatch extension pages from stomp detection (#192490) ## Release Note Defend 8.15.2 will improve support for [Windows call stack module stomp detection](https://www.elastic.co/security-labs/upping-the-ante-detecting-in-memory-threats-with-kernel-call-stacks) in Windows 11 24H2. ## Description Windows 11 24H2 adds hotpatch support, a great feature that enables the installation of many security updates without a system reboot. To implement hotpatching, Microsoft is changing the layout of executable images in memory, appending new "extension pages" to the end of every hotpatchable mapped image in memory. These pages are `PAGE_EXECUTE_READ`. ![image](https://github.com/user-attachments/assets/41bb960e-21ff-4c63-a250-81e303506ad8) Microsoft describes the change in some detail [here](https://techcommunity.microsoft.com/t5/windows-os-platform-blog/hotpatching-on-windows/ba-p/2959541). Here's a [third-party analysis of the change](https://ynwarcs.github.io/Win11-24H2-CFG) showing how it breaks x64debug. ![image](https://github.com/user-attachments/assets/3bea1aa5-8c5a-4c27-bf74-9e92833cdc7a) Unfortunately, this change affects our module stomp detection feature, which views these executable pages as patched/stomped. We are fixing this in 8.15.2. This PR lets users opt out of the change, reverting to the old behavior. ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../pages/policy/models/advanced_policy_schema.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts b/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts index 7b2adc6e5b36f..5cefd39ace739 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts @@ -1296,6 +1296,17 @@ export const AdvancedPolicySchema: AdvancedPolicySchemaType[] = [ } ), }, + { + key: 'windows.advanced.events.callstacks.exclude_hotpatch_extension_pages', + first_supported_version: '8.15.2', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.windows.advanced.events.callstacks.exclude_hotpatch_extension_pages', + { + defaultMessage: + 'Exclude Windows 11 24H2 hotpatch extension pages, which resemble injected code, from callstack module stomp scanning. Default: true', + } + ), + }, { key: 'windows.advanced.events.process_ancestry_length', first_supported_version: '8.15', From c4b7a82e3192153f0202afdc60c36ea2f9836604 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Wed, 11 Sep 2024 13:03:57 -0700 Subject: [PATCH 34/52] [UII] Update package spec min version to 3.0 for serverless projects (#184792) ## Summary Resolves https://github.com/elastic/kibana/issues/182827 As the title says :) This also corrects `spec.max` to `3.1`, which it should have been all along. Integrations available for Observability projects after change: [Click here](https://github.com/elastic/kibana/assets/1965714/b9592e60-0bda-4597-b7fc-0e7ee5a673da) Integrations available for Security projects after change: [Click here](https://github.com/elastic/kibana/assets/1965714/f74142ae-88d8-4445-96f7-413c12a1434b) --- config/serverless.oblt.yml | 5 ++--- config/serverless.security.yml | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/config/serverless.oblt.yml b/config/serverless.oblt.yml index 3cee8b352756e..fc1f4745f85ce 100644 --- a/config/serverless.oblt.yml +++ b/config/serverless.oblt.yml @@ -143,10 +143,9 @@ xpack.uptime.service.tls.key: /mnt/elastic-internal/http-certs/tls.key # Fleet specific configuration xpack.fleet.internal.registry.capabilities: ['apm', 'observability', 'uptime'] +xpack.fleet.internal.registry.spec.min: '3.0' +xpack.fleet.internal.registry.spec.max: '3.1' xpack.fleet.internal.registry.kibanaVersionCheckEnabled: false -xpack.fleet.internal.registry.spec.max: '3.0' -# Temporary until all packages implement new spec https://github.com/elastic/kibana/issues/166742 -xpack.fleet.internal.registry.spec.min: '1.0' xpack.fleet.internal.registry.excludePackages: [ # Security integrations 'endpoint', diff --git a/config/serverless.security.yml b/config/serverless.security.yml index 6f39182d1e2e6..f633d10afc519 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -75,10 +75,9 @@ telemetry.labels.serverless: security # Fleet specific configuration xpack.fleet.internal.registry.capabilities: ['security'] -xpack.fleet.internal.registry.spec.max: '3.0' +xpack.fleet.internal.registry.spec.min: '3.0' +xpack.fleet.internal.registry.spec.max: '3.1' xpack.fleet.internal.registry.kibanaVersionCheckEnabled: false -# Temporary until all packages implement new spec https://github.com/elastic/kibana/issues/166742 -xpack.fleet.internal.registry.spec.min: '1.0' xpack.fleet.internal.registry.excludePackages: [ # Oblt integrations 'apm', From 6d0970bc7506e24b55e99443f044f1e8d6c7793b Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Wed, 11 Sep 2024 16:11:22 -0400 Subject: [PATCH 35/52] feat(rca): update status and add tags (#192518) --- .../src/rest_specs/create.ts | 1 + .../src/rest_specs/index.ts | 2 + .../src/rest_specs/update.ts | 4 +- .../src/schema/investigation.ts | 13 +++- .../fields/status_field.tsx | 40 ++++++++-- .../fields/tags_field.tsx | 74 +++++++++++++++++++ .../investigation_edit_form.tsx | 25 ++++--- .../investigation_not_found.tsx | 8 +- .../investigation_status_badge.tsx | 19 +++++ .../public/hooks/query_key_factory.ts | 22 +++--- .../hooks/use_add_investigation_item.ts | 21 +++++- .../hooks/use_add_investigation_note.ts | 21 +++++- .../public/hooks/use_breakpoints.ts | 47 ------------ .../public/hooks/use_create_investigation.tsx | 26 ++++++- .../public/hooks/use_delete_investigation.ts | 6 +- .../hooks/use_delete_investigation_item.ts | 21 +++++- .../hooks/use_delete_investigation_note.ts | 21 +++++- .../public/hooks/use_fetch_investigation.ts | 8 +- .../hooks/use_fetch_investigation_items.ts | 16 ++-- .../hooks/use_fetch_investigation_list.ts | 14 ++-- .../hooks/use_fetch_investigation_notes.ts | 17 ++--- .../public/hooks/use_local_storage.ts | 50 ------------- .../hooks/use_memo_with_abort_signal.ts | 25 ------- .../public/hooks/use_update_investigation.ts | 28 ++++++- .../hooks/use_update_investigation_note.ts | 30 ++++++-- .../list/components/investigation_list.tsx | 53 +++++++------ .../components/investigation_list_actions.tsx | 32 +++++++- .../server/models/investigation.ts | 3 +- .../server/services/create_investigation.ts | 10 +-- .../server/services/find_investigations.ts | 5 +- .../investigate_app/tsconfig.json | 1 - .../components/header_actions.tsx | 1 + 32 files changed, 416 insertions(+), 248 deletions(-) create mode 100644 x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/tags_field.tsx create mode 100644 x-pack/plugins/observability_solution/investigate_app/public/components/investigation_status_badge/investigation_status_badge.tsx delete mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_breakpoints.ts delete mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_local_storage.ts delete mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_memo_with_abort_signal.ts diff --git a/packages/kbn-investigation-shared/src/rest_specs/create.ts b/packages/kbn-investigation-shared/src/rest_specs/create.ts index 35a76b8b08b85..fe07293925655 100644 --- a/packages/kbn-investigation-shared/src/rest_specs/create.ts +++ b/packages/kbn-investigation-shared/src/rest_specs/create.ts @@ -19,6 +19,7 @@ const createInvestigationParamsSchema = t.type({ timeRange: t.type({ from: t.number, to: t.number }), }), origin: t.union([alertOriginSchema, blankOriginSchema]), + tags: t.array(t.string), }), }); diff --git a/packages/kbn-investigation-shared/src/rest_specs/index.ts b/packages/kbn-investigation-shared/src/rest_specs/index.ts index ef45aca9c1dcf..eb30920430673 100644 --- a/packages/kbn-investigation-shared/src/rest_specs/index.ts +++ b/packages/kbn-investigation-shared/src/rest_specs/index.ts @@ -17,6 +17,7 @@ export type * from './find'; export type * from './get'; export type * from './get_items'; export type * from './get_notes'; +export type * from './investigation'; export type * from './investigation_item'; export type * from './investigation_note'; export type * from './update'; @@ -33,6 +34,7 @@ export * from './find'; export * from './get'; export * from './get_items'; export * from './get_notes'; +export * from './investigation'; export * from './investigation_item'; export * from './investigation_note'; export * from './update'; diff --git a/packages/kbn-investigation-shared/src/rest_specs/update.ts b/packages/kbn-investigation-shared/src/rest_specs/update.ts index 2a655a09a0d79..b3f8f15707cd3 100644 --- a/packages/kbn-investigation-shared/src/rest_specs/update.ts +++ b/packages/kbn-investigation-shared/src/rest_specs/update.ts @@ -9,6 +9,7 @@ import * as t from 'io-ts'; import { investigationResponseSchema } from './investigation'; +import { statusSchema } from '../schema'; const updateInvestigationParamsSchema = t.type({ path: t.type({ @@ -16,10 +17,11 @@ const updateInvestigationParamsSchema = t.type({ }), body: t.partial({ title: t.string, - status: t.union([t.literal('ongoing'), t.literal('closed')]), + status: statusSchema, params: t.type({ timeRange: t.type({ from: t.number, to: t.number }), }), + tags: t.array(t.string), }), }); diff --git a/packages/kbn-investigation-shared/src/schema/investigation.ts b/packages/kbn-investigation-shared/src/schema/investigation.ts index 9630666fd2c90..8da8814a68128 100644 --- a/packages/kbn-investigation-shared/src/schema/investigation.ts +++ b/packages/kbn-investigation-shared/src/schema/investigation.ts @@ -12,6 +12,14 @@ import { alertOriginSchema, blankOriginSchema } from './origin'; import { investigationNoteSchema } from './investigation_note'; import { investigationItemSchema } from './investigation_item'; +const statusSchema = t.union([ + t.literal('triage'), + t.literal('active'), + t.literal('mitigated'), + t.literal('resolved'), + t.literal('cancelled'), +]); + const investigationSchema = t.type({ id: t.string, title: t.string, @@ -21,9 +29,10 @@ const investigationSchema = t.type({ timeRange: t.type({ from: t.number, to: t.number }), }), origin: t.union([alertOriginSchema, blankOriginSchema]), - status: t.union([t.literal('ongoing'), t.literal('closed')]), + status: statusSchema, + tags: t.array(t.string), notes: t.array(investigationNoteSchema), items: t.array(investigationItemSchema), }); -export { investigationSchema }; +export { investigationSchema, statusSchema }; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/status_field.tsx b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/status_field.tsx index aa3f071b36dec..dc392aea28195 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/status_field.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/status_field.tsx @@ -5,8 +5,9 @@ * 2.0. */ -import { EuiIcon, EuiFormRow, EuiComboBox } from '@elastic/eui'; +import { EuiComboBox, EuiFormRow } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { InvestigationResponse } from '@kbn/investigation-shared'; import React from 'react'; import { Controller, useFormContext } from 'react-hook-form'; import { InvestigationForm } from '../investigation_edit_form'; @@ -16,16 +17,39 @@ const I18N_STATUS_LABEL = i18n.translate( { defaultMessage: 'Status' } ); +export const statusToColor: Record = { + triage: 'warning', + active: 'danger', + mitigated: 'success', + resolved: 'success', + cancelled: 'default', +}; + const options = [ { - label: 'Ongoing', - value: 'ongoing', - prepend: , + label: 'Triage', + value: 'triage', + color: statusToColor.triage, + }, + { + label: 'Active', + value: 'active', + color: statusToColor.active, + }, + { + label: 'Mitigated', + value: 'mitigated', + color: statusToColor.mitigated, + }, + { + label: 'Resolved', + value: 'resolved', + color: statusToColor.resolved, }, { - label: 'Closed', - value: 'closed', - prepend: , + label: 'Cancelled', + value: 'cancelled', + color: statusToColor.cancelled, }, ]; @@ -51,7 +75,7 @@ export function StatusField() { onChange={(selected) => { return field.onChange(selected[0].value); }} - singleSelection={{ asPlainText: true }} + singleSelection /> )} /> diff --git a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/tags_field.tsx b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/tags_field.tsx new file mode 100644 index 0000000000000..fb6555de53f34 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/tags_field.tsx @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFormRow, EuiComboBox } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { Controller, useFormContext } from 'react-hook-form'; +import { InvestigationForm } from '../investigation_edit_form'; + +const I18N_TAGS_LABEL = i18n.translate( + 'xpack.investigateApp.investigationEditForm.span.tagsLabel', + { defaultMessage: 'Tags' } +); + +export function TagsField() { + const { control, getFieldState } = useFormContext(); + + return ( + + ( + { + if (selected.length) { + return field.onChange(selected.map((opts) => opts.value)); + } + + field.onChange([]); + }} + onCreateOption={(searchValue: string) => { + const normalizedSearchValue = searchValue.trim().toLowerCase(); + if (!normalizedSearchValue) { + return; + } + + const values = field.value ?? []; + const tagAlreadyExists = values.find( + (tag) => tag.trim().toLowerCase() === normalizedSearchValue + ); + + if (!tagAlreadyExists) { + field.onChange([...values, searchValue]); + } + }} + /> + )} + /> + + ); +} + +function generateTagOptions(tags: string[] = []) { + return tags.map((tag) => ({ + label: tag, + value: tag, + })); +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/investigation_edit_form.tsx b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/investigation_edit_form.tsx index 5ea7486c2f612..40d845533fe0a 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/investigation_edit_form.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/investigation_edit_form.tsx @@ -20,21 +20,24 @@ import { EuiTitle, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { InvestigationResponse } from '@kbn/investigation-shared'; import { pick } from 'lodash'; import React from 'react'; import { Controller, FormProvider, useForm } from 'react-hook-form'; import { v4 as uuidv4 } from 'uuid'; +import { paths } from '../../../common/paths'; import { useCreateInvestigation } from '../../hooks/use_create_investigation'; import { useFetchInvestigation } from '../../hooks/use_fetch_investigation'; +import { useKibana } from '../../hooks/use_kibana'; import { useUpdateInvestigation } from '../../hooks/use_update_investigation'; import { InvestigationNotFound } from '../investigation_not_found/investigation_not_found'; import { StatusField } from './fields/status_field'; -import { useKibana } from '../../hooks/use_kibana'; -import { paths } from '../../../common/paths'; +import { TagsField } from './fields/tags_field'; export interface InvestigationForm { title: string; - status: 'ongoing' | 'closed'; + status: InvestigationResponse['status']; + tags: string[]; } interface Props { @@ -55,15 +58,14 @@ export function InvestigationEditForm({ investigationId, onClose }: Props) { data: investigation, isLoading, isError, - refetch, } = useFetchInvestigation({ id: investigationId }); const { mutateAsync: updateInvestigation } = useUpdateInvestigation(); const { mutateAsync: createInvestigation } = useCreateInvestigation(); const methods = useForm({ - defaultValues: { title: 'New investigation', status: 'ongoing' }, - values: investigation ? pick(investigation, ['title', 'status']) : undefined, + defaultValues: { title: 'New investigation', status: 'triage', tags: [] }, + values: investigation ? pick(investigation, ['title', 'status', 'tags']) : undefined, mode: 'all', }); @@ -79,9 +81,8 @@ export function InvestigationEditForm({ investigationId, onClose }: Props) { if (isEditing) { await updateInvestigation({ investigationId: investigationId!, - payload: { title: data.title, status: data.status }, + payload: { title: data.title, status: data.status, tags: data.tags }, }); - refetch(); onClose(); } else { const resp = await createInvestigation({ @@ -93,6 +94,7 @@ export function InvestigationEditForm({ investigationId, onClose }: Props) { to: new Date().getTime(), }, }, + tags: data.tags, origin: { type: 'blank', }, @@ -147,8 +149,13 @@ export function InvestigationEditForm({ investigationId, onClose }: Props) { />

%v; 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 Bs$Kv9 literal 28068 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 JnR}zZ{5#@Hsl)&P diff --git a/x-pack/plugins/stack_connectors/public/connector_types/thehive/constants.ts b/x-pack/plugins/stack_connectors/public/connector_types/thehive/constants.ts index b94fd5e4ad4be..6ab86cdbe7f1b 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/thehive/constants.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/thehive/constants.ts @@ -14,7 +14,7 @@ export const eventActionOptions = [ text: i18n.translate( 'xpack.stackConnectors.components.thehive.eventSelectCreateCaseOptionLabel', { - defaultMessage: 'Create Case', + defaultMessage: 'Create case', } ), }, @@ -23,7 +23,7 @@ export const eventActionOptions = [ text: i18n.translate( 'xpack.stackConnectors.components.thehive.eventSelectCreateAlertOptionLabel', { - defaultMessage: 'Create Alert', + defaultMessage: 'Create alert', } ), }, diff --git a/x-pack/plugins/stack_connectors/public/connector_types/thehive/thehive.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/thehive/thehive.test.tsx index 3a6788a8bf55d..654324d22e153 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/thehive/thehive.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/thehive/thehive.test.tsx @@ -130,7 +130,7 @@ describe('thehive createAlert action params validation', () => { 'createAlertParam.description': ['Description is required.'], 'createAlertParam.type': ['Type is required.'], 'createAlertParam.source': ['Source is required.'], - 'createAlertParam.sourceRef': ['Source Reference is required.'], + 'createAlertParam.sourceRef': ['Source reference is required.'], }, }); }); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/thehive/translations.ts b/x-pack/plugins/stack_connectors/public/connector_types/thehive/translations.ts index fa2c7b822019a..cd2c1ffcf9a63 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/thehive/translations.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/thehive/translations.ts @@ -21,35 +21,35 @@ export const ORGANISATION_LABEL = i18n.translate( export const ORGANISATION_HELP_TEXT = i18n.translate( 'xpack.stackConnectors.components.thehive.organisationFieldHelpText', { - defaultMessage: `By default, the user's default organization will be considered.`, + defaultMessage: 'By default, it uses the default organisation of the API key owner.', } ); export const API_KEY_LABEL = i18n.translate( 'xpack.stackConnectors.components.thehive.apiKeyFieldLabel', { - defaultMessage: 'API Key', + defaultMessage: 'API key', } ); export const EVENT_ACTION_LABEL = i18n.translate( 'xpack.stackConnectors.components.thehive.eventActionSelectFieldLabel', { - defaultMessage: 'Event Action', + defaultMessage: 'Event action', } ); export const TITLE_LABEL = i18n.translate( 'xpack.stackConnectors.components.thehive.titleFieldLabel', { - defaultMessage: 'Title*', + defaultMessage: 'Title', } ); export const DESCRIPTION_LABEL = i18n.translate( 'xpack.stackConnectors.components.thehive.descriptionFieldLabel', { - defaultMessage: 'Description*', + defaultMessage: 'Description', } ); @@ -84,21 +84,21 @@ export const COMMENTS_LABEL = i18n.translate( export const TYPE_LABEL = i18n.translate( 'xpack.stackConnectors.components.thehive.typeFieldLabel', { - defaultMessage: 'Type*', + defaultMessage: 'Type', } ); export const SOURCE_LABEL = i18n.translate( 'xpack.stackConnectors.components.thehive.sourceFieldLabel', { - defaultMessage: 'Source*', + defaultMessage: 'Source', } ); export const SOURCE_REF_LABEL = i18n.translate( 'xpack.stackConnectors.components.thehive.sourceRefFieldLabel', { - defaultMessage: 'Source Reference*', + defaultMessage: 'Source reference', } ); @@ -133,6 +133,6 @@ export const SOURCE_REQUIRED = i18n.translate( export const SOURCE_REF_REQUIRED = i18n.translate( 'xpack.stackConnectors.components.thehive.requiredSourceRefText', { - defaultMessage: 'Source Reference is required.', + defaultMessage: 'Source reference is required.', } ); diff --git a/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/plugin.ts b/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/plugin.ts index b62c1f2281753..90490a2ce0216 100644 --- a/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/plugin.ts +++ b/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/plugin.ts @@ -47,6 +47,7 @@ export enum ExternalServiceSimulator { TINES = 'tines', SENTINELONE = 'sentinelone', CROWDSTRIKE = 'crowdstrike', + THEHIVE = 'thehive', } export function getExternalServiceSimulatorPath(service: ExternalServiceSimulator): string { @@ -67,6 +68,7 @@ export function getAllExternalServiceSimulatorPaths(): string[] { allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.TINES}/webhook/path/secret`); allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.SENTINELONE}/web/api/v2.1/`); allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.CROWDSTRIKE}`); + allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.THEHIVE}`); return allPaths; } @@ -160,6 +162,7 @@ export class FixturePlugin implements Plugin { + simulatorUrl = kibanaServer.resolveUrl( + getExternalServiceSimulatorPath(ExternalServiceSimulator.THEHIVE) + ); + editSimulatorUrl = simulatorUrl.replace('/elastic:changeme@', '/'); + }); + + beforeEach(async () => { + await pageObjects.common.navigateToApp('connectors'); + await pageObjects.header.waitUntilLoadingHasFinished(); + }); + + it('thehive connector screenshots', async () => { + await pageObjects.common.navigateToApp('connectors'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await actions.common.openNewConnectorForm('thehive'); + await testSubjects.setValue('nameInput', 'TheHive test connector'); + await testSubjects.setValue('config.organisation-input', 'test'); + await testSubjects.setValue('config.url-input', editSimulatorUrl); + await testSubjects.setValue('secrets.apiKey-input', 'tester'); + await commonScreenshots.takeScreenshot('thehive-connector', screenshotDirectories); + await testSubjects.click('create-connector-flyout-save-test-btn'); + await toasts.dismissAll(); + await commonScreenshots.takeScreenshot('thehive-params-case-test', screenshotDirectories); + await testSubjects.setValue('eventActionSelect', 'createAlert'); + await commonScreenshots.takeScreenshot('thehive-params-alert-test', screenshotDirectories); + await testSubjects.click('euiFlyoutCloseButton'); + }); + }); +} From e01423d6e9a3402ddf7d0c0ca9c02d433dae547c Mon Sep 17 00:00:00 2001 From: christineweng <18648970+christineweng@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:00:02 -0500 Subject: [PATCH 32/52] [Security Solution][Alert Flyout] Convert rule name to rule flyout and enable rule previews (#191764) ## Summary This PR converts rule name in alert table to be a flyout (consistent with host name and user name) and enables rule preview whenever rule name is present. This PR also moved the rule details component into its own `rule_details` folder to be independent of the `document_details` flyout. Dependency: https://github.com/elastic/kibana/pull/190560 to be merged first New behavior: - Rule link in alert table opens rule flyout - Clicking the rule title goes to rule details page - Clicking rule name in alert flyout opens rule preview https://github.com/user-attachments/assets/857aa894-6253-4041-873a-18d6e8a003b6 ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- ...correlations_details_alerts_table.test.tsx | 26 +++ .../correlations_details_alerts_table.tsx | 34 +++- .../components/alert_description.test.tsx | 12 +- .../right/components/alert_description.tsx | 23 +-- .../table_field_value_cell.test.tsx | 8 + .../components/table_field_value_cell.tsx | 12 ++ .../document_details/right/tabs/table_tab.tsx | 27 ++- .../rule_overview/components/footer.test.tsx | 49 ------ .../components/rule_overview.test.tsx | 142 ---------------- .../components/rule_overview.tsx | 154 ------------------ .../components/rule_title.test.tsx | 54 ------ .../rule_overview/components/rule_title.tsx | 65 -------- .../rule_overview/components/test_ids.ts | 46 ------ .../rule_overview/context.tsx | 58 ------- .../document_details/rule_overview/index.tsx | 38 ----- .../rule_overview/mocks/mock_context.ts | 15 -- .../shared/constants/panel_keys.ts | 1 - .../security_solution/public/flyout/index.tsx | 16 +- .../hooks/use_rule_details.test.ts | 66 ++++++++ .../rule_details/hooks/use_rule_details.tsx | 56 +++++++ .../rule_details/preview/footer.test.tsx | 44 +++++ .../preview}/footer.tsx | 36 ++-- .../flyout/rule_details/preview/test_ids.ts | 15 ++ .../rule_details/right/content.test.tsx | 98 +++++++++++ .../flyout/rule_details/right/content.tsx | 145 +++++++++++++++++ .../flyout/rule_details/right/header.test.tsx | 60 +++++++ .../flyout/rule_details/right/header.tsx | 90 ++++++++++ .../flyout/rule_details/right/index.test.tsx | 104 ++++++++++++ .../flyout/rule_details/right/index.tsx | 68 ++++++++ .../flyout/rule_details/right/test_ids.ts | 40 +++++ .../shared/components/preview_link.test.tsx | 56 ++++++- .../flyout/shared/components/preview_link.tsx | 43 ++++- .../renderers/formatted_field_helpers.tsx | 35 +++- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - ...lert_details_preview_panel_rule_preview.ts | 22 +-- 37 files changed, 1054 insertions(+), 707 deletions(-) delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/footer.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_overview.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_overview.tsx delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_title.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_title.tsx delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/test_ids.ts delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/context.tsx delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/index.tsx delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/mocks/mock_context.ts create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/hooks/use_rule_details.test.ts create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/hooks/use_rule_details.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.test.tsx rename x-pack/plugins/security_solution/public/flyout/{document_details/rule_overview/components => rule_details/preview}/footer.tsx (51%) create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/preview/test_ids.ts create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/right/content.test.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/right/content.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/right/header.test.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/right/header.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/right/index.test.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/right/index.tsx create mode 100644 x-pack/plugins/security_solution/public/flyout/rule_details/right/test_ids.ts diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx index ddf05af5d3908..6fd56c3aa5195 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx @@ -17,6 +17,7 @@ import { mockContextValue } from '../../shared/mocks/mock_context'; import { DocumentDetailsPreviewPanelKey } from '../../shared/constants/panel_keys'; import { ALERT_PREVIEW_BANNER } from '../../preview/constants'; import { DocumentDetailsContext } from '../../shared/context'; +import { RulePreviewPanelKey, RULE_PREVIEW_BANNER } from '../../../rule_details/right'; jest.mock('../hooks/use_paginated_alerts'); jest.mock('../../../../common/hooks/use_experimental_features'); @@ -59,6 +60,7 @@ describe('CorrelationsDetailsAlertsTable', () => { 'kibana.alert.rule.name': ['Rule1'], 'kibana.alert.reason': ['Reason1'], 'kibana.alert.severity': ['Severity1'], + 'kibana.alert.rule.uuid': ['uuid1'], }, }, { @@ -69,6 +71,7 @@ describe('CorrelationsDetailsAlertsTable', () => { 'kibana.alert.rule.name': ['Rule2'], 'kibana.alert.reason': ['Reason2'], 'kibana.alert.severity': ['Severity2'], + 'kibana.alert.rule.uuid': ['uuid2'], }, }, ], @@ -124,4 +127,27 @@ describe('CorrelationsDetailsAlertsTable', () => { }, }); }); + + it('opens rule preview when feature flag is on and isPreview is false', () => { + mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); + const { getAllByTestId } = renderCorrelationsTable(mockContextValue); + + expect(getAllByTestId(`${TEST_ID}RulePreview`).length).toBe(2); + + getAllByTestId(`${TEST_ID}RulePreview`)[0].click(); + expect(mockFlyoutApi.openPreviewPanel).toHaveBeenCalledWith({ + id: RulePreviewPanelKey, + params: { + ruleId: 'uuid1', + banner: RULE_PREVIEW_BANNER, + isPreviewMode: true, + }, + }); + }); + + it('does not render preview link when feature flag is on and isPreview is true', () => { + mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); + const { queryByTestId } = renderCorrelationsTable({ ...mockContextValue, isPreview: true }); + expect(queryByTestId(`${TEST_ID}RulePreview`)).not.toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx index ea16fcfa80e93..20663b56dab39 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx @@ -24,6 +24,8 @@ import { InvestigateInTimelineButton } from '../../../../common/components/event import { ACTION_INVESTIGATE_IN_TIMELINE } from '../../../../detections/components/alerts_table/translations'; import { getDataProvider } from '../../../../common/components/event_details/use_action_cell_data_provider'; import { AlertPreviewButton } from '../../../shared/components/alert_preview_button'; +import { PreviewLink } from '../../../shared/components/preview_link'; +import { useDocumentDetailsContext } from '../../shared/context'; export const TIMESTAMP_DATE_FORMAT = 'MMM D, YYYY @ HH:mm:ss.SSS'; const dataProviderLimit = 5; @@ -82,6 +84,8 @@ export const CorrelationsDetailsAlertsTable: FC>) => { if (page) { @@ -160,7 +164,6 @@ export const CorrelationsDetailsAlertsTable: FC ), truncateText: true, - render: (value: string) => ( - - {value} - - ), + render: (row: Record) => { + const ruleName = row[ALERT_RULE_NAME] as string; + const ruleId = row['kibana.alert.rule.uuid'] as string; + return ( + + {isPreviewEnabled ? ( + + {ruleName} + + ) : ( + {ruleName} + )} + + ); + }, }, { field: ALERT_REASON, @@ -209,7 +229,7 @@ export const CorrelationsDetailsAlertsTable: FC { @@ -150,13 +150,11 @@ describe('', () => { getByTestId(RULE_SUMMARY_BUTTON_TEST_ID).click(); expect(flyoutContextValue.openPreviewPanel).toHaveBeenCalledWith({ - id: DocumentDetailsRuleOverviewPanelKey, + id: RulePreviewPanelKey, params: { - id: panelContext.eventId, - indexName: panelContext.indexName, - scopeId: panelContext.scopeId, - banner: RULE_OVERVIEW_BANNER, + banner: RULE_PREVIEW_BANNER, ruleId: ruleUuid.values[0], + isPreviewMode: true, }, }); }); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_description.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_description.tsx index ca01ac08d66a5..2d2dfddbbbabe 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_description.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_description.tsx @@ -21,43 +21,32 @@ import { ALERT_DESCRIPTION_TITLE_TEST_ID, RULE_SUMMARY_BUTTON_TEST_ID, } from './test_ids'; -import { DocumentDetailsRuleOverviewPanelKey } from '../../shared/constants/panel_keys'; - -export const RULE_OVERVIEW_BANNER = { - title: i18n.translate('xpack.securitySolution.flyout.right.about.description.rulePreviewTitle', { - defaultMessage: 'Preview rule details', - }), - backgroundColor: 'warning', - textColor: 'warning', -}; +import { RULE_PREVIEW_BANNER, RulePreviewPanelKey } from '../../../rule_details/right'; /** * Displays the rule description of a signal document. */ export const AlertDescription: FC = () => { const { telemetry } = useKibana().services; - const { dataFormattedForFieldBrowser, scopeId, eventId, indexName, isPreview } = - useDocumentDetailsContext(); + const { dataFormattedForFieldBrowser, scopeId, isPreview } = useDocumentDetailsContext(); const { isAlert, ruleDescription, ruleName, ruleId } = useBasicDataFromDetailsData( dataFormattedForFieldBrowser ); const { openPreviewPanel } = useExpandableFlyoutApi(); const openRulePreview = useCallback(() => { openPreviewPanel({ - id: DocumentDetailsRuleOverviewPanelKey, + id: RulePreviewPanelKey, params: { - id: eventId, - indexName, - scopeId, - banner: RULE_OVERVIEW_BANNER, ruleId, + banner: RULE_PREVIEW_BANNER, + isPreviewMode: true, }, }); telemetry.reportDetailsFlyoutOpened({ location: scopeId, panel: 'preview', }); - }, [eventId, openPreviewPanel, indexName, scopeId, ruleId, telemetry]); + }, [openPreviewPanel, scopeId, ruleId, telemetry]); const viewRule = useMemo( () => ( diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.test.tsx index 16f72108913eb..8de7c909548b0 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.test.tsx @@ -84,6 +84,8 @@ describe('TableFieldValueCell', () => { data={hostIpData} eventId={eventId} values={hostIpValues} + ruleId="ruleId" + isPreview={false} /> @@ -106,6 +108,8 @@ describe('TableFieldValueCell', () => { eventId={eventId} fieldFromBrowserField={undefined} // <-- no metadata values={hostIpValues} + ruleId="ruleId" + isPreview={false} /> @@ -152,6 +156,8 @@ describe('TableFieldValueCell', () => { eventId={eventId} fieldFromBrowserField={messageFieldFromBrowserField} values={messageValues} + ruleId="ruleId" + isPreview={false} /> @@ -188,6 +194,8 @@ describe('TableFieldValueCell', () => { eventId={eventId} fieldFromBrowserField={hostIpFieldFromBrowserField} // <-- metadata values={hostIpValues} + ruleId="ruleId" + isPreview={false} /> diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.tsx index e72b9755f3ca9..a0095bb8eadf0 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/table_field_value_cell.tsx @@ -34,6 +34,14 @@ export interface FieldValueCellProps { * Field retrieved from the BrowserField */ fieldFromBrowserField?: Partial; + /** + * Id of the rule + */ + ruleId: string; + /** + * Whether the preview link is in rule preview + */ + isPreview: boolean; /** * Value of the link field if it exists. Allows to navigate to other pages like host, user, network... */ @@ -53,8 +61,10 @@ export const TableFieldValueCell = memo( data, eventId, fieldFromBrowserField, + ruleId, getLinkValue, values, + isPreview, }: FieldValueCellProps) => { const isPreviewEnabled = !useIsExperimentalFeatureEnabled('entityAlertPreviewDisabled'); if (values == null) { @@ -87,6 +97,8 @@ export const TableFieldValueCell = memo( field={data.field} value={value} scopeId={scopeId} + ruleId={ruleId} + isPreview={isPreview} data-test-subj={`${FLYOUT_TABLE_PREVIEW_LINK_FIELD_TEST_ID}-${i}`} /> ) : ( diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx index 9bd1cf26bc83d..e271fd2dae6cd 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx @@ -26,6 +26,7 @@ import type { EventFieldsData } from '../../../../common/components/event_detail import { CellActions } from '../../shared/components/cell_actions'; import { useDocumentDetailsContext } from '../../shared/context'; import { isInTableScope, isTimelineScope } from '../../../../helpers'; +import { useBasicDataFromDetailsData } from '../../shared/hooks/use_basic_data_from_details_data'; const COUNT_PER_PAGE_OPTIONS = [25, 50, 100]; @@ -76,13 +77,28 @@ export type ColumnsProvider = (providerOptions: { * Maintain backwards compatibility // TODO remove when possible */ scopeId: string; + /** + * Id of the rule + */ + ruleId: string; + /** + * Whether the preview link is in preview mode + */ + isPreview: boolean; /** * Value of the link field if it exists. Allows to navigate to other pages like host, user, network... */ getLinkValue: (field: string) => string | null; }) => Array>; -export const getColumns: ColumnsProvider = ({ browserFields, eventId, scopeId, getLinkValue }) => [ +export const getColumns: ColumnsProvider = ({ + browserFields, + eventId, + scopeId, + getLinkValue, + ruleId, + isPreview, +}) => [ { field: 'field', name: ( @@ -113,6 +129,8 @@ export const getColumns: ColumnsProvider = ({ browserFields, eventId, scopeId, g eventId={eventId} fieldFromBrowserField={fieldFromBrowserField} getLinkValue={getLinkValue} + ruleId={ruleId} + isPreview={isPreview} values={values} /> @@ -127,8 +145,9 @@ export const getColumns: ColumnsProvider = ({ browserFields, eventId, scopeId, g export const TableTab = memo(() => { const smallFontSize = useEuiFontSize('xs').fontSize; - const { browserFields, dataFormattedForFieldBrowser, eventId, scopeId } = + const { browserFields, dataFormattedForFieldBrowser, eventId, scopeId, isPreview } = useDocumentDetailsContext(); + const { ruleId } = useBasicDataFromDetailsData(dataFormattedForFieldBrowser); const [pagination, setPagination] = useState<{ pageIndex: number }>({ pageIndex: 0, @@ -199,8 +218,10 @@ export const TableTab = memo(() => { eventId, scopeId, getLinkValue, + ruleId, + isPreview, }), - [browserFields, eventId, scopeId, getLinkValue] + [browserFields, eventId, scopeId, getLinkValue, ruleId, isPreview] ); return ( diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/footer.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/footer.test.tsx deleted file mode 100644 index b2c9b895bc0ce..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/footer.test.tsx +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { render } from '@testing-library/react'; -import React from 'react'; -import { TestProviders } from '../../../../common/mock'; -import { mockContextValue } from '../mocks/mock_context'; -import { RuleOverviewPanelContext } from '../context'; -import { RULE_OVERVIEW_FOOTER_TEST_ID, RULE_OVERVIEW_NAVIGATE_TO_RULE_TEST_ID } from './test_ids'; -import { RuleFooter } from './footer'; -import { useRuleDetailsLink } from '../../shared/hooks/use_rule_details_link'; - -jest.mock('../../shared/hooks/use_rule_details_link'); - -const renderRulePreviewFooter = (contextValue: RuleOverviewPanelContext) => - render( - - - - - - ); - -describe('', () => { - it('renders rule details link correctly when ruleId is available', () => { - (useRuleDetailsLink as jest.Mock).mockReturnValue('rule_details_link'); - - const { getByTestId } = renderRulePreviewFooter(mockContextValue); - - expect(getByTestId(RULE_OVERVIEW_FOOTER_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_NAVIGATE_TO_RULE_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_NAVIGATE_TO_RULE_TEST_ID)).toHaveTextContent( - 'Show full rule details' - ); - }); - - it('should not render rule details link when ruleId is not available', () => { - (useRuleDetailsLink as jest.Mock).mockReturnValue(null); - - const { queryByTestId } = renderRulePreviewFooter(mockContextValue); - - expect(queryByTestId(RULE_OVERVIEW_FOOTER_TEST_ID)).not.toBeInTheDocument(); - expect(queryByTestId(RULE_OVERVIEW_NAVIGATE_TO_RULE_TEST_ID)).not.toBeInTheDocument(); - }); -}); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_overview.test.tsx deleted file mode 100644 index f55937a9ebafa..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_overview.test.tsx +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { act, render } from '@testing-library/react'; -import { RuleOverview } from './rule_overview'; -import { RuleOverviewPanelContext } from '../context'; -import { mockContextValue } from '../mocks/mock_context'; -import { ThemeProvider } from 'styled-components'; -import { getMockTheme } from '../../../../common/lib/kibana/kibana_react.mock'; -import { TestProviders } from '../../../../common/mock'; -import { TestProvider } from '@kbn/expandable-flyout/src/test/provider'; -import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; -import { getStepsData } from '../../../../detections/pages/detection_engine/rules/helpers'; -import { - mockAboutStepRule, - mockDefineStepRule, - mockScheduleStepRule, -} from '../../../../detection_engine/rule_management_ui/components/rules_table/__mocks__/mock'; -import { useGetSavedQuery } from '../../../../detections/pages/detection_engine/rules/use_get_saved_query'; -import { - RULE_OVERVIEW_BODY_TEST_ID, - RULE_OVERVIEW_ABOUT_HEADER_TEST_ID, - RULE_OVERVIEW_ABOUT_CONTENT_TEST_ID, - RULE_OVERVIEW_DEFINITION_HEADER_TEST_ID, - RULE_OVERVIEW_DEFINITION_CONTENT_TEST_ID, - RULE_OVERVIEW_SCHEDULE_HEADER_TEST_ID, - RULE_OVERVIEW_SCHEDULE_CONTENT_TEST_ID, - RULE_OVERVIEW_ACTIONS_HEADER_TEST_ID, - RULE_OVERVIEW_ACTIONS_CONTENT_TEST_ID, - RULE_OVERVIEW_LOADING_TEST_ID, -} from './test_ids'; - -jest.mock('../../../../common/lib/kibana'); - -const mockUseRuleWithFallback = useRuleWithFallback as jest.Mock; -jest.mock('../../../../detection_engine/rule_management/logic/use_rule_with_fallback'); - -const mockGetStepsData = getStepsData as jest.Mock; -jest.mock('../../../../detections/pages/detection_engine/rules/helpers'); - -const mockUseGetSavedQuery = useGetSavedQuery as jest.Mock; -jest.mock('../../../../detections/pages/detection_engine/rules/use_get_saved_query'); - -const mockTheme = getMockTheme({ eui: { euiColorMediumShade: '#ece' } }); - -const contextValue = { - ...mockContextValue, - ruleId: 'rule id', -}; - -const renderRulePreview = () => - render( - - - - - - - - - - ); - -const NO_DATA_MESSAGE = 'There was an error displaying data.'; - -describe('', () => { - afterEach(() => { - jest.clearAllMocks(); - mockUseGetSavedQuery.mockReturnValue({ isSavedQueryLoading: false, savedQueryBar: null }); - }); - - it('should render rule preview and its sub sections', async () => { - mockUseRuleWithFallback.mockReturnValue({ - rule: { name: 'rule name', description: 'rule description' }, - }); - mockGetStepsData.mockReturnValue({ - aboutRuleData: mockAboutStepRule(), - defineRuleData: mockDefineStepRule(), - scheduleRuleData: mockScheduleStepRule(), - ruleActionsData: { actions: ['action'] }, - }); - - const { getByTestId } = renderRulePreview(); - - await act(async () => { - expect(getByTestId(RULE_OVERVIEW_BODY_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_ABOUT_HEADER_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_ABOUT_HEADER_TEST_ID)).toHaveTextContent('About'); - expect(getByTestId(RULE_OVERVIEW_ABOUT_CONTENT_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_DEFINITION_HEADER_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_DEFINITION_HEADER_TEST_ID)).toHaveTextContent('Definition'); - expect(getByTestId(RULE_OVERVIEW_DEFINITION_CONTENT_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_SCHEDULE_HEADER_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_SCHEDULE_HEADER_TEST_ID)).toHaveTextContent('Schedule'); - expect(getByTestId(RULE_OVERVIEW_SCHEDULE_CONTENT_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_ACTIONS_HEADER_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_ACTIONS_HEADER_TEST_ID)).toHaveTextContent('Actions'); - expect(getByTestId(RULE_OVERVIEW_ACTIONS_CONTENT_TEST_ID)).toBeInTheDocument(); - }); - }); - - it('should not render actions if action is not available', async () => { - mockUseRuleWithFallback.mockReturnValue({ - rule: { name: 'rule name', description: 'rule description' }, - }); - mockGetStepsData.mockReturnValue({ - aboutRuleData: mockAboutStepRule(), - defineRuleData: mockDefineStepRule(), - scheduleRuleData: mockScheduleStepRule(), - }); - const { queryByTestId } = renderRulePreview(); - - await act(async () => { - expect(queryByTestId(RULE_OVERVIEW_ACTIONS_HEADER_TEST_ID)).not.toBeInTheDocument(); - expect(queryByTestId(RULE_OVERVIEW_ACTIONS_CONTENT_TEST_ID)).not.toBeInTheDocument(); - }); - }); - - it('should render loading spinner when rule is loading', async () => { - mockUseRuleWithFallback.mockReturnValue({ loading: true, rule: null }); - mockGetStepsData.mockReturnValue({}); - const { getByTestId } = renderRulePreview(); - await act(async () => { - expect(getByTestId(RULE_OVERVIEW_LOADING_TEST_ID)).toBeInTheDocument(); - }); - }); - - it('should not render rule preview when rule is null', async () => { - mockUseRuleWithFallback.mockReturnValue({}); - mockGetStepsData.mockReturnValue({}); - const { queryByTestId, getByText } = renderRulePreview(); - await act(async () => { - expect(queryByTestId(RULE_OVERVIEW_BODY_TEST_ID)).not.toBeInTheDocument(); - expect(getByText(NO_DATA_MESSAGE)).toBeInTheDocument(); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_overview.tsx deleted file mode 100644 index 2e61501241899..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_overview.tsx +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React, { memo, useState, useEffect } from 'react'; -import { EuiText, EuiHorizontalRule, EuiSpacer, EuiPanel } from '@elastic/eui'; -import { css } from '@emotion/css'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { FlyoutLoading, FlyoutError } from '@kbn/security-solution-common'; -import { useRuleOverviewPanelContext } from '../context'; -import { ExpandableSection } from '../../right/components/expandable_section'; -import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; -import { getStepsData } from '../../../../detections/pages/detection_engine/rules/helpers'; -import { RuleTitle } from './rule_title'; -import { RuleAboutSection } from '../../../../detection_engine/rule_management/components/rule_details/rule_about_section'; -import { RuleScheduleSection } from '../../../../detection_engine/rule_management/components/rule_details/rule_schedule_section'; -import { RuleDefinitionSection } from '../../../../detection_engine/rule_management/components/rule_details/rule_definition_section'; -import { StepRuleActionsReadOnly } from '../../../../detection_engine/rule_creation/components/step_rule_actions'; -import { - RULE_OVERVIEW_BODY_TEST_ID, - RULE_OVERVIEW_ABOUT_TEST_ID, - RULE_OVERVIEW_DEFINITION_TEST_ID, - RULE_OVERVIEW_SCHEDULE_TEST_ID, - RULE_OVERVIEW_ACTIONS_TEST_ID, - RULE_OVERVIEW_LOADING_TEST_ID, -} from './test_ids'; -import type { RuleResponse } from '../../../../../common/api/detection_engine'; - -const panelViewStyle = css` - dt { - font-size: 90% !important; - } - text-overflow: ellipsis; - .euiFlexGroup { - flex-wrap: inherit; - } - - .euiFlexItem { - inline-size: inherit; - flex-basis: inherit; - } -`; - -/** - * Rule summary on a preview panel on top of the right section of expandable flyout - */ -export const RuleOverview = memo(() => { - const { ruleId } = useRuleOverviewPanelContext(); - const [rule, setRule] = useState(null); - const { - rule: maybeRule, - loading: ruleLoading, - isExistingRule, - } = useRuleWithFallback(ruleId ?? ''); - - // persist rule until refresh is complete - useEffect(() => { - if (maybeRule != null) { - setRule(maybeRule); - } - }, [maybeRule]); - - const { ruleActionsData } = - rule != null ? getStepsData({ rule, detailsView: true }) : { ruleActionsData: null }; - - const hasNotificationActions = Boolean(ruleActionsData?.actions?.length); - const hasResponseActions = Boolean(ruleActionsData?.responseActions?.length); - const hasActions = ruleActionsData != null && (hasNotificationActions || hasResponseActions); - - return ruleLoading ? ( - - ) : rule ? ( - - - - - - } - expanded - data-test-subj={RULE_OVERVIEW_ABOUT_TEST_ID} - > - {rule.description} - - - - - - } - expanded={false} - data-test-subj={RULE_OVERVIEW_DEFINITION_TEST_ID} - > - - - - - } - expanded={false} - data-test-subj={RULE_OVERVIEW_SCHEDULE_TEST_ID} - > - - - - {hasActions && ( - - } - expanded={false} - data-test-subj={RULE_OVERVIEW_ACTIONS_TEST_ID} - > - - - )} - - ) : ( - - - - ); -}); - -RuleOverview.displayName = 'RuleOverview'; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_title.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_title.test.tsx deleted file mode 100644 index 9de5d568572e3..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_title.test.tsx +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import type { RuleTitleProps } from './rule_title'; -import { RuleTitle } from './rule_title'; -import { TestProvider as ExpandableFlyoutTestProvider } from '@kbn/expandable-flyout/src/test/provider'; -import { TestProviders } from '../../../../common/mock'; -import type { Rule } from '../../../../detection_engine/rule_management/logic'; -import { - RULE_OVERVIEW_TITLE_TEST_ID, - RULE_OVERVIEW_RULE_CREATED_BY_TEST_ID, - RULE_OVERVIEW_RULE_UPDATED_BY_TEST_ID, - RULE_OVERVIEW_RULE_TITLE_SUPPRESSED_TEST_ID, -} from './test_ids'; - -const defaultProps = { - rule: { id: 'id' } as Rule, - isSuppressed: false, -}; - -const renderRuleOverviewTitle = (props: RuleTitleProps) => - render( - - - - - - ); - -describe('', () => { - it('should render title and its components', () => { - const { getByTestId, queryByTestId } = renderRuleOverviewTitle(defaultProps); - - expect(getByTestId(RULE_OVERVIEW_TITLE_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_RULE_CREATED_BY_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(RULE_OVERVIEW_RULE_UPDATED_BY_TEST_ID)).toBeInTheDocument(); - expect(queryByTestId(RULE_OVERVIEW_RULE_TITLE_SUPPRESSED_TEST_ID)).not.toBeInTheDocument(); - }); - - it('should render deleted rule badge', () => { - const props = { - ...defaultProps, - isSuppressed: true, - }; - const { getByTestId } = renderRuleOverviewTitle(props); - expect(getByTestId(RULE_OVERVIEW_RULE_TITLE_SUPPRESSED_TEST_ID)).toBeInTheDocument(); - }); -}); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_title.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_title.tsx deleted file mode 100644 index 780c8b15f7730..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/document_details/rule_overview/components/rule_title.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { EuiTitle, EuiText, EuiSpacer, EuiFlexGroup, EuiFlexItem, EuiBadge } from '@elastic/eui'; -import { DELETED_RULE } from '../../../../detection_engine/rule_details_ui/pages/rule_details/translations'; -import { CreatedBy, UpdatedBy } from '../../../../detections/components/rules/rule_info'; -import { - RULE_OVERVIEW_TITLE_TEST_ID, - RULE_OVERVIEW_RULE_CREATED_BY_TEST_ID, - RULE_OVERVIEW_RULE_UPDATED_BY_TEST_ID, - RULE_OVERVIEW_RULE_TITLE_SUPPRESSED_TEST_ID, -} from './test_ids'; -import type { RuleResponse } from '../../../../../common/api/detection_engine'; - -export interface RuleTitleProps { - /** - * Rule object that represents relevant information about a rule - */ - rule: RuleResponse; - /** - * Flag to indicate if rule is suppressed - */ - isSuppressed: boolean; -} - -/** - * Title component that shows basic information of a rule. This is displayed above rule overview body - */ -export const RuleTitle: React.FC = ({ rule, isSuppressed }) => { - return ( -

+ {isEditing && ( + + + + )} - + diff --git a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_not_found/investigation_not_found.tsx b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_not_found/investigation_not_found.tsx index 3c3f6fc1c400d..983a9c473796a 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_not_found/investigation_not_found.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_not_found/investigation_not_found.tsx @@ -16,16 +16,16 @@ export function InvestigationNotFound() { color="danger" title={

- {i18n.translate('xpack.investigateApp.investigationEditForm.h2.unableToLoadTheLabel', { - defaultMessage: 'Unable to load the investigation form', + {i18n.translate('xpack.investigateApp.InvestigationNotFound.title', { + defaultMessage: 'Unable to load the investigation', })}

} body={

- {i18n.translate('xpack.investigateApp.investigationEditForm.p.thereWasAnErrorLabel', { + {i18n.translate('xpack.investigateApp.InvestigationNotFound.body', { defaultMessage: - 'There was an error loading the Investigation. Contact your administrator for help.', + 'There was an error loading the investigation. Contact your administrator for help.', })}

} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_status_badge/investigation_status_badge.tsx b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_status_badge/investigation_status_badge.tsx new file mode 100644 index 0000000000000..ece4757a4a1a5 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_status_badge/investigation_status_badge.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiBadge } from '@elastic/eui'; +import { InvestigationResponse } from '@kbn/investigation-shared'; +import React from 'react'; +import { statusToColor } from '../investigation_edit_form/fields/status_field'; + +interface Props { + status: InvestigationResponse['status']; +} + +export function InvestigationStatusBadge({ status }: Props) { + return {status}; +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts index b27044ac5acbf..253c38a972fbc 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts @@ -5,17 +5,19 @@ * 2.0. */ +'investigations,list,{page:1,perPage:25}'; + export const investigationKeys = { - all: ['investigation'] as const, - list: (params?: { page: number; perPage: number }) => - [...investigationKeys.all, 'list', ...(params ? [params] : [])] as const, - fetch: (params: { id: string }) => [...investigationKeys.all, 'fetch', params] as const, - notes: ['investigation', 'notes'] as const, - fetchNotes: (params: { investigationId: string }) => - [...investigationKeys.notes, 'fetch', params] as const, - items: ['investigation', 'items'] as const, - fetchItems: (params: { investigationId: string }) => - [...investigationKeys.items, 'fetch', params] as const, + all: ['investigations'] as const, + lists: () => [...investigationKeys.all, 'list'] as const, + list: (params: { page: number; perPage: number }) => + [...investigationKeys.lists(), params] as const, + details: () => [...investigationKeys.all, 'detail'] as const, + detail: (investigationId: string) => [...investigationKeys.details(), investigationId] as const, + detailNotes: (investigationId: string) => + [...investigationKeys.detail(investigationId), 'notes'] as const, + detailItems: (investigationId: string) => + [...investigationKeys.detail(investigationId), 'items'] as const, }; export type InvestigationKeys = typeof investigationKeys; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_item.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_item.ts index a11b5d976fe00..957b790a619af 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_item.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_item.ts @@ -6,6 +6,7 @@ */ import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; +import { i18n } from '@kbn/i18n'; import { CreateInvestigationItemParams, CreateInvestigationItemResponse, @@ -39,10 +40,26 @@ export function useAddInvestigationItem() { }, { onSuccess: (response, {}) => { - toasts.addSuccess('Item saved'); + toasts.addSuccess( + i18n.translate('xpack.investigateApp.addInvestigationItem.successMessage', { + defaultMessage: 'Item saved', + }) + ); }, onError: (error, {}, context) => { - toasts.addError(new Error(error.body?.message ?? 'An error occurred'), { title: 'Error' }); + toasts.addError( + new Error( + error.body?.message ?? + i18n.translate('xpack.investigateApp.addInvestigationItem.errorMessage', { + defaultMessage: 'an error occurred', + }) + ), + { + title: i18n.translate('xpack.investigateApp.addInvestigationItem.errorTitle', { + defaultMessage: 'Error', + }), + } + ); }, } ); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_note.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_note.ts index 1797174a6f4fa..3f349238c73f5 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_note.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_note.ts @@ -6,6 +6,7 @@ */ import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; +import { i18n } from '@kbn/i18n'; import { CreateInvestigationNoteParams, CreateInvestigationNoteResponse, @@ -39,10 +40,26 @@ export function useAddInvestigationNote() { }, { onSuccess: (response, {}) => { - toasts.addSuccess('Note saved'); + toasts.addSuccess( + i18n.translate('xpack.investigateApp.addInvestigationNote.successMessage', { + defaultMessage: 'Note saved', + }) + ); }, onError: (error, {}, context) => { - toasts.addError(new Error(error.body?.message ?? 'An error occurred'), { title: 'Error' }); + toasts.addError( + new Error( + error.body?.message ?? + i18n.translate('xpack.investigateApp.addInvestigationNote.errorMessage', { + defaultMessage: 'an error occurred', + }) + ), + { + title: i18n.translate('xpack.investigateApp.addInvestigationNote.errorTitle', { + defaultMessage: 'Error', + }), + } + ); }, } ); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_breakpoints.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_breakpoints.ts deleted file mode 100644 index 526cc24287e33..0000000000000 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_breakpoints.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { EuiThemeBreakpoints } from '@elastic/eui'; -import { - useCurrentEuiBreakpoint, - useIsWithinMaxBreakpoint, - useIsWithinMinBreakpoint, -} from '@elastic/eui'; -import { useMemo } from 'react'; -import { Values } from '@kbn/utility-types'; - -export type Breakpoints = Record; - -export const EUI_BREAKPOINTS = { - xs: EuiThemeBreakpoints[0], - s: EuiThemeBreakpoints[1], - m: EuiThemeBreakpoints[2], - l: EuiThemeBreakpoints[3], - xl: EuiThemeBreakpoints[4], -}; - -export type EuiBreakpoint = Values; - -export function useBreakpoints() { - const isXSmall = useIsWithinMaxBreakpoint('xs'); - const isSmall = useIsWithinMaxBreakpoint('s'); - const isMedium = useIsWithinMaxBreakpoint('m'); - const isLarge = useIsWithinMaxBreakpoint('l'); - const isXl = useIsWithinMinBreakpoint('xl'); - - const currentBreakpoint = useCurrentEuiBreakpoint(); - - return useMemo(() => { - return { - isXSmall, - isSmall, - isMedium, - isLarge, - isXl, - currentBreakpoint: (currentBreakpoint ?? EUI_BREAKPOINTS.xl) as EuiBreakpoint, - }; - }, [isXSmall, isSmall, isMedium, isLarge, isXl, currentBreakpoint]); -} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_create_investigation.tsx b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_create_investigation.tsx index 31fda25640224..eb0c6d8873202 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_create_investigation.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_create_investigation.tsx @@ -11,12 +11,15 @@ import { CreateInvestigationResponse, FindInvestigationsResponse, } from '@kbn/investigation-shared'; -import { QueryKey, useMutation } from '@tanstack/react-query'; +import { QueryKey, useMutation, useQueryClient } from '@tanstack/react-query'; +import { i18n } from '@kbn/i18n'; import { useKibana } from './use_kibana'; +import { investigationKeys } from './query_key_factory'; type ServerError = IHttpFetchError; export function useCreateInvestigation() { + const queryClient = useQueryClient(); const { core: { http, @@ -41,10 +44,27 @@ export function useCreateInvestigation() { { onSuccess: (response, investigation, context) => { - toasts.addSuccess('Investigation created'); + toasts.addSuccess( + i18n.translate('xpack.investigateApp.useCreateInvestigation.successMessage', { + defaultMessage: 'Investigation created', + }) + ); + queryClient.invalidateQueries({ queryKey: investigationKeys.lists() }); }, onError: (error, investigation, context) => { - toasts.addError(new Error(error.body?.message ?? 'An error occurred'), { title: 'Error' }); + toasts.addError( + new Error( + error.body?.message ?? + i18n.translate('xpack.investigateApp.useCreateInvestigation.errorMessage', { + defaultMessage: 'an error occurred', + }) + ), + { + title: i18n.translate('xpack.investigateApp.useCreateInvestigation.errorTitle', { + defaultMessage: 'Error', + }), + } + ); }, } ); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation.ts index 3c8dbe7712c22..6995361f35878 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation.ts @@ -35,11 +35,7 @@ export function useDeleteInvestigation() { defaultMessage: 'Investigation deleted successfully', }) ); - queryClient.invalidateQueries({ - queryKey: investigationKeys.list(), - exact: false, - refetchType: 'all', - }); + queryClient.invalidateQueries({ queryKey: investigationKeys.all }); }, onError: (error, {}, context) => { toasts.addError( diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation_item.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation_item.ts index 41c19013e6b2d..a46336b9c80d5 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation_item.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation_item.ts @@ -7,6 +7,7 @@ import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; import { useMutation } from '@tanstack/react-query'; +import { i18n } from '@kbn/i18n'; import { useKibana } from './use_kibana'; type ServerError = IHttpFetchError; @@ -34,10 +35,26 @@ export function useDeleteInvestigationItem() { }, { onSuccess: (response, {}) => { - toasts.addSuccess('Item deleted'); + toasts.addSuccess( + i18n.translate('xpack.investigateApp.useDeleteInvestigationItem.successMessage', { + defaultMessage: 'Item deleted', + }) + ); }, onError: (error, {}, context) => { - toasts.addError(new Error(error.body?.message ?? 'An error occurred'), { title: 'Error' }); + toasts.addError( + new Error( + error.body?.message ?? + i18n.translate('xpack.investigateApp.useDeleteInvestigationItem.errorMessage', { + defaultMessage: 'an error occurred', + }) + ), + { + title: i18n.translate('xpack.investigateApp.useDeleteInvestigationItem.errorTitle', { + defaultMessage: 'Error', + }), + } + ); }, } ); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation_note.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation_note.ts index aed3cc571ec92..8eaeea2d67b87 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation_note.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation_note.ts @@ -7,6 +7,7 @@ import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; import { useMutation } from '@tanstack/react-query'; +import { i18n } from '@kbn/i18n'; import { useKibana } from './use_kibana'; type ServerError = IHttpFetchError; @@ -34,10 +35,26 @@ export function useDeleteInvestigationNote() { }, { onSuccess: (response, {}) => { - toasts.addSuccess('Note deleted'); + toasts.addSuccess( + i18n.translate('xpack.investigateApp.useDeleteInvestigationNote.successMessage', { + defaultMessage: 'Note deleted', + }) + ); }, onError: (error, {}, context) => { - toasts.addError(new Error(error.body?.message ?? 'An error occurred'), { title: 'Error' }); + toasts.addError( + new Error( + error.body?.message ?? + i18n.translate('xpack.investigateApp.useDeleteInvestigationNote.errorMessage', { + defaultMessage: 'an error occurred', + }) + ), + { + title: i18n.translate('xpack.investigateApp.useDeleteInvestigationNote.errorTitle', { + defaultMessage: 'Error', + }), + } + ); }, } ); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation.ts index d9f2379593df4..1054a599b83f8 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation.ts @@ -12,6 +12,7 @@ import { RefetchQueryFilters, useQuery, } from '@tanstack/react-query'; +import { i18n } from '@kbn/i18n'; import { investigationKeys } from './query_key_factory'; import { useKibana } from './use_kibana'; @@ -45,7 +46,7 @@ export function useFetchInvestigation({ const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery( { - queryKey: investigationKeys.fetch({ id: id! }), + queryKey: investigationKeys.detail(id!), queryFn: async ({ signal }) => { return await http.get(`/api/observability/investigations/${id}`, { version: '2023-10-31', @@ -56,10 +57,11 @@ export function useFetchInvestigation({ initialData: initialInvestigation, refetchOnWindowFocus: false, refetchInterval: 15 * 1000, - refetchIntervalInBackground: false, onError: (error: Error) => { toasts.addError(error, { - title: 'Something went wrong while fetching Investigations', + title: i18n.translate('xpack.investigateApp.useFetchInvestigation.errorTitle', { + defaultMessage: 'Something went wrong while fetching investigation', + }), }); }, } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_items.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_items.ts index 5cc253fc6c44d..5ebdfc6dd98ef 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_items.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_items.ts @@ -5,10 +5,8 @@ * 2.0. */ -import { - GetInvestigationItemsResponse, - InvestigationItemResponse, -} from '@kbn/investigation-shared'; +import { i18n } from '@kbn/i18n'; +import { GetInvestigationItemsResponse } from '@kbn/investigation-shared'; import { QueryObserverResult, RefetchOptions, @@ -20,7 +18,6 @@ import { useKibana } from './use_kibana'; export interface Params { investigationId: string; - initialItems?: InvestigationItemResponse[]; } export interface Response { @@ -35,7 +32,7 @@ export interface Response { data: GetInvestigationItemsResponse | undefined; } -export function useFetchInvestigationItems({ investigationId, initialItems }: Params): Response { +export function useFetchInvestigationItems({ investigationId }: Params): Response { const { core: { http, @@ -45,20 +42,21 @@ export function useFetchInvestigationItems({ investigationId, initialItems }: Pa const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery( { - queryKey: investigationKeys.fetchItems({ investigationId }), + queryKey: investigationKeys.detailItems(investigationId), queryFn: async ({ signal }) => { return await http.get( `/api/observability/investigations/${investigationId}/items`, { version: '2023-10-31', signal } ); }, - initialData: initialItems, refetchOnWindowFocus: false, refetchInterval: 10 * 1000, refetchIntervalInBackground: true, onError: (error: Error) => { toasts.addError(error, { - title: 'Something went wrong while fetching investigation items', + title: i18n.translate('xpack.investigateApp.useFetchInvestigationItems.errorTitle', { + defaultMessage: 'Something went wrong while fetching investigation items', + }), }); }, } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts index db9c4264bdf3e..2423a76e06464 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts @@ -7,6 +7,7 @@ import { useQuery } from '@tanstack/react-query'; import { FindInvestigationsResponse } from '@kbn/investigation-shared'; +import { i18n } from '@kbn/i18n'; import { investigationKeys } from './query_key_factory'; import { useKibana } from './use_kibana'; @@ -52,18 +53,13 @@ export function useFetchInvestigationList({ signal, }); }, - cacheTime: 0, + refetchInterval: 60 * 1000, refetchOnWindowFocus: false, - retry: (failureCount, error) => { - if (String(error) === 'Error: Forbidden') { - return false; - } - - return failureCount < 3; - }, onError: (error: Error) => { toasts.addError(error, { - title: 'Something went wrong while fetching Investigations', + title: i18n.translate('xpack.investigateApp.useFetchInvestigationList.errorTitle', { + defaultMessage: 'Something went wrong while fetching investigations', + }), }); }, }); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_notes.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_notes.ts index 89a49ee698410..1ff798beb6e42 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_notes.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_notes.ts @@ -5,10 +5,8 @@ * 2.0. */ -import { - GetInvestigationNotesResponse, - InvestigationNoteResponse, -} from '@kbn/investigation-shared'; +import { i18n } from '@kbn/i18n'; +import { GetInvestigationNotesResponse } from '@kbn/investigation-shared'; import { QueryObserverResult, RefetchOptions, @@ -20,7 +18,6 @@ import { useKibana } from './use_kibana'; export interface Params { investigationId: string; - initialNotes?: InvestigationNoteResponse[]; } export interface Response { @@ -35,7 +32,7 @@ export interface Response { data: GetInvestigationNotesResponse | undefined; } -export function useFetchInvestigationNotes({ investigationId, initialNotes }: Params): Response { +export function useFetchInvestigationNotes({ investigationId }: Params): Response { const { core: { http, @@ -45,20 +42,20 @@ export function useFetchInvestigationNotes({ investigationId, initialNotes }: Pa const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery( { - queryKey: investigationKeys.fetchNotes({ investigationId }), + queryKey: investigationKeys.detailNotes(investigationId), queryFn: async ({ signal }) => { return await http.get( `/api/observability/investigations/${investigationId}/notes`, { version: '2023-10-31', signal } ); }, - initialData: initialNotes, refetchOnWindowFocus: false, refetchInterval: 10 * 1000, - refetchIntervalInBackground: true, onError: (error: Error) => { toasts.addError(error, { - title: 'Something went wrong while fetching investigation notes', + title: i18n.translate('xpack.investigateApp.useFetchInvestigationNotes.errorTitle', { + defaultMessage: 'Something went wrong while fetching investigation notes', + }), }); }, } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_local_storage.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_local_storage.ts deleted file mode 100644 index 8c67101337ef4..0000000000000 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_local_storage.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useEffect, useMemo, useState } from 'react'; - -function getFromStorage(keyName: string, defaultValue: T) { - const storedItem = window.localStorage.getItem(keyName); - - if (storedItem !== null) { - try { - return JSON.parse(storedItem) as T; - } catch (err) { - window.localStorage.removeItem(keyName); - // eslint-disable-next-line no-console - console.log(`Unable to decode: ${keyName}`); - } - } - return defaultValue; -} - -export function useLocalStorage(key: string, defaultValue: T | undefined) { - const [storedItem, setStoredItem] = useState(() => getFromStorage(key, defaultValue)); - - useEffect(() => { - function onStorageUpdate(e: StorageEvent) { - if (e.key === key) { - setStoredItem((prev) => getFromStorage(key, prev)); - } - } - window.addEventListener('storage', onStorageUpdate); - - return () => { - window.removeEventListener('storage', onStorageUpdate); - }; - }, [key]); - - return useMemo(() => { - return { - storedItem, - setStoredItem: (next: T) => { - window.localStorage.setItem(key, JSON.stringify(next)); - setStoredItem(() => next); - }, - }; - }, [key, storedItem]); -} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_memo_with_abort_signal.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_memo_with_abort_signal.ts deleted file mode 100644 index ec1a87246f15c..0000000000000 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_memo_with_abort_signal.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { useEffect, useMemo, useRef } from 'react'; - -export function useMemoWithAbortSignal(cb: (signal: AbortSignal) => T, deps: any[]): T { - const controllerRef = useRef(new AbortController()); - - useEffect(() => { - const controller = controllerRef.current; - return () => { - controller.abort(); - }; - }, []); - - return useMemo(() => { - controllerRef.current.abort(); - controllerRef.current = new AbortController(); - return cb(controllerRef.current.signal); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, deps); -} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_update_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_update_investigation.ts index 0661ac9b319ba..ce88a016066f2 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_update_investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_update_investigation.ts @@ -7,12 +7,15 @@ import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; import { UpdateInvestigationParams, UpdateInvestigationResponse } from '@kbn/investigation-shared'; -import { useMutation } from '@tanstack/react-query'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { i18n } from '@kbn/i18n'; import { useKibana } from './use_kibana'; +import { investigationKeys } from './query_key_factory'; type ServerError = IHttpFetchError; export function useUpdateInvestigation() { + const queryClient = useQueryClient(); const { core: { http, @@ -35,11 +38,28 @@ export function useUpdateInvestigation() { ); }, { - onSuccess: (response, {}) => { - toasts.addSuccess('Investigation updated'); + onSuccess: (response, { investigationId }) => { + toasts.addSuccess( + i18n.translate('xpack.investigateApp.useUpdateInvestigation.successMessage', { + defaultMessage: 'Investigation updated', + }) + ); + queryClient.invalidateQueries({ queryKey: investigationKeys.all }); }, onError: (error, {}, context) => { - toasts.addError(new Error(error.body?.message ?? 'An error occurred'), { title: 'Error' }); + toasts.addError( + new Error( + error.body?.message ?? + i18n.translate('xpack.investigateApp.useUpdateInvestigationNote.errorMessage', { + defaultMessage: 'an error occurred', + }) + ), + { + title: i18n.translate('xpack.investigateApp.useUpdateInvestigationNote.errorTitle', { + defaultMessage: 'Error', + }), + } + ); }, } ); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_update_investigation_note.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_update_investigation_note.ts index 312cb90ad289b..14da1ec22feef 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_update_investigation_note.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_update_investigation_note.ts @@ -7,12 +7,15 @@ import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; import { UpdateInvestigationNoteParams } from '@kbn/investigation-shared'; -import { useMutation } from '@tanstack/react-query'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { i18n } from '@kbn/i18n'; import { useKibana } from './use_kibana'; +import { investigationKeys } from './query_key_factory'; type ServerError = IHttpFetchError; export function useUpdateInvestigationNote() { + const queryClient = useQueryClient(); const { core: { http, @@ -26,7 +29,7 @@ export function useUpdateInvestigationNote() { { investigationId: string; noteId: string; note: UpdateInvestigationNoteParams }, { investigationId: string } >( - ['deleteInvestigationNote'], + ['updateInvestigationNote'], ({ investigationId, noteId, note }) => { const body = JSON.stringify(note); return http.put( @@ -35,11 +38,28 @@ export function useUpdateInvestigationNote() { ); }, { - onSuccess: (response, {}) => { - toasts.addSuccess('Note updated'); + onSuccess: (response, { investigationId }) => { + toasts.addSuccess( + i18n.translate('xpack.investigateApp.useUpdateInvestigationNote.successMessage', { + defaultMessage: 'Note updated', + }) + ); + queryClient.invalidateQueries({ queryKey: investigationKeys.detailNotes(investigationId) }); }, onError: (error, {}, context) => { - toasts.addError(new Error(error.body?.message ?? 'An error occurred'), { title: 'Error' }); + toasts.addError( + new Error( + error.body?.message ?? + i18n.translate('xpack.investigateApp.useUpdateInvestigationNote.errorMessage', { + defaultMessage: 'an error occurred', + }) + ), + { + title: i18n.translate('xpack.investigateApp.useUpdateInvestigationNote.errorTitle', { + defaultMessage: 'Error', + }), + } + ); }, } ); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list.tsx index 15b2e43def519..ec16e4244d6d1 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list.tsx @@ -4,15 +4,24 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useState } from 'react'; -import moment from 'moment'; -import { Criteria, EuiBasicTable, EuiBasicTableColumn, EuiLink, EuiBadge } from '@elastic/eui'; +import { + Criteria, + EuiBadge, + EuiBasicTable, + EuiBasicTableColumn, + EuiLink, + EuiLoadingSpinner, +} from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { InvestigationResponse } from '@kbn/investigation-shared/src/rest_specs/investigation'; -import { InvestigationListActions } from './investigation_list_actions'; +import moment from 'moment'; +import React, { useState } from 'react'; +import { paths } from '../../../../common/paths'; +import { InvestigationNotFound } from '../../../components/investigation_not_found/investigation_not_found'; +import { InvestigationStatusBadge } from '../../../components/investigation_status_badge/investigation_status_badge'; import { useFetchInvestigationList } from '../../../hooks/use_fetch_investigation_list'; import { useKibana } from '../../../hooks/use_kibana'; -import { paths } from '../../../../common/paths'; +import { InvestigationListActions } from './investigation_list_actions'; export function InvestigationList() { const [pageIndex, setPageIndex] = useState(0); @@ -31,27 +40,15 @@ export function InvestigationList() { const tz = uiSettings.get('dateFormat:tz'); if (isLoading) { - return ( -

- {i18n.translate('xpack.investigateApp.investigationList.loadingLabel', { - defaultMessage: 'Loading...', - })} -

- ); + return ; } if (isError) { - return ( -

- {i18n.translate('xpack.investigateApp.investigationList.errorLabel', { - defaultMessage: 'Error while loading investigations', - })} -

- ); + return ; } const investigations = data?.results ?? []; - const total = data?.total ?? 0; + const totalItemCount = data?.total ?? 0; const columns: Array> = [ { @@ -97,8 +94,18 @@ export function InvestigationList() { field: 'status', name: 'Status', render: (status: InvestigationResponse['status']) => { - const color = status === 'ongoing' ? 'danger' : 'success'; - return {status}; + return ; + }, + }, + { + field: 'tags', + name: 'Tags', + render: (tags: InvestigationResponse['tags']) => { + return tags.map((tag) => ( + + {tag} + + )); }, }, { @@ -112,7 +119,7 @@ export function InvestigationList() { const pagination = { pageIndex, pageSize, - totalItemCount: total || 0, + totalItemCount, pageSizeOptions: [10, 50], showPerPageOptions: true, }; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list_actions.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list_actions.tsx index b648247107cd6..95432cdbcc98d 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list_actions.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list_actions.tsx @@ -22,12 +22,14 @@ import { import { i18n } from '@kbn/i18n'; import { InvestigationResponse } from '@kbn/investigation-shared/src/rest_specs/investigation'; import { useDeleteInvestigation } from '../../../hooks/use_delete_investigation'; +import { InvestigationEditForm } from '../../../components/investigation_edit_form/investigation_edit_form'; export function InvestigationListActions({ investigation, }: { investigation: InvestigationResponse; }) { - const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); + const [isEditFormFlyoutVisible, setEditFormFlyoutVisible] = useState(false); + const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); const { mutate: deleteInvestigation, isLoading: isDeleting, @@ -45,7 +47,7 @@ export function InvestigationListActions({ const modalTitleId = useGeneratedHtmlId(); return ( - <> + {isDeleteModalVisible && ( @@ -92,6 +94,30 @@ export function InvestigationListActions({ )} + {isEditFormFlyoutVisible && investigation && ( + setEditFormFlyoutVisible(false)} + /> + )} + + setEditFormFlyoutVisible(true)} + /> + setIsDeleteModalVisible(true)} /> - + ); } diff --git a/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts index 8b826d0ed02ea..2ca587ba3a4ff 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { investigationSchema } from '@kbn/investigation-shared'; +import { investigationSchema, statusSchema } from '@kbn/investigation-shared'; import * as t from 'io-ts'; +export type InvestigationStatus = t.TypeOf; export type Investigation = t.TypeOf; export type StoredInvestigation = t.OutputOf; diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts index d6e193d54abb0..2aed0baed8923 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts @@ -8,11 +8,7 @@ import { CreateInvestigationParams, CreateInvestigationResponse } from '@kbn/investigation-shared'; import type { AuthenticatedUser } from '@kbn/core-security-common'; import { InvestigationRepository } from './investigation_repository'; - -enum InvestigationStatus { - ongoing = 'ongoing', - closed = 'closed', -} +import { Investigation } from '../models/investigation'; export async function createInvestigation( params: CreateInvestigationParams, @@ -22,11 +18,11 @@ export async function createInvestigation( throw new Error(`Investigation [id=${params.id}] already exists`); } - const investigation = { + const investigation: Investigation = { ...params, createdAt: Date.now(), createdBy: user.username, - status: InvestigationStatus.ongoing, + status: 'triage', notes: [], items: [], }; diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts index a3ea2db46d357..9ab1f73d7950e 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts @@ -11,6 +11,7 @@ import { findInvestigationsResponseSchema, } from '@kbn/investigation-shared'; import { InvestigationRepository } from './investigation_repository'; +import { InvestigationStatus } from '../models/investigation'; export async function findInvestigations( params: FindInvestigationsParams, @@ -32,7 +33,9 @@ function toPagination(params: FindInvestigationsParams) { function toFilter(params: FindInvestigationsParams) { if (params.alertId) { - return `investigation.attributes.origin.id:(${params.alertId}) AND investigation.attributes.status: ongoing`; + const activeStatus: InvestigationStatus = 'active'; + const triageStatus: InvestigationStatus = 'triage'; + return `investigation.attributes.origin.id:(${params.alertId}) AND (investigation.attributes.status: ${activeStatus} OR investigation.attributes.status: ${triageStatus})`; } return ''; } diff --git a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json index d689dd6086473..1a9b4842cc088 100644 --- a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json +++ b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json @@ -25,7 +25,6 @@ "@kbn/embeddable-plugin", "@kbn/observability-ai-assistant-plugin", "@kbn/lens-plugin", - "@kbn/utility-types", "@kbn/esql", "@kbn/esql-utils", "@kbn/data-plugin", diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx index 5d20f8830799b..dc94dab6194a0 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx @@ -178,6 +178,7 @@ export function HeaderActions({ to: new Date(paddedAlertTimeRange.to).getTime(), }, }, + tags: [], origin: { type: 'alert', id: alert.fields[ALERT_UUID], From 9b61a1ecd0fb44edc50930a0d1566f332797b0f7 Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:11:37 -0500 Subject: [PATCH 36/52] [ES|QL] Add hints upon hover for function argument types and time system types (#191881) ## Summary This PR adds hints list of acceptable functional argument types when user hovers over text or the empty space before cursor. https://github.com/user-attachments/assets/280598bb-f848-4cb8-b1e5-afd6509bab56 In addition, it also adds some helpful hints to guide towards named system params: - If argument can be a constant date, it will suggest ?t_start and ?t_end - If user hovers over ?t_start and ?t_end params, and the cursor is positioned to be at least 3 characters long (e.g. if it can guess whether the text is start or end) then it will show an explanation what the params mean. This is helpful for some pre-populated queries or snippet. image ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Stratoula Kalafateli Co-authored-by: Elastic Machine --- packages/kbn-esql-ast/src/types.ts | 15 ++ .../src/autocomplete/autocomplete.ts | 116 +----------- .../src/autocomplete/factories.ts | 14 ++ .../src/autocomplete/helper.ts | 65 ++++++- .../src/shared/esql_types.ts | 6 +- .../src/shared/helpers.ts | 72 ++++++++ .../src/esql/lib/hover/hover.test.ts | 22 ++- .../kbn-monaco/src/esql/lib/hover/hover.ts | 168 +++++++++++++++--- .../src/text_based_languages_editor.tsx | 3 + 9 files changed, 339 insertions(+), 142 deletions(-) diff --git a/packages/kbn-esql-ast/src/types.ts b/packages/kbn-esql-ast/src/types.ts index 681a93386fefd..da42ec24bd69b 100644 --- a/packages/kbn-esql-ast/src/types.ts +++ b/packages/kbn-esql-ast/src/types.ts @@ -114,6 +114,17 @@ export interface ESQLFunction< args: ESQLAstItem[]; } +const isESQLAstBaseItem = (node: unknown): node is ESQLAstBaseItem => + typeof node === 'object' && + node !== null && + Object.hasOwn(node, 'name') && + Object.hasOwn(node, 'text'); + +export const isESQLFunction = (node: unknown): node is ESQLFunction => + isESQLAstBaseItem(node) && + Object.hasOwn(node, 'type') && + (node as ESQLFunction).type === 'function'; + export interface ESQLFunctionCallExpression extends ESQLFunction<'variadic-call'> { subtype: 'variadic-call'; args: ESQLAstItem[]; @@ -293,6 +304,10 @@ export interface ESQLNamedParamLiteral extends ESQLParamLiteral<'named'> { value: string; } +export const isESQLNamedParamLiteral = (node: ESQLAstItem): node is ESQLNamedParamLiteral => + isESQLAstBaseItem(node) && + (node as ESQLNamedParamLiteral).literalType === 'param' && + (node as ESQLNamedParamLiteral).paramType === 'named'; /** * *Positional* parameter is a question mark followed by a number "?1". * diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index 89e1a71c8e36e..68f5375e55929 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -30,11 +30,9 @@ import { isAssignment, isAssignmentComplete, isColumnItem, - isComma, isFunctionItem, isIncompleteItem, isLiteralItem, - isMathFunction, isOptionItem, isRestartingExpression, isSourceCommand, @@ -47,6 +45,7 @@ import { getColumnExists, findPreviousWord, noCaseCompare, + correctQuerySyntax, getColumnByName, } from '../shared/helpers'; import { collectVariables, excludeVariablesFromCurrentCommand } from '../shared/variables'; @@ -98,11 +97,8 @@ import { getSourcesFromCommands, getSupportedTypesForBinaryOperators, isAggFunctionUsedAlready, - getCompatibleTypesToSuggestNext, removeQuoteForSuggestedSources, - getValidFunctionSignaturesForPreviousArgs, - strictlyGetParamAtPosition, - isLiteralDateItem, + getValidSignaturesAndTypesToSuggestNext, } from './helper'; import { FunctionParameter, @@ -158,76 +154,6 @@ function getFinalSuggestions({ comma }: { comma?: boolean } = { comma: true }) { return finalSuggestions; } -/** - * This function count the number of unclosed brackets in order to - * locally fix the queryString to generate a valid AST - * A known limitation of this is that is not aware of commas "," or pipes "|" - * so it is not yet helpful on a multiple commands errors (a workaround it to pass each command here...) - * @param bracketType - * @param text - * @returns - */ -function countBracketsUnclosed(bracketType: '(' | '[' | '"' | '"""', text: string) { - const stack = []; - const closingBrackets = { '(': ')', '[': ']', '"': '"', '"""': '"""' }; - for (let i = 0; i < text.length; i++) { - const substr = text.substring(i, i + bracketType.length); - if (substr === closingBrackets[bracketType] && stack.length) { - stack.pop(); - } else if (substr === bracketType) { - stack.push(bracketType); - } - } - return stack.length; -} - -/** - * This function attempts to correct the syntax of a partial query to make it valid. - * - * This is important because a syntactically-invalid query will not generate a good AST. - * - * @param _query - * @param context - * @returns - */ -function correctQuerySyntax(_query: string, context: EditorContext) { - let query = _query; - // check if all brackets are closed, otherwise close them - const unclosedRoundBrackets = countBracketsUnclosed('(', query); - const unclosedSquaredBrackets = countBracketsUnclosed('[', query); - const unclosedQuotes = countBracketsUnclosed('"', query); - const unclosedTripleQuotes = countBracketsUnclosed('"""', query); - // if it's a comma by the user or a forced trigger by a function argument suggestion - // add a marker to make the expression still valid - const charThatNeedMarkers = [',', ':']; - if ( - (context.triggerCharacter && charThatNeedMarkers.includes(context.triggerCharacter)) || - // monaco.editor.CompletionTriggerKind['Invoke'] === 0 - (context.triggerKind === 0 && unclosedRoundBrackets === 0) || - (context.triggerCharacter === ' ' && isMathFunction(query, query.length)) || - isComma(query.trimEnd()[query.trimEnd().length - 1]) - ) { - query += EDITOR_MARKER; - } - - // if there are unclosed brackets, close them - if (unclosedRoundBrackets || unclosedSquaredBrackets || unclosedQuotes) { - for (const [char, count] of [ - ['"""', unclosedTripleQuotes], - ['"', unclosedQuotes], - [')', unclosedRoundBrackets], - [']', unclosedSquaredBrackets], - ]) { - if (count) { - // inject the closing brackets - query += Array(count).fill(char).join(''); - } - } - } - - return query; -} - export async function suggest( fullText: string, offset: number, @@ -332,7 +258,7 @@ export async function suggest( return []; } -function getFieldsByTypeRetriever( +export function getFieldsByTypeRetriever( queryString: string, resourceRetriever?: ESQLCallbacks ): { getFieldsByType: GetFieldsByTypeFn; getFieldsMap: GetFieldsMapFn } { @@ -1290,18 +1216,6 @@ async function getFunctionArgsSuggestions( fields: fieldsMap, variables: anyVariables, }; - - const enrichedArgs = node.args.map((nodeArg) => { - let dataType = extractTypeFromASTArg(nodeArg, references); - - // For named system time parameters ?start and ?end, make sure it's compatiable - if (isLiteralDateItem(nodeArg)) { - dataType = 'date'; - } - - return { ...nodeArg, dataType } as ESQLAstItem & { dataType: string }; - }); - const variablesExcludingCurrentCommandOnes = excludeVariablesFromCurrentCommand( commands, command, @@ -1309,30 +1223,10 @@ async function getFunctionArgsSuggestions( innerText ); - // pick the type of the next arg - const shouldGetNextArgument = node.text.includes(EDITOR_MARKER); - let argIndex = Math.max(node.args.length, 0); - if (!shouldGetNextArgument && argIndex) { - argIndex -= 1; - } - + const { typesToSuggestNext, hasMoreMandatoryArgs, enrichedArgs, argIndex } = + getValidSignaturesAndTypesToSuggestNext(node, references, fnDefinition, fullText, offset); const arg: ESQLAstItem = enrichedArgs[argIndex]; - const validSignatures = getValidFunctionSignaturesForPreviousArgs( - fnDefinition, - enrichedArgs, - argIndex - ); - // Retrieve unique of types that are compatiable for the current arg - const typesToSuggestNext = getCompatibleTypesToSuggestNext(fnDefinition, enrichedArgs, argIndex); - const hasMoreMandatoryArgs = !validSignatures - // Types available to suggest next after this argument is completed - .map((signature) => strictlyGetParamAtPosition(signature, argIndex + 1)) - // when a param is null, it means param is optional - // If there's at least one param that is optional, then - // no need to suggest comma - .some((p) => p === null || p?.optional === true); - // Whether to prepend comma to suggestion string // E.g. if true, "fieldName" -> "fieldName, " const alreadyHasComma = fullText ? fullText[offset] === ',' : false; diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts index 3e528036dcadc..d085588c934e7 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts @@ -438,6 +438,20 @@ export function getCompatibleLiterals( return suggestions; } +export const TIME_SYSTEM_DESCRIPTIONS = { + '?t_start': i18n.translate( + 'kbn-esql-validation-autocomplete.esql.autocomplete.timeSystemParamStart', + { + defaultMessage: 'The start time from the date picker', + } + ), + '?t_end': i18n.translate( + 'kbn-esql-validation-autocomplete.esql.autocomplete.timeSystemParamEnd', + { + defaultMessage: 'The end time from the date picker', + } + ), +}; export function getDateLiterals(options?: { advanceCursorAndOpenSuggestions?: boolean; addComma?: boolean; diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts index db7ff9875e29d..deba0b045563d 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts @@ -19,6 +19,9 @@ import { import type { SuggestionRawDefinition } from './types'; import { compareTypesWithLiterals } from '../shared/esql_types'; import { TIME_SYSTEM_PARAMS } from './factories'; +import { EDITOR_MARKER } from '../shared/constants'; +import { extractTypeFromASTArg } from './autocomplete'; +import { ESQLRealField, ESQLVariable } from '../validation/types'; function extractFunctionArgs(args: ESQLAstItem[]): ESQLFunction[] { return args.flatMap((arg) => (isAssignment(arg) ? arg.args[1] : arg)).filter(isFunctionItem); @@ -212,7 +215,8 @@ export function getOverlapRange( }; } -function isValidDateString(dateString: string): boolean { +function isValidDateString(dateString: unknown): boolean { + if (typeof dateString !== 'string') return false; const timestamp = Date.parse(dateString.replace(/\"/g, '')); return !isNaN(timestamp); } @@ -229,6 +233,63 @@ export function isLiteralDateItem(nodeArg: ESQLAstItem): boolean { // If text is ?start or ?end, it's a system time parameter (TIME_SYSTEM_PARAMS.includes(nodeArg.text) || // Or if it's a string generated by date picker - isValidDateString(nodeArg.text)) + isValidDateString(nodeArg.value)) ); } + +export function getValidSignaturesAndTypesToSuggestNext( + node: ESQLFunction, + references: { fields: Map; variables: Map }, + fnDefinition: FunctionDefinition, + fullText: string, + offset: number +) { + const enrichedArgs = node.args.map((nodeArg) => { + let dataType = extractTypeFromASTArg(nodeArg, references); + + // For named system time parameters ?start and ?end, make sure it's compatiable + if (isLiteralDateItem(nodeArg)) { + dataType = 'date'; + } + + return { ...nodeArg, dataType } as ESQLAstItem & { dataType: string }; + }); + + // pick the type of the next arg + const shouldGetNextArgument = node.text.includes(EDITOR_MARKER); + let argIndex = Math.max(node.args.length, 0); + if (!shouldGetNextArgument && argIndex) { + argIndex -= 1; + } + + const validSignatures = getValidFunctionSignaturesForPreviousArgs( + fnDefinition, + enrichedArgs, + argIndex + ); + // Retrieve unique of types that are compatiable for the current arg + const typesToSuggestNext = getCompatibleTypesToSuggestNext(fnDefinition, enrichedArgs, argIndex); + const hasMoreMandatoryArgs = !validSignatures + // Types available to suggest next after this argument is completed + .map((signature) => strictlyGetParamAtPosition(signature, argIndex + 1)) + // when a param is null, it means param is optional + // If there's at least one param that is optional, then + // no need to suggest comma + .some((p) => p === null || p?.optional === true); + + // Whether to prepend comma to suggestion string + // E.g. if true, "fieldName" -> "fieldName, " + const alreadyHasComma = fullText ? fullText[offset] === ',' : false; + const shouldAddComma = + hasMoreMandatoryArgs && fnDefinition.type !== 'builtin' && !alreadyHasComma; + const currentArg = enrichedArgs[argIndex]; + return { + shouldAddComma, + typesToSuggestNext, + validSignatures, + hasMoreMandatoryArgs, + enrichedArgs, + argIndex, + currentArg, + }; +} diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts b/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts index de70d25303894..6fb9725211478 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/esql_types.ts @@ -79,8 +79,10 @@ export const compareTypesWithLiterals = ( // date_period is day/week/month/year interval // time_literal includes time_duration and date_period // So they are equivalent AST's 'timeInterval' (a date unit constant: e.g. 1 year, 15 month) - if (a === 'time_literal' || a === 'time_duration') return b === 'timeInterval'; - if (b === 'time_literal' || b === 'time_duration') return a === 'timeInterval'; + if (a === 'time_literal' || a === 'time_duration' || a === 'date_period') + return b === 'timeInterval'; + if (b === 'time_literal' || b === 'time_duration' || b === 'date_period') + return a === 'timeInterval'; if (a === 'time_literal') return b === 'time_duration'; if (b === 'time_literal') return a === 'time_duration'; diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts index 0a7a2824d7b2e..eb51bfa79227b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts @@ -48,6 +48,8 @@ import type { ESQLRealField, ESQLVariable, ReferenceMaps } from '../validation/t import { removeMarkerArgFromArgsList } from './context'; import { isNumericDecimalType } from './esql_types'; import type { ReasonTypes } from './types'; +import { EDITOR_MARKER } from './constants'; +import type { EditorContext } from '../autocomplete/types'; export function nonNullable(v: T): v is NonNullable { return v != null; @@ -662,3 +664,73 @@ export const isParam = (x: unknown): x is ESQLParamLiteral => * Compares two strings in a case-insensitive manner */ export const noCaseCompare = (a: string, b: string) => a.toLowerCase() === b.toLowerCase(); + +/** + * This function count the number of unclosed brackets in order to + * locally fix the queryString to generate a valid AST + * A known limitation of this is that is not aware of commas "," or pipes "|" + * so it is not yet helpful on a multiple commands errors (a workaround it to pass each command here...) + * @param bracketType + * @param text + * @returns + */ +export function countBracketsUnclosed(bracketType: '(' | '[' | '"' | '"""', text: string) { + const stack = []; + const closingBrackets = { '(': ')', '[': ']', '"': '"', '"""': '"""' }; + for (let i = 0; i < text.length; i++) { + const substr = text.substring(i, i + bracketType.length); + if (substr === closingBrackets[bracketType] && stack.length) { + stack.pop(); + } else if (substr === bracketType) { + stack.push(bracketType); + } + } + return stack.length; +} + +/** + * This function attempts to correct the syntax of a partial query to make it valid. + * + * This is important because a syntactically-invalid query will not generate a good AST. + * + * @param _query + * @param context + * @returns + */ +export function correctQuerySyntax(_query: string, context: EditorContext) { + let query = _query; + // check if all brackets are closed, otherwise close them + const unclosedRoundBrackets = countBracketsUnclosed('(', query); + const unclosedSquaredBrackets = countBracketsUnclosed('[', query); + const unclosedQuotes = countBracketsUnclosed('"', query); + const unclosedTripleQuotes = countBracketsUnclosed('"""', query); + // if it's a comma by the user or a forced trigger by a function argument suggestion + // add a marker to make the expression still valid + const charThatNeedMarkers = [',', ':']; + if ( + (context.triggerCharacter && charThatNeedMarkers.includes(context.triggerCharacter)) || + // monaco.editor.CompletionTriggerKind['Invoke'] === 0 + (context.triggerKind === 0 && unclosedRoundBrackets === 0) || + (context.triggerCharacter === ' ' && isMathFunction(query, query.length)) || + isComma(query.trimEnd()[query.trimEnd().length - 1]) + ) { + query += EDITOR_MARKER; + } + + // if there are unclosed brackets, close them + if (unclosedRoundBrackets || unclosedSquaredBrackets || unclosedQuotes) { + for (const [char, count] of [ + ['"""', unclosedTripleQuotes], + ['"', unclosedQuotes], + [')', unclosedRoundBrackets], + [']', unclosedSquaredBrackets], + ]) { + if (count) { + // inject the closing brackets + query += Array(count).fill(char).join(''); + } + } + } + + return query; +} diff --git a/packages/kbn-monaco/src/esql/lib/hover/hover.test.ts b/packages/kbn-monaco/src/esql/lib/hover/hover.test.ts index 9794c76886441..35a62303339d0 100644 --- a/packages/kbn-monaco/src/esql/lib/hover/hover.test.ts +++ b/packages/kbn-monaco/src/esql/lib/hover/hover.test.ts @@ -84,7 +84,11 @@ function createCustomCallbackMocks( function createModelAndPosition(text: string, string: string) { return { - model: { getValue: () => text } as monaco.editor.ITextModel, + model: { + getValue: () => text, + getLineCount: () => text.split('\n').length, + getLineMaxColumn: (lineNumber: number) => text.split('\n')[lineNumber - 1].length, + } as unknown as monaco.editor.ITextModel, // bumo the column by one as the internal logic has a -1 offset when converting frmo monaco position: { lineNumber: 1, column: text.lastIndexOf(string) + 1 } as monaco.Position, }; @@ -206,13 +210,17 @@ describe('hover', () => { 'nonExistentFn', createFunctionContent ); - testSuggestions(`from a | stats avg(round(numberField))`, 'round', createFunctionContent); + testSuggestions(`from a | stats avg(round(numberField))`, 'round', () => { + return [ + '**Acceptable types**: **double** | **integer** | **long**', + ...createFunctionContent('round'), + ]; + }); testSuggestions(`from a | stats avg(round(numberField))`, 'avg', createFunctionContent); - testSuggestions( - `from a | stats avg(nonExistentFn(numberField))`, - 'nonExistentFn', - createFunctionContent - ); + testSuggestions(`from a | stats avg(nonExistentFn(numberField))`, 'nonExistentFn', () => [ + '**Acceptable types**: **double** | **integer** | **long**', + ...createFunctionContent('nonExistentFn'), + ]); testSuggestions(`from a | where round(numberField) > 0`, 'round', createFunctionContent); }); }); diff --git a/packages/kbn-monaco/src/esql/lib/hover/hover.ts b/packages/kbn-monaco/src/esql/lib/hover/hover.ts index 2e36dd4941588..a8854481aba1d 100644 --- a/packages/kbn-monaco/src/esql/lib/hover/hover.ts +++ b/packages/kbn-monaco/src/esql/lib/hover/hover.ts @@ -8,7 +8,7 @@ */ import { i18n } from '@kbn/i18n'; -import type { AstProviderFn } from '@kbn/esql-ast'; +import type { AstProviderFn, ESQLAstItem } from '@kbn/esql-ast'; import { getAstContext, getFunctionDefinition, @@ -18,24 +18,153 @@ import { getCommandDefinition, type ESQLCallbacks, getPolicyHelper, + collectVariables, + ESQLRealField, } from '@kbn/esql-validation-autocomplete'; -import type { monaco } from '../../../monaco_imports'; +import { correctQuerySyntax } from '@kbn/esql-validation-autocomplete/src/shared/helpers'; +import type { EditorContext } from '@kbn/esql-validation-autocomplete/src/autocomplete/types'; +import { + getQueryForFields, + getValidSignaturesAndTypesToSuggestNext, +} from '@kbn/esql-validation-autocomplete/src/autocomplete/helper'; +import { buildQueryUntilPreviousCommand } from '@kbn/esql-validation-autocomplete/src/shared/resources_helpers'; +import { getFieldsByTypeRetriever } from '@kbn/esql-validation-autocomplete/src/autocomplete/autocomplete'; +import { + TIME_SYSTEM_DESCRIPTIONS, + TIME_SYSTEM_PARAMS, +} from '@kbn/esql-validation-autocomplete/src/autocomplete/factories'; +import { isESQLFunction, isESQLNamedParamLiteral } from '@kbn/esql-ast/src/types'; import { monacoPositionToOffset } from '../shared/utils'; +import { monaco } from '../../../monaco_imports'; -export async function getHoverItem( +const ACCEPTABLE_TYPES_HOVER = i18n.translate('monaco.esql.hover.acceptableTypes', { + defaultMessage: 'Acceptable types', +}); + +async function getHoverItemForFunction( model: monaco.editor.ITextModel, position: monaco.Position, token: monaco.CancellationToken, astProvider: AstProviderFn, resourceRetriever?: ESQLCallbacks ) { - const innerText = model.getValue(); - const offset = monacoPositionToOffset(innerText, position); + const context: EditorContext = { + triggerCharacter: ' ', + triggerKind: 1, + }; - const { ast } = await astProvider(innerText); + const fullText = model.getValue(); + const offset = monacoPositionToOffset(fullText, position); + const innerText = fullText.substring(0, offset); + + const correctedQuery = correctQuerySyntax(innerText, context); + const { ast } = await astProvider(correctedQuery); const astContext = getAstContext(innerText, ast, offset); + + const { node } = astContext; + const commands = ast; + + if (isESQLFunction(node) && astContext.type === 'function') { + const queryForFields = getQueryForFields( + buildQueryUntilPreviousCommand(ast, correctedQuery), + ast + ); + const { getFieldsMap } = getFieldsByTypeRetriever(queryForFields, resourceRetriever); + + const fnDefinition = getFunctionDefinition(node.name); + // early exit on no hit + if (!fnDefinition) { + return undefined; + } + const fieldsMap: Map = await getFieldsMap(); + const anyVariables = collectVariables(commands, fieldsMap, innerText); + + const references = { + fields: fieldsMap, + variables: anyVariables, + }; + + const { typesToSuggestNext, enrichedArgs } = getValidSignaturesAndTypesToSuggestNext( + node, + references, + fnDefinition, + fullText, + offset + ); + + const hoveredArg: ESQLAstItem & { + dataType: string; + } = enrichedArgs[enrichedArgs.length - 1]; + const contents = []; + if (hoveredArg && isESQLNamedParamLiteral(hoveredArg)) { + const bestMatch = TIME_SYSTEM_PARAMS.find((p) => p.startsWith(hoveredArg.text)); + // We only know if it's start or end after first 3 characters (?t_s or ?t_e) + if (hoveredArg.text.length > 3 && bestMatch) { + Object.entries(TIME_SYSTEM_DESCRIPTIONS).forEach(([key, value]) => { + contents.push({ + value: `**${key}**: ${value}`, + }); + }); + } + } + + if (typesToSuggestNext.length > 0) { + contents.push({ + value: `**${ACCEPTABLE_TYPES_HOVER}**: ${typesToSuggestNext + .map( + ({ type, constantOnly }) => + `${constantOnly ? '_constant_ ' : ''}**${type}**` + + // If function arg is a constant date, helpfully suggest named time system params + (constantOnly && type === 'date' ? ` | ${TIME_SYSTEM_PARAMS.join(' | ')}` : '') + ) + .join(' | ')}`, + }); + } + const hints = + contents.length > 0 + ? { + range: new monaco.Range( + 1, + 1, + model.getLineCount(), + model.getLineMaxColumn(model.getLineCount()) + ), + contents, + } + : undefined; + return hints; + } +} + +export async function getHoverItem( + model: monaco.editor.ITextModel, + position: monaco.Position, + token: monaco.CancellationToken, + astProvider: AstProviderFn, + resourceRetriever?: ESQLCallbacks +) { + const fullText = model.getValue(); + const offset = monacoPositionToOffset(fullText, position); + + const { ast } = await astProvider(fullText); + const astContext = getAstContext(fullText, ast, offset); + const { getPolicyMetadata } = getPolicyHelper(resourceRetriever); + let hoverContent: monaco.languages.Hover = { + contents: [], + }; + const hoverItemsForFunction = await getHoverItemForFunction( + model, + position, + token, + astProvider, + resourceRetriever + ); + if (hoverItemsForFunction) { + hoverContent = hoverItemsForFunction; + } + if (['newCommand', 'list'].includes(astContext.type)) { return { contents: [] }; } @@ -44,12 +173,12 @@ export async function getHoverItem( const fnDefinition = getFunctionDefinition(astContext.node.name); if (fnDefinition) { - return { - contents: [ + hoverContent.contents.push( + ...[ { value: getFunctionSignatures(fnDefinition)[0].declaration }, { value: fnDefinition.description }, - ], - }; + ] + ); } } @@ -58,8 +187,8 @@ export async function getHoverItem( if (isSourceItem(astContext.node) && astContext.node.sourceType === 'policy') { const policyMetadata = await getPolicyMetadata(astContext.node.name); if (policyMetadata) { - return { - contents: [ + hoverContent.contents.push( + ...[ { value: `${i18n.translate('monaco.esql.hover.policyIndexes', { defaultMessage: '**Indexes**', @@ -75,8 +204,8 @@ export async function getHoverItem( defaultMessage: '**Fields**', })}: ${policyMetadata.enrichFields.join(', ')}`, }, - ], - }; + ] + ); } } if (isSettingItem(astContext.node)) { @@ -86,18 +215,17 @@ export async function getHoverItem( ); if (settingDef) { const mode = settingDef.values.find(({ name }) => name === astContext.node!.name)!; - return { - contents: [ + hoverContent.contents.push( + ...[ { value: settingDef.description }, { value: `**${mode.name}**: ${mode.description}`, }, - ], - }; + ] + ); } } } } - - return { contents: [] }; + return hoverContent; } diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index c4c28b7014853..a01b452b378b1 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -555,6 +555,9 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ onLayoutChangeRef.current = onLayoutChange; const codeEditorOptions: CodeEditorProps['options'] = { + hover: { + above: false, + }, accessibilitySupport: 'off', autoIndent: 'none', automaticLayout: true, From cb1286c736bd019d069a7d736965038c9e8101ab Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:30:14 -0500 Subject: [PATCH 37/52] [ES|QL] Fix suggestions within bucket() so that they don't advance cursor if there is a comma (#192610) ## Summary Fix suggestions within bucket() so that they don't advance cursor if there are already succeeding comma Before: https://github.com/user-attachments/assets/ed7c1d25-1746-401d-ae02-43d5095b204a After: https://github.com/user-attachments/assets/21e71d30-8641-474a-81ea-1b9f02cb654e ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../autocomplete.command.stats.test.ts | 34 ++++++++++++++++++- .../src/autocomplete/autocomplete.ts | 9 +++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts index 6f195d5ecb503..452a3b2754644 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts @@ -12,7 +12,12 @@ import { ESQL_COMMON_NUMERIC_TYPES, ESQL_NUMBER_TYPES } from '../../shared/esql_ import { allStarConstant } from '../complete_items'; import { getAddDateHistogramSnippet } from '../factories'; import { roundParameterTypes } from './constants'; -import { setup, getFunctionSignaturesByReturnType, getFieldNamesByType } from './helpers'; +import { + setup, + getFunctionSignaturesByReturnType, + getFieldNamesByType, + getLiteralsByType, +} from './helpers'; const allAggFunctions = getFunctionSignaturesByReturnType('stats', 'any', { agg: true, @@ -285,6 +290,33 @@ describe('autocomplete.suggest', () => { [',', '| ', '+ $0', '- $0'] ); }); + test('on space within bucket()', async () => { + const { assertSuggestions } = await setup(); + await assertSuggestions('from a | stats avg(b) by BUCKET(/, 50, ?t_start, ?t_end)', [ + // Note there's no space or comma in the suggested field names + ...getFieldNamesByType(['date', ...ESQL_COMMON_NUMERIC_TYPES]), + ...getFunctionSignaturesByReturnType('eval', ['date', ...ESQL_COMMON_NUMERIC_TYPES], { + scalar: true, + }), + ]); + await assertSuggestions('from a | stats avg(b) by BUCKET( / , 50, ?t_start, ?t_end)', [ + // Note there's no space or comma in the suggested field names + ...getFieldNamesByType(['date', ...ESQL_COMMON_NUMERIC_TYPES]), + ...getFunctionSignaturesByReturnType('eval', ['date', ...ESQL_COMMON_NUMERIC_TYPES], { + scalar: true, + }), + ]); + + await assertSuggestions( + 'from a | stats avg(b) by BUCKET(dateField, /50, ?t_start, ?t_end)', + [ + ...getLiteralsByType('time_literal'), + ...getFunctionSignaturesByReturnType('eval', ['integer', 'date_period'], { + scalar: true, + }), + ] + ); + }); test('count(/) to suggest * for all', async () => { const { suggest } = await setup(); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index 68f5375e55929..f80ebf862c0cf 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -1229,7 +1229,9 @@ async function getFunctionArgsSuggestions( // Whether to prepend comma to suggestion string // E.g. if true, "fieldName" -> "fieldName, " - const alreadyHasComma = fullText ? fullText[offset] === ',' : false; + const isCursorFollowedByComma = fullText + ? fullText.slice(offset, fullText.length).trimStart().startsWith(',') + : false; const canBeBooleanCondition = // For `CASE()`, there can be multiple conditions, so keep suggesting fields and functions if possible fnDefinition.name === 'case' || @@ -1239,9 +1241,10 @@ async function getFunctionArgsSuggestions( const shouldAddComma = hasMoreMandatoryArgs && fnDefinition.type !== 'builtin' && - !alreadyHasComma && + !isCursorFollowedByComma && !canBeBooleanCondition; - const shouldAdvanceCursor = hasMoreMandatoryArgs && fnDefinition.type !== 'builtin'; + const shouldAdvanceCursor = + hasMoreMandatoryArgs && fnDefinition.type !== 'builtin' && !isCursorFollowedByComma; const suggestedConstants = uniq( typesToSuggestNext From 2dc1aca175f9fda7f5b2f7bf87b41b0dbf6d01fd Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Wed, 11 Sep 2024 15:56:00 -0600 Subject: [PATCH 38/52] [Security Solution] AI Assistant - System prompt move (#191847) --- .../assistant/assistant_body/empty_convo.tsx | 16 +- .../impl/assistant/assistant_body/index.tsx | 17 +- .../chat_send/use_chat_send.test.tsx | 17 - .../assistant/chat_send/use_chat_send.tsx | 11 +- .../conversation_settings.tsx | 1 - .../conversation_settings_editor.tsx | 16 +- .../index.tsx | 2 - .../impl/assistant/index.tsx | 23 +- .../impl/assistant/prompt/helpers.test.ts | 94 +---- .../impl/assistant/prompt/helpers.ts | 33 +- .../prompt}/translations.ts | 9 - .../system_prompt/helpers.test.tsx | 11 +- .../prompt_editor/system_prompt/helpers.tsx | 16 +- .../system_prompt/index.test.tsx | 371 ++---------------- .../prompt_editor/system_prompt/index.tsx | 49 +-- .../select_system_prompt/index.test.tsx | 2 +- .../select_system_prompt/index.tsx | 96 +---- .../system_prompt_editor.tsx | 11 +- .../system_prompt_settings.test.tsx | 4 +- .../assistant/settings/assistant_settings.tsx | 4 +- .../assistant/upgrade_license_cta/index.tsx | 2 +- .../upgrade_license_cta}/translations.ts | 0 .../use_conversation/helpers.test.ts | 4 +- .../assistant/use_conversation/helpers.ts | 28 +- .../use_current_conversation/index.test.tsx | 139 ++++++- .../use_current_conversation/index.tsx | 41 +- .../impl/assistant_context/index.tsx | 31 +- .../impl/assistant_context/types.tsx | 14 + .../read_only_context_viewer/index.test.tsx | 26 -- .../read_only_context_viewer/index.tsx | 3 +- .../packages/kbn-elastic-assistant/index.ts | 2 + .../conversations/helpers.ts | 4 + .../conversations/update_conversation.test.ts | 43 +- .../conversations/update_conversation.ts | 18 +- .../server/lib/langchain/executors/types.ts | 1 + .../graphs/default_assistant_graph/index.ts | 16 +- .../nodes/translations.ts | 17 + .../graphs/default_assistant_graph/prompts.ts | 156 +++++--- .../server/routes/helpers.ts | 39 ++ .../post_actions_connector_execute.test.ts | 3 + .../routes/post_actions_connector_execute.ts | 17 +- .../server/routes/prompts/find_route.ts | 6 +- .../content/prompts/system/index.tsx | 41 -- .../content/prompts/system/translations.ts | 60 --- .../public/assistant/get_comments/index.tsx | 47 ++- .../assistant/get_comments/translations.ts | 4 + .../public/assistant/provider.test.tsx | 98 +---- .../public/assistant/provider.tsx | 14 +- .../translations/translations/fr-FR.json | 7 - .../translations/translations/ja-JP.json | 7 - .../translations/translations/zh-CN.json | 7 - .../e2e/ai_assistant/conversations.cy.ts | 14 +- .../cypress/e2e/ai_assistant/prompts.cy.ts | 106 +++-- .../cypress/objects/assistant.ts | 9 + .../cypress/screens/ai_assistant.ts | 2 +- .../cypress/tasks/api_calls/assistant.ts | 25 +- .../cypress/tasks/assistant.ts | 27 +- 57 files changed, 686 insertions(+), 1195 deletions(-) rename x-pack/packages/kbn-elastic-assistant/impl/{content/prompts/system => assistant/prompt}/translations.ts (61%) rename x-pack/packages/kbn-elastic-assistant/impl/{content/prompts/welcome => assistant/upgrade_license_cta}/translations.ts (100%) delete mode 100644 x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/read_only_context_viewer/index.test.tsx create mode 100644 x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/translations.ts delete mode 100644 x-pack/plugins/security_solution/public/assistant/content/prompts/system/index.tsx delete mode 100644 x-pack/plugins/security_solution/public/assistant/content/prompts/system/translations.ts diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_body/empty_convo.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_body/empty_convo.tsx index 58d47a696225f..3aa0e2271beff 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_body/empty_convo.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_body/empty_convo.tsx @@ -9,31 +9,23 @@ import React, { Dispatch, SetStateAction } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiText } from '@elastic/eui'; import { css } from '@emotion/react'; import { PromptResponse } from '@kbn/elastic-assistant-common'; -import { QueryObserverResult } from '@tanstack/react-query'; -import { Conversation } from '../../..'; import { AssistantAnimatedIcon } from '../assistant_animated_icon'; import { SystemPrompt } from '../prompt_editor/system_prompt'; import { SetupKnowledgeBaseButton } from '../../knowledge_base/setup_knowledge_base_button'; import * as i18n from '../translations'; interface Props { - currentConversation: Conversation | undefined; currentSystemPromptId: string | undefined; isSettingsModalVisible: boolean; - refetchCurrentUserConversations: () => Promise< - QueryObserverResult, unknown> - >; setIsSettingsModalVisible: Dispatch>; - setCurrentSystemPromptId: Dispatch>; + setCurrentSystemPromptId: (promptId: string | undefined) => void; allSystemPrompts: PromptResponse[]; } export const EmptyConvo: React.FC = ({ allSystemPrompts, - currentConversation, currentSystemPromptId, isSettingsModalVisible, - refetchCurrentUserConversations, setCurrentSystemPromptId, setIsSettingsModalVisible, }) => { @@ -59,13 +51,11 @@ export const EmptyConvo: React.FC = ({ diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_body/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_body/index.tsx index 362ab6e3e41ef..757f385db058c 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_body/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_body/index.tsx @@ -18,7 +18,6 @@ import { HttpSetup } from '@kbn/core-http-browser'; import { euiThemeVars } from '@kbn/ui-theme'; import { css } from '@emotion/react'; import { PromptResponse } from '@kbn/elastic-assistant-common'; -import { QueryObserverResult } from '@tanstack/react-query'; import { AssistantAnimatedIcon } from '../assistant_animated_icon'; import { EmptyConvo } from './empty_convo'; import { WelcomeSetup } from './welcome_setup'; @@ -35,11 +34,8 @@ interface Props { isSettingsModalVisible: boolean; isWelcomeSetup: boolean; isLoading: boolean; - refetchCurrentUserConversations: () => Promise< - QueryObserverResult, unknown> - >; http: HttpSetup; - setCurrentSystemPromptId: Dispatch>; + setCurrentSystemPromptId: (promptId: string | undefined) => void; setIsSettingsModalVisible: Dispatch>; } @@ -55,17 +51,16 @@ export const AssistantBody: FunctionComponent = ({ isLoading, isSettingsModalVisible, isWelcomeSetup, - refetchCurrentUserConversations, setIsSettingsModalVisible, }) => { - const isNewConversation = useMemo( + const isEmptyConversation = useMemo( () => currentConversation?.messages.length === 0, [currentConversation?.messages.length] ); const disclaimer = useMemo( () => - isNewConversation && ( + isEmptyConversation && ( = ({ {i18n.DISCLAIMER} ), - [isNewConversation] + [isEmptyConversation] ); // Start Scrolling @@ -113,13 +108,11 @@ export const AssistantBody: FunctionComponent = ({ currentConversation={currentConversation} handleOnConversationSelected={handleOnConversationSelected} /> - ) : currentConversation?.messages.length === 0 ? ( + ) : isEmptyConversation ? ( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/chat_send/use_chat_send.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/chat_send/use_chat_send.test.tsx index b2479b33fdb99..97d95f641e2b5 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/chat_send/use_chat_send.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/chat_send/use_chat_send.test.tsx @@ -9,7 +9,6 @@ import { HttpSetup } from '@kbn/core-http-browser'; import { useSendMessage } from '../use_send_message'; import { useConversation } from '../use_conversation'; import { emptyWelcomeConvo, welcomeConvo } from '../../mock/conversation'; -import { defaultSystemPrompt, mockSystemPrompt } from '../../mock/system_prompt'; import { useChatSend, UseChatSendProps } from './use_chat_send'; import { act, renderHook } from '@testing-library/react-hooks'; import { waitFor } from '@testing-library/react'; @@ -28,7 +27,6 @@ const setCurrentConversation = jest.fn(); export const testProps: UseChatSendProps = { selectedPromptContexts: {}, - allSystemPrompts: [defaultSystemPrompt, mockSystemPrompt], currentConversation: { ...emptyWelcomeConvo, id: 'an-id' }, http: { basePath: { @@ -38,7 +36,6 @@ export const testProps: UseChatSendProps = { anonymousPaths: {}, externalUrl: {}, } as unknown as HttpSetup, - currentSystemPromptId: defaultSystemPrompt.id, setSelectedPromptContexts, setCurrentConversation, refetchCurrentUserConversations: jest.fn(), @@ -78,21 +75,7 @@ describe('use chat send', () => { expect(setCurrentConversation).toHaveBeenCalled(); }); }); - it('handleChatSend sends message with context prompt when a valid prompt text is provided', async () => { - const promptText = 'prompt text'; - const { result } = renderHook(() => useChatSend(testProps), { - wrapper: TestProviders, - }); - result.current.handleChatSend(promptText); - await waitFor(() => { - expect(sendMessage).toHaveBeenCalled(); - const appendMessageSend = sendMessage.mock.calls[0][0].message; - expect(appendMessageSend).toEqual( - `You are a helpful, expert assistant who answers questions about Elastic Security. Do not answer questions unrelated to Elastic Security.\nIf you answer a question related to KQL or EQL, it should be immediately usable within an Elastic Security timeline; please always format the output correctly with back ticks. Any answer provided for Query DSL should also be usable in a security timeline. This means you should only ever include the "filter" portion of the query.\nUse the following context to answer questions:\n\n${promptText}` - ); - }); - }); it('handleChatSend sends message with only provided prompt text and context already exists in convo history', async () => { const promptText = 'prompt text'; const { result } = renderHook( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/chat_send/use_chat_send.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/chat_send/use_chat_send.tsx index 905a4513a250f..9b671bca64a2e 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/chat_send/use_chat_send.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/chat_send/use_chat_send.tsx @@ -8,7 +8,7 @@ import React, { useCallback, useState } from 'react'; import { HttpSetup } from '@kbn/core-http-browser'; import { i18n } from '@kbn/i18n'; -import { PromptResponse, Replacements } from '@kbn/elastic-assistant-common'; +import { Replacements } from '@kbn/elastic-assistant-common'; import { DataStreamApis } from '../use_data_stream_apis'; import { NEW_CHAT } from '../conversations/conversation_sidepanel/translations'; import type { ClientMessage } from '../../assistant_context/types'; @@ -20,9 +20,7 @@ import { Conversation, useAssistantContext } from '../../..'; import { getMessageFromRawResponse } from '../helpers'; export interface UseChatSendProps { - allSystemPrompts: PromptResponse[]; currentConversation?: Conversation; - currentSystemPromptId: string | undefined; http: HttpSetup; refetchCurrentUserConversations: DataStreamApis['refetchCurrentUserConversations']; selectedPromptContexts: Record; @@ -46,9 +44,7 @@ export interface UseChatSend { * Handles sending user messages to the API and updating the conversation state. */ export const useChatSend = ({ - allSystemPrompts, currentConversation, - currentSystemPromptId, http, refetchCurrentUserConversations, selectedPromptContexts, @@ -75,14 +71,11 @@ export const useChatSend = ({ ); return; } - const systemPrompt = allSystemPrompts.find((prompt) => prompt.id === currentSystemPromptId); const userMessage = getCombinedMessage({ - isNewChat: currentConversation.messages.length === 0, currentReplacements: currentConversation.replacements, promptText, selectedPromptContexts, - selectedSystemPrompt: systemPrompt, }); const baseReplacements: Replacements = @@ -141,10 +134,8 @@ export const useChatSend = ({ }); }, [ - allSystemPrompts, assistantTelemetry, currentConversation, - currentSystemPromptId, http, selectedPromptContexts, sendMessage, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx index d929c132baf43..852cd20882904 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx @@ -126,7 +126,6 @@ export const ConversationSettings: React.FC = React.m selectedConversation={selectedConversationWithApiConfig} setConversationSettings={setConversationSettings} setConversationsSettingsBulkActions={setConversationsSettingsBulkActions} - onSelectedConversationChange={onSelectedConversationChange} /> diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings_editor.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings_editor.tsx index f5c74cf77ee85..ba18594836792 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings_editor.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings_editor.tsx @@ -13,7 +13,6 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/public/common'; import { noop } from 'lodash/fp'; import { PromptResponse } from '@kbn/elastic-assistant-common'; -import { QueryObserverResult } from '@tanstack/react-query'; import { Conversation } from '../../../..'; import * as i18n from './translations'; import * as i18nModel from '../../../connectorland/models/model_selector/translations'; @@ -37,8 +36,6 @@ export interface ConversationSettingsEditorProps { setConversationsSettingsBulkActions: React.Dispatch< React.SetStateAction >; - onSelectedConversationChange: (conversation?: Conversation) => void; - refetchConversations?: () => Promise, unknown>>; } /** @@ -47,15 +44,13 @@ export interface ConversationSettingsEditorProps { export const ConversationSettingsEditor: React.FC = React.memo( ({ allSystemPrompts, - selectedConversation, conversationSettings, + conversationsSettingsBulkActions, http, isDisabled = false, + selectedConversation, setConversationSettings, - conversationsSettingsBulkActions, setConversationsSettingsBulkActions, - onSelectedConversationChange, - refetchConversations, }) => { const { data: connectors, isSuccess: areConnectorsFetched } = useLoadConnectors({ http, @@ -276,16 +271,11 @@ export const ConversationSettingsEditor: React.FC diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/index.tsx index 10c0867cafb38..f8818f5faab25 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/index.tsx @@ -321,11 +321,9 @@ const ConversationSettingsManagementComponent: React.FC = ({ conversationsSettingsBulkActions={conversationsSettingsBulkActions} http={http} isDisabled={isDisabled} - refetchConversations={refetchConversations} selectedConversation={selectedConversation} setConversationSettings={setConversationSettings} setConversationsSettingsBulkActions={setConversationsSettingsBulkActions} - onSelectedConversationChange={onSelectedConversationChange} /> )} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx index 3a8c47d90b3f1..43f637b1769f3 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx @@ -125,7 +125,7 @@ const AssistantComponent: React.FC = ({ const defaultConnector = useMemo(() => getDefaultConnector(connectors), [connectors]); const { currentConversation, - currentSystemPromptId, + currentSystemPrompt, handleCreateConversation, handleOnConversationDeleted, handleOnConversationSelected, @@ -272,16 +272,14 @@ const AssistantComponent: React.FC = ({ const { abortStream, - handleOnChatCleared: onChatCleared, + handleOnChatCleared, handleChatSend, handleRegenerateResponse, isLoading: isLoadingChatSend, setUserPrompt, userPrompt, } = useChatSend({ - allSystemPrompts, currentConversation, - currentSystemPromptId, http, refetchCurrentUserConversations, selectedPromptContexts, @@ -289,18 +287,6 @@ const AssistantComponent: React.FC = ({ setCurrentConversation, }); - const handleOnChatCleared = useCallback(() => { - onChatCleared(); - if (!currentSystemPromptId) { - setCurrentSystemPromptId(currentConversation?.apiConfig?.defaultSystemPromptId); - } - }, [ - currentConversation?.apiConfig?.defaultSystemPromptId, - currentSystemPromptId, - onChatCleared, - setCurrentSystemPromptId, - ]); - useEffect(() => { // Adding `conversationTitle !== selectedConversationTitle` to prevent auto-run still executing after changing selected conversation if (currentConversation?.messages.length || conversationTitle !== currentConversation?.title) { @@ -389,6 +375,7 @@ const AssistantComponent: React.FC = ({ isFetchingResponse: isLoadingChatSend, setIsStreaming, currentUserAvatar, + systemPromptContent: currentSystemPrompt?.content, })} // Avoid comments going off the flyout css={css` @@ -415,6 +402,7 @@ const AssistantComponent: React.FC = ({ isLoadingChatSend, setIsStreaming, currentUserAvatar, + currentSystemPrompt?.content, selectedPromptContextsCount, ] ); @@ -530,14 +518,13 @@ const AssistantComponent: React.FC = ({ allSystemPrompts={allSystemPrompts} comments={comments} currentConversation={currentConversation} - currentSystemPromptId={currentSystemPromptId} + currentSystemPromptId={currentSystemPrompt?.id} handleOnConversationSelected={handleOnConversationSelected} http={http} isAssistantEnabled={isAssistantEnabled} isLoading={isInitialLoad} isSettingsModalVisible={isSettingsModalVisible} isWelcomeSetup={isWelcomeSetup} - refetchCurrentUserConversations={refetchCurrentUserConversations} setCurrentSystemPromptId={setCurrentSystemPromptId} setIsSettingsModalVisible={setIsSettingsModalVisible} /> diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/helpers.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/helpers.test.ts index 33b33f83e6581..cd4dfe9219484 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/helpers.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/helpers.test.ts @@ -6,9 +6,8 @@ */ import type { ClientMessage } from '../../assistant_context/types'; -import { getCombinedMessage, getSystemMessages } from './helpers'; +import { getCombinedMessage } from './helpers'; import { mockGetAnonymizedValue } from '../../mock/get_anonymized_value'; -import { mockSystemPrompt } from '../../mock/system_prompt'; import { mockAlertPromptContext } from '../../mock/prompt_context'; import type { SelectedPromptContext } from '../prompt_context/types'; @@ -21,77 +20,14 @@ const mockSelectedAlertPromptContext: SelectedPromptContext = { describe('helpers', () => { beforeEach(() => jest.clearAllMocks()); - describe('getSystemMessages', () => { - it('should return an empty array if isNewChat is false', () => { - const result = getSystemMessages({ - isNewChat: false, - selectedSystemPrompt: mockSystemPrompt, - }); - - expect(result).toEqual([]); - }); - - it('should return an empty array if selectedSystemPrompt is undefined', () => { - const result = getSystemMessages({ isNewChat: true, selectedSystemPrompt: undefined }); - - expect(result).toEqual([]); - }); - - describe('when isNewChat is true and selectedSystemPrompt is defined', () => { - let result: ClientMessage[]; - - beforeEach(() => { - result = getSystemMessages({ isNewChat: true, selectedSystemPrompt: mockSystemPrompt }); - }); - - it('should return a message with the content of the selectedSystemPrompt', () => { - expect(result[0].content).toBe(mockSystemPrompt.content); - }); - - it('should return a message with the role "system"', () => { - expect(result[0].role).toBe('system'); - }); - - it('should return a message with a valid timestamp', () => { - const timestamp = new Date(result[0].timestamp); - - expect(timestamp instanceof Date && !isNaN(timestamp.valueOf())).toBe(true); - }); - }); - }); - describe('getCombinedMessage', () => { - it('returns correct content for a new chat with a system prompt', async () => { + it('returns correct content for a chat', async () => { const message: ClientMessage = await getCombinedMessage({ currentReplacements: {}, - isNewChat: true, promptText: 'User prompt text', selectedPromptContexts: { [mockSelectedAlertPromptContext.promptContextId]: mockSelectedAlertPromptContext, }, - selectedSystemPrompt: mockSystemPrompt, - }); - - expect(message.content) - .toEqual(`You are a helpful, expert assistant who answers questions about Elastic Security. - -CONTEXT: -""" -alert data -""" - -User prompt text`); - }); - - it('returns correct content for a new chat WITHOUT a system prompt', async () => { - const message: ClientMessage = await getCombinedMessage({ - currentReplacements: {}, - isNewChat: true, - promptText: 'User prompt text', - selectedPromptContexts: { - [mockSelectedAlertPromptContext.promptContextId]: mockSelectedAlertPromptContext, - }, - selectedSystemPrompt: undefined, // <-- no system prompt }); expect(message.content).toEqual(`CONTEXT: @@ -105,12 +41,10 @@ User prompt text`); it('returns the correct content for an existing chat', async () => { const message: ClientMessage = await getCombinedMessage({ currentReplacements: {}, - isNewChat: false, promptText: 'User prompt text', selectedPromptContexts: { [mockSelectedAlertPromptContext.promptContextId]: mockSelectedAlertPromptContext, }, - selectedSystemPrompt: mockSystemPrompt, }); expect(message.content).toEqual(`CONTEXT: @@ -124,12 +58,10 @@ User prompt text`); it('returns the expected role', async () => { const message: ClientMessage = await getCombinedMessage({ currentReplacements: {}, - isNewChat: true, promptText: 'User prompt text', selectedPromptContexts: { [mockSelectedAlertPromptContext.promptContextId]: mockSelectedAlertPromptContext, }, - selectedSystemPrompt: mockSystemPrompt, }); expect(message.role).toBe('user'); @@ -138,32 +70,25 @@ User prompt text`); it('returns a valid timestamp', async () => { const message: ClientMessage = await getCombinedMessage({ currentReplacements: {}, - isNewChat: true, promptText: 'User prompt text', selectedPromptContexts: {}, - selectedSystemPrompt: mockSystemPrompt, }); expect(Date.parse(message.timestamp)).not.toBeNaN(); }); - it('should return the correct combined message for a new chat without prompt context', () => { + it('should return the correct combined message for a chat without prompt context', () => { const result = getCombinedMessage({ currentReplacements: {}, - isNewChat: true, promptText: 'User prompt text', - selectedSystemPrompt: mockSystemPrompt, selectedPromptContexts: {}, }); - expect(result.content).toEqual( - `You are a helpful, expert assistant who answers questions about Elastic Security.\n\nUser prompt text` - ); + expect(result.content).toEqual(`User prompt text`); }); - it('should return the correct combined message for a new chat without system context and multiple selectedPromptContext', () => { + it('should return the correct combined message for a chat with multiple selectedPromptContext', () => { const result = getCombinedMessage({ currentReplacements: {}, - isNewChat: true, promptText: 'User prompt text', selectedPromptContexts: { context1: { @@ -177,7 +102,6 @@ User prompt text`); replacements: {}, }, }, - selectedSystemPrompt: { ...mockSystemPrompt, content: '' }, }); expect(result.content).toEqual( @@ -188,10 +112,8 @@ User prompt text`); it('should remove extra spaces when there is no prompt content or system prompt', () => { const result = getCombinedMessage({ currentReplacements: {}, - isNewChat: true, promptText: 'User prompt text', selectedPromptContexts: {}, - selectedSystemPrompt: { ...mockSystemPrompt, content: '' }, }); expect(result.content).toEqual(`User prompt text`); @@ -229,13 +151,11 @@ User prompt text`); const message = await getCombinedMessage({ currentReplacements: {}, getAnonymizedValue: mockGetAnonymizedValue, - isNewChat: true, promptText: 'User prompt text', selectedPromptContexts: { [mockPromptContextWithDataToAnonymize.promptContextId]: mockPromptContextWithDataToAnonymize, }, - selectedSystemPrompt: mockSystemPrompt, }); expect(message.replacements).toEqual({ @@ -247,15 +167,11 @@ User prompt text`); }); it('returns the expected content when `isNewChat` is false', async () => { - const isNewChat = false; // <-- not a new chat - const message: ClientMessage = await getCombinedMessage({ currentReplacements: {}, getAnonymizedValue: mockGetAnonymizedValue, - isNewChat, promptText: 'User prompt text', selectedPromptContexts: {}, - selectedSystemPrompt: mockSystemPrompt, }); expect(message.content).toEqual(`User prompt text`); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/helpers.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/helpers.ts index 4868eff04b4e7..0689ff6fd4ef6 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/helpers.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/helpers.ts @@ -5,41 +5,20 @@ * 2.0. */ -import { Replacements, transformRawData, PromptResponse } from '@kbn/elastic-assistant-common'; +import { Replacements, transformRawData } from '@kbn/elastic-assistant-common'; import type { ClientMessage } from '../../assistant_context/types'; import { getAnonymizedValue as defaultGetAnonymizedValue } from '../get_anonymized_value'; import type { SelectedPromptContext } from '../prompt_context/types'; -import { SYSTEM_PROMPT_CONTEXT_NON_I18N } from '../../content/prompts/system/translations'; +import { SYSTEM_PROMPT_CONTEXT_NON_I18N } from './translations'; -export const getSystemMessages = ({ - isNewChat, - selectedSystemPrompt, -}: { - isNewChat: boolean; - selectedSystemPrompt: PromptResponse | undefined; -}): ClientMessage[] => { - if (!isNewChat || selectedSystemPrompt == null) { - return []; - } - - const message: ClientMessage = { - content: selectedSystemPrompt.content, - role: 'system', - timestamp: new Date().toLocaleString(), - }; - - return [message]; -}; interface ClientMessageWithReplacements extends ClientMessage { replacements: Replacements; } export function getCombinedMessage({ currentReplacements, getAnonymizedValue = defaultGetAnonymizedValue, - isNewChat, promptText, selectedPromptContexts, - selectedSystemPrompt, }: { currentReplacements: Replacements | undefined; getAnonymizedValue?: ({ @@ -49,10 +28,8 @@ export function getCombinedMessage({ currentReplacements: Replacements | undefined; rawValue: string; }) => string; - isNewChat: boolean; promptText: string; selectedPromptContexts: Record; - selectedSystemPrompt: PromptResponse | undefined; }): ClientMessageWithReplacements { let replacements: Replacements = currentReplacements ?? {}; const onNewReplacements = (newReplacements: Replacements) => { @@ -74,10 +51,8 @@ export function getCombinedMessage({ }); const content = `${ - isNewChat && selectedSystemPrompt && selectedSystemPrompt.content.length > 0 - ? `${selectedSystemPrompt?.content ?? ''}\n\n` - : '' - }${promptContextsContent.length > 0 ? `${promptContextsContent}\n` : ''}${promptText}`; + promptContextsContent.length > 0 ? `${promptContextsContent}\n` : '' + }${promptText}`; return { // trim ensures any extra \n and other whitespace is removed diff --git a/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/translations.ts similarity index 61% rename from x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/translations.ts rename to x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/translations.ts index 75cb6017cb1a3..7dfc07a77247c 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/translations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt/translations.ts @@ -5,15 +5,6 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; - -export const DEFAULT_SYSTEM_PROMPT_NAME = i18n.translate( - 'xpack.elasticAssistant.assistant.content.prompts.system.defaultSystemPromptName', - { - defaultMessage: 'Default system prompt', - } -); - export const SYSTEM_PROMPT_CONTEXT_NON_I18N = (context: string) => { return `CONTEXT:\n"""\n${context}\n"""`; }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/helpers.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/helpers.test.tsx index 1d3105a64ac2d..a75c1fa838db5 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/helpers.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/helpers.test.tsx @@ -15,23 +15,18 @@ import { getOptions, getOptionFromPrompt } from './helpers'; describe('helpers', () => { describe('getOptionFromPrompt', () => { + const option = getOptionFromPrompt(mockSystemPrompt); it('returns an EuiSuperSelectOption with the correct value', () => { - const option = getOptionFromPrompt({ ...mockSystemPrompt, isCleared: false }); - expect(option.value).toBe(mockSystemPrompt.id); }); it('returns an EuiSuperSelectOption with the correct inputDisplay', () => { - const option = getOptionFromPrompt({ ...mockSystemPrompt, isCleared: false }); - render(<>{option.inputDisplay}); expect(screen.getByTestId('systemPromptText')).toHaveTextContent(mockSystemPrompt.name); }); it('shows the expected name in the dropdownDisplay', () => { - const option = getOptionFromPrompt({ ...mockSystemPrompt, isCleared: false }); - render({option.dropdownDisplay}); expect(screen.getByTestId(`systemPrompt-${mockSystemPrompt.name}`)).toHaveTextContent( @@ -40,8 +35,6 @@ describe('helpers', () => { }); it('shows the expected prompt content in the dropdownDisplay', () => { - const option = getOptionFromPrompt({ ...mockSystemPrompt, isCleared: false }); - render({option.dropdownDisplay}); expect(screen.getByTestId('content')).toHaveTextContent(mockSystemPrompt.content); @@ -53,7 +46,7 @@ describe('helpers', () => { const prompts = [mockSystemPrompt, mockSuperheroSystemPrompt]; const promptIds = prompts.map(({ id }) => id); - const options = getOptions({ prompts, isCleared: false }); + const options = getOptions(prompts); const optionValues = options.map(({ value }) => value); expect(optionValues).toEqual(promptIds); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/helpers.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/helpers.tsx index b28d13a91fcd2..7d54d347964e4 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/helpers.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/helpers.tsx @@ -23,13 +23,11 @@ interface GetOptionFromPromptProps extends PromptResponse { content: string; id: string; name: string; - isCleared: boolean; } export const getOptionFromPrompt = ({ content, id, - isCleared, name, }: GetOptionFromPromptProps): EuiSuperSelectOption => ({ value: id, @@ -38,7 +36,7 @@ export const getOptionFromPrompt = ({ data-test-subj="systemPromptText" // @ts-ignore css={css` - color: ${isCleared ? euiThemeVars.euiColorLightShade : euiThemeVars.euiColorDarkestShade}; + color: ${euiThemeVars.euiColorDarkestShade}; `} > {name} @@ -58,12 +56,6 @@ export const getOptionFromPrompt = ({ ), }); -interface GetOptionsProps { - prompts: PromptResponse[] | undefined; - isCleared: boolean; -} -export const getOptions = ({ - prompts, - isCleared, -}: GetOptionsProps): Array> => - prompts?.map((p) => getOptionFromPrompt({ ...p, isCleared })) ?? []; +export const getOptions = ( + prompts: PromptResponse[] | undefined +): Array> => prompts?.map((p) => getOptionFromPrompt(p)) ?? []; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/index.test.tsx index af68f1d83e6aa..e7ce435cf2556 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/index.test.tsx @@ -6,16 +6,13 @@ */ import React from 'react'; -import { render, screen, fireEvent, waitFor, within } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; +import { render, screen, fireEvent } from '@testing-library/react'; import { mockSystemPrompt } from '../../../mock/system_prompt'; import { SystemPrompt } from '.'; import { Conversation } from '../../../..'; import { DEFAULT_CONVERSATION_TITLE } from '../../use_conversation/translations'; import { TestProviders } from '../../../mock/test_providers/test_providers'; -import { TEST_IDS } from '../../constants'; -import { useAssistantContext } from '../../../assistant_context'; import { WELCOME_CONVERSATION } from '../../use_conversation/sample_conversations'; import { PromptResponse } from '@kbn/elastic-assistant-common'; @@ -62,7 +59,6 @@ jest.mock('../../use_conversation', () => { }); describe('SystemPrompt', () => { - const currentSystemPromptId = undefined; const isSettingsModalVisible = false; const onSystemPromptSelectionChange = jest.fn(); const setIsSettingsModalVisible = jest.fn(); @@ -79,14 +75,11 @@ describe('SystemPrompt', () => { }); }); - describe('when conversation is undefined', () => { - const conversation = undefined; - + describe('when currentSystemPromptId is undefined', () => { beforeEach(() => { render( { }); it('does NOT render the clear button', () => { - expect(screen.queryByTestId('clear')).not.toBeInTheDocument(); + expect(screen.queryByTestId('clearSystemPrompt')).not.toBeInTheDocument(); }); }); - describe('when conversation is NOT null', () => { + describe('when currentSystemPromptId does not exist', () => { beforeEach(() => { render( { ); }); - it('does render the system prompt select', () => { - expect(screen.queryByTestId('selectSystemPrompt')).toBeInTheDocument(); + it('renders the system prompt select', () => { + expect(screen.getByTestId('selectSystemPrompt')).toBeInTheDocument(); }); - it('renders the system prompt text', () => { - expect(screen.getByTestId('systemPromptText')).toHaveTextContent(mockSystemPrompt.name); + it('does NOT render the edit button', () => { + expect(screen.queryByTestId('edit')).not.toBeInTheDocument(); }); - it('renders the clear button', () => { - expect(screen.getByTestId('clearSystemPrompt')).toBeInTheDocument(); + it('does NOT render the clear button', () => { + expect(screen.queryByTestId('clearSystemPrompt')).not.toBeInTheDocument(); }); }); - // TODO: To be implemented as part of the global settings tests instead of within the SystemPrompt component - describe.skip('when a new prompt is saved', () => { - it('should save new prompt correctly', async () => { - const customPromptName = 'custom prompt'; - const customPromptText = 'custom prompt text'; - render( - - - - ); - await userEvent.click(screen.getByTestId('edit')); - await userEvent.click(screen.getByTestId(TEST_IDS.ADD_SYSTEM_PROMPT)); - - expect(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).toBeVisible(); - - await userEvent.type( - within(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_SELECTOR)).getByTestId('comboBoxInput'), - `${customPromptName}[Enter]` - ); - - await userEvent.type( - screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.PROMPT_TEXT), - customPromptText - ); - - await userEvent.click(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.SAVE)); - - await waitFor(() => { - expect(mockUseAssistantContext.setAllSystemPrompts).toHaveBeenCalledTimes(1); - expect(mockUseAssistantContext.setAllSystemPrompts).toHaveBeenNthCalledWith(1, [ - mockSystemPrompt, - { - id: customPromptName, - content: customPromptText, - name: customPromptName, - promptType: 'system', - }, - ]); - expect(screen.queryByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).not.toBeInTheDocument(); - }); - }); - - it('should save new prompt as a default prompt', async () => { - const customPromptName = 'custom prompt'; - const customPromptText = 'custom prompt text'; + describe('when currentSystemPromptId exists', () => { + beforeEach(() => { render( - - - - ); - await userEvent.click(screen.getByTestId('edit')); - await userEvent.click(screen.getByTestId(TEST_IDS.ADD_SYSTEM_PROMPT)); - - expect(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).toBeVisible(); - - await userEvent.type( - within(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_SELECTOR)).getByTestId('comboBoxInput'), - `${customPromptName}[Enter]` - ); - - await userEvent.type( - screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.PROMPT_TEXT), - customPromptText - ); - - await userEvent.click( - screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.TOGGLE_ALL_DEFAULT_CONVERSATIONS) + ); - - await waitFor(() => { - expect( - screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.TOGGLE_ALL_DEFAULT_CONVERSATIONS) - ).toBeChecked(); - }); - - await userEvent.click(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.SAVE)); - - await waitFor(() => { - expect(mockUseAssistantContext.setAllSystemPrompts).toHaveBeenCalledTimes(1); - expect(mockUseAssistantContext.setAllSystemPrompts).toHaveBeenNthCalledWith(1, [ - { - ...mockSystemPrompt, - isNewConversationDefault: false, - }, - { - id: customPromptName, - content: customPromptText, - name: customPromptName, - promptType: 'system', - isNewConversationDefault: true, - }, - ]); - expect(screen.queryByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).not.toBeInTheDocument(); - }); }); - it('should save new prompt as a default prompt for selected conversations', async () => { - const customPromptName = 'custom prompt'; - const customPromptText = 'custom prompt text'; - render( - - - - ); - await userEvent.click(screen.getByTestId('edit')); - await userEvent.click(screen.getByTestId(TEST_IDS.ADD_SYSTEM_PROMPT)); - - expect(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).toBeVisible(); - - await userEvent.type( - within(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_SELECTOR)).getByTestId('comboBoxInput'), - `${customPromptName}[Enter]` - ); - - await userEvent.type( - screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.PROMPT_TEXT), - customPromptText - ); - - await userEvent.click( - within(screen.getByTestId(TEST_IDS.CONVERSATIONS_MULTISELECTOR)).getByTestId( - 'comboBoxInput' - ) - ); - - await waitFor(() => { - expect( - screen.getByTestId( - TEST_IDS.CONVERSATIONS_MULTISELECTOR_OPTION(DEFAULT_CONVERSATION_TITLE) - ) - ).toBeVisible(); - }); - - // select Default Conversation - await userEvent.click( - screen.getByTestId(TEST_IDS.CONVERSATIONS_MULTISELECTOR_OPTION(DEFAULT_CONVERSATION_TITLE)) - ); - - await userEvent.click(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.SAVE)); - - await waitFor(() => { - expect(screen.queryByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).not.toBeInTheDocument(); - }); - - expect(mockUseAssistantContext.setAllSystemPrompts).toHaveBeenCalledTimes(1); - expect(mockUseAssistantContext.setConversations).toHaveBeenCalledTimes(1); - expect(mockUseAssistantContext.setConversations).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ - [DEFAULT_CONVERSATION_TITLE]: expect.objectContaining({ - id: DEFAULT_CONVERSATION_TITLE, - apiConfig: expect.objectContaining({ - defaultSystemPromptId: customPromptName, - }), - }), - }) - ); + it('does render the system prompt select', () => { + expect(screen.queryByTestId('selectSystemPrompt')).toBeInTheDocument(); }); - it('should save new prompt correctly when prompt is removed from selected conversation', async () => { - render( - - - - ); - await userEvent.click(screen.getByTestId('edit')); - await userEvent.click(screen.getByTestId(TEST_IDS.ADD_SYSTEM_PROMPT)); - - expect(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).toBeVisible(); - - await userEvent.type( - within(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_SELECTOR)).getByTestId('comboBoxInput'), - `${mockSystemPrompt.name}[Enter]` - ); - - expect( - within(screen.getByTestId(TEST_IDS.CONVERSATIONS_MULTISELECTOR)).getByText( - DEFAULT_CONVERSATION_TITLE - ) - ).toBeVisible(); - - await userEvent.click( - within(screen.getByTestId(TEST_IDS.CONVERSATIONS_MULTISELECTOR)).getByTestId( - 'comboBoxClearButton' - ) - ); - - await userEvent.click(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.SAVE)); - - await waitFor(() => { - expect(screen.queryByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).toBeFalsy(); - }); - expect(mockUseAssistantContext.setAllSystemPrompts).toHaveBeenCalledTimes(1); - expect(mockUseAssistantContext.setConversations).toHaveBeenCalledTimes(1); - expect(mockUseAssistantContext.setConversations).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ - [DEFAULT_CONVERSATION_TITLE]: expect.objectContaining({ - id: DEFAULT_CONVERSATION_TITLE, - apiConfig: expect.objectContaining({ - defaultSystemPromptId: undefined, - }), - }), - }) - ); + it('renders the system prompt text', () => { + expect(screen.getByTestId('systemPromptText')).toHaveTextContent(mockSystemPrompt.name); }); - it('should save new prompt correctly when prompt is removed from a conversation and linked to another conversation in a single transaction', async () => { - const secondMockConversation: Conversation = { - id: 'second', - category: 'assistant', - apiConfig: { - actionTypeId: '.gen-ai', - connectorId: '123', - defaultSystemPromptId: undefined, - }, - title: 'second', - messages: [], - replacements: {}, - }; - const localMockConversations: Record = { - [DEFAULT_CONVERSATION_TITLE]: BASE_CONVERSATION, - [secondMockConversation.title]: secondMockConversation, - }; - - const localMockUseAssistantContext = { - conversations: localMockConversations, - setConversations: jest.fn(), - setAllSystemPrompts: jest.fn(), - allSystemPrompts: mockSystemPrompts, - hero: 'abc', - }; - (useAssistantContext as jest.Mock).mockImplementation(() => ({ - ...localMockUseAssistantContext, - })); - - render( - - - - ); - await userEvent.click(screen.getByTestId('edit')); - await userEvent.click(screen.getByTestId(TEST_IDS.ADD_SYSTEM_PROMPT)); - - expect(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).toBeVisible(); - - await userEvent.type( - within(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_SELECTOR)).getByTestId('comboBoxInput'), - `${mockSystemPrompt.name}[Enter]` - ); - - expect( - within(screen.getByTestId(TEST_IDS.CONVERSATIONS_MULTISELECTOR)).getByText( - DEFAULT_CONVERSATION_TITLE - ) - ).toBeVisible(); - - // removed selected conversation - await userEvent.click( - within(screen.getByTestId(TEST_IDS.CONVERSATIONS_MULTISELECTOR)).getByTestId( - 'comboBoxClearButton' - ) - ); - - // add `second` conversation - await userEvent.type( - within(screen.getByTestId(TEST_IDS.CONVERSATIONS_MULTISELECTOR)).getByTestId( - 'comboBoxInput' - ), - 'second[Enter]' - ); - - await userEvent.click(screen.getByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.SAVE)); - - await waitFor(() => { - expect(screen.queryByTestId(TEST_IDS.SYSTEM_PROMPT_MODAL.ID)).toBeFalsy(); - }); - - expect(localMockUseAssistantContext.setAllSystemPrompts).toHaveBeenCalledTimes(1); - expect(localMockUseAssistantContext.setConversations).toHaveBeenCalledTimes(1); - expect(localMockUseAssistantContext.setConversations).toHaveBeenNthCalledWith(1, { - [DEFAULT_CONVERSATION_TITLE]: expect.objectContaining({ - id: DEFAULT_CONVERSATION_TITLE, - apiConfig: expect.objectContaining({ - defaultSystemPromptId: undefined, - }), - }), - [secondMockConversation.title]: { - ...secondMockConversation, - apiConfig: { - connectorId: '123', - defaultSystemPromptId: mockSystemPrompt.id, - }, - }, - }); + it('renders the clear button', () => { + expect(screen.getByTestId('clearSystemPrompt')).toBeInTheDocument(); }); }); - it('shows the system prompt select when system prompt text is clicked', () => { render( void; setIsSettingsModalVisible: React.Dispatch>; - allSystemPrompts: PromptResponse[]; - refetchConversations?: () => Promise, unknown>>; } const SystemPromptComponent: React.FC = ({ - conversation, + allSystemPrompts, currentSystemPromptId, isSettingsModalVisible, onSystemPromptSelectionChange, setIsSettingsModalVisible, - allSystemPrompts, - refetchConversations, }) => { - const [isCleared, setIsCleared] = useState(false); - const selectedPrompt = useMemo(() => { - if (currentSystemPromptId !== undefined) { - setIsCleared(false); - return allSystemPrompts.find((p) => p.id === currentSystemPromptId); - } else { - return allSystemPrompts.find((p) => p.id === conversation?.apiConfig?.defaultSystemPromptId); - } - }, [allSystemPrompts, conversation?.apiConfig?.defaultSystemPromptId, currentSystemPromptId]); + const selectedPrompt = useMemo( + () => + currentSystemPromptId !== undefined + ? allSystemPrompts.find((p) => p.id === currentSystemPromptId) + : undefined, + [allSystemPrompts, currentSystemPromptId] + ); const handleClearSystemPrompt = useCallback(() => { - if (currentSystemPromptId === undefined) { - setIsCleared(false); - onSystemPromptSelectionChange( - allSystemPrompts.find((p) => p.id === conversation?.apiConfig?.defaultSystemPromptId)?.id - ); - } else { - setIsCleared(true); - onSystemPromptSelectionChange(undefined); - } - }, [ - allSystemPrompts, - conversation?.apiConfig?.defaultSystemPromptId, - currentSystemPromptId, - onSystemPromptSelectionChange, - ]); + onSystemPromptSelectionChange(undefined); + }, [onSystemPromptSelectionChange]); return ( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.test.tsx index 30f3cd12d1c7c..68b305da90057 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.test.tsx @@ -46,9 +46,9 @@ const props: Props = { isNewConversationDefault: true, }, ], - conversation: undefined, isSettingsModalVisible: false, isClearable: true, + onSystemPromptSelectionChange: jest.fn(), selectedPrompt: { id: 'default-system-prompt', content: '', name: '', promptType: 'system' }, setIsSettingsModalVisible: jest.fn(), }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.tsx index 2fa4f0d210055..c567e18a446f4 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.tsx @@ -22,12 +22,9 @@ import { PromptResponse, PromptTypeEnum, } from '@kbn/elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen'; -import { QueryObserverResult } from '@tanstack/react-query'; -import { Conversation } from '../../../../..'; import { getOptions } from '../helpers'; import * as i18n from '../translations'; import { useAssistantContext } from '../../../../assistant_context'; -import { useConversation } from '../../../use_conversation'; import { TEST_IDS } from '../../../constants'; import { PROMPT_CONTEXT_SELECTOR_PREFIX } from '../../../quick_prompts/prompt_context_selector/translations'; import { SYSTEM_PROMPTS_TAB } from '../../../settings/const'; @@ -35,20 +32,14 @@ import { SYSTEM_PROMPTS_TAB } from '../../../settings/const'; export interface Props { allPrompts: PromptResponse[]; compressed?: boolean; - conversation?: Conversation; - selectedPrompt: PromptResponse | undefined; clearSelectedSystemPrompt?: () => void; isClearable?: boolean; - isCleared?: boolean; isDisabled?: boolean; isOpen?: boolean; isSettingsModalVisible: boolean; + selectedPrompt: PromptResponse | undefined; setIsSettingsModalVisible: React.Dispatch>; - onSystemPromptSelectionChange?: (promptId: string | undefined) => void; - onSelectedConversationChange?: (result: Conversation) => void; - setConversationSettings?: React.Dispatch>>; - setConversationsSettingsBulkActions?: React.Dispatch>; - refetchConversations?: () => Promise, unknown>>; + onSystemPromptSelectionChange: (promptId: string | undefined) => void; } const ADD_NEW_SYSTEM_PROMPT = 'ADD_NEW_SYSTEM_PROMPT'; @@ -56,24 +47,16 @@ const ADD_NEW_SYSTEM_PROMPT = 'ADD_NEW_SYSTEM_PROMPT'; const SelectSystemPromptComponent: React.FC = ({ allPrompts, compressed = false, - conversation, - selectedPrompt, clearSelectedSystemPrompt, isClearable = false, - isCleared = false, isDisabled = false, isOpen = false, - refetchConversations, isSettingsModalVisible, onSystemPromptSelectionChange, + selectedPrompt, setIsSettingsModalVisible, - onSelectedConversationChange, - setConversationSettings, - setConversationsSettingsBulkActions, }) => { const { setSelectedSettingsTab } = useAssistantContext(); - const { setApiConfig } = useConversation(); - const allSystemPrompts = useMemo( () => allPrompts.filter((p) => p.promptType === PromptTypeEnum.system), [allPrompts] @@ -83,26 +66,8 @@ const SelectSystemPromptComponent: React.FC = ({ const handleOnBlur = useCallback(() => setIsOpenLocal(false), []); const valueOfSelected = useMemo(() => selectedPrompt?.id, [selectedPrompt?.id]); - // Write the selected system prompt to the conversation config - const setSelectedSystemPrompt = useCallback( - async (promptId?: string) => { - if (conversation && conversation.apiConfig) { - const result = await setApiConfig({ - conversation, - apiConfig: { - ...conversation.apiConfig, - defaultSystemPromptId: promptId, - }, - }); - await refetchConversations?.(); - return result; - } - }, - [conversation, refetchConversations, setApiConfig] - ); - - const addNewSystemPrompt = useMemo(() => { - return { + const addNewSystemPrompt = useMemo( + () => ({ value: ADD_NEW_SYSTEM_PROMPT, inputDisplay: i18n.ADD_NEW_SYSTEM_PROMPT, dropdownDisplay: ( @@ -118,14 +83,12 @@ const SelectSystemPromptComponent: React.FC = ({ ), - }; - }, []); + }), + [] + ); // SuperSelect State/Actions - const options = useMemo( - () => getOptions({ prompts: allSystemPrompts, isCleared }), - [allSystemPrompts, isCleared] - ); + const options = useMemo(() => getOptions(allSystemPrompts), [allSystemPrompts]); const onChange = useCallback( async (selectedSystemPromptId: string) => { @@ -134,38 +97,9 @@ const SelectSystemPromptComponent: React.FC = ({ setSelectedSettingsTab(SYSTEM_PROMPTS_TAB); return; } - // Note: if callback is provided, this component does not persist. Extract to separate component - if (onSystemPromptSelectionChange != null) { - onSystemPromptSelectionChange(selectedSystemPromptId); - } - const result = await setSelectedSystemPrompt(selectedSystemPromptId); - if (result) { - setConversationSettings?.((prev: Record) => { - const newConversationsSettings = Object.entries(prev).reduce< - Record - >((acc, [key, convo]) => { - if (result.title === convo.title) { - acc[result.id] = result; - } else { - acc[key] = convo; - } - return acc; - }, {}); - return newConversationsSettings; - }); - onSelectedConversationChange?.(result); - setConversationsSettingsBulkActions?.({}); - } + onSystemPromptSelectionChange(selectedSystemPromptId); }, - [ - onSelectedConversationChange, - onSystemPromptSelectionChange, - setConversationSettings, - setConversationsSettingsBulkActions, - setIsSettingsModalVisible, - setSelectedSettingsTab, - setSelectedSystemPrompt, - ] + [onSystemPromptSelectionChange, setIsSettingsModalVisible, setSelectedSettingsTab] ); const clearSystemPrompt = useCallback(() => { @@ -234,14 +168,10 @@ const SelectSystemPromptComponent: React.FC = ({ inline-size: 16px; block-size: 16px; border-radius: 16px; - background: ${isCleared - ? euiThemeVars.euiColorLightShade - : euiThemeVars.euiColorMediumShade}; + background: ${euiThemeVars.euiColorMediumShade}; :hover:not(:disabled) { - background: ${isCleared - ? euiThemeVars.euiColorLightShade - : euiThemeVars.euiColorMediumShade}; + background: ${euiThemeVars.euiColorMediumShade}; transform: none; } diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_editor.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_editor.tsx index 5c0e7f8aa3e56..aa507ab2cf8ab 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_editor.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_editor.tsx @@ -32,10 +32,7 @@ import { TEST_IDS } from '../../../constants'; import { ConversationsBulkActions } from '../../../api'; import { getSelectedConversations } from '../system_prompt_settings_management/utils'; import { useSystemPromptEditor } from './use_system_prompt_editor'; -import { - getConversationApiConfig, - getFallbackDefaultSystemPrompt, -} from '../../../use_conversation/helpers'; +import { getConversationApiConfig } from '../../../use_conversation/helpers'; interface Props { connectors: AIConnector[] | undefined; @@ -186,7 +183,7 @@ export const SystemPromptEditorComponent: React.FC = ({ if (selectedSystemPrompt != null) { setConversationSettings((prev) => keyBy( - 'title', + 'id', /* * updatedConversationWithPrompts calculates the present of prompt for * each conversation. Based on the values of selected conversation, it goes @@ -228,9 +225,7 @@ export const SystemPromptEditorComponent: React.FC = ({ conversation: convo, defaultConnector, }).apiConfig, - defaultSystemPromptId: - getDefaultSystemPromptId(convo) ?? - getFallbackDefaultSystemPrompt({ allSystemPrompts: systemPromptSettings })?.id, + defaultSystemPromptId: getDefaultSystemPromptId(convo), }, }; } diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.test.tsx index 5116da2a56207..f203146e8728b 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.test.tsx @@ -133,14 +133,14 @@ describe('SystemPromptSettings', () => { fireEvent.click(getByTestId('change-multi')); expect(setConversationSettings).toHaveReturnedWith({ - [welcomeConvo.title]: { + [welcomeConvo.id]: { ...welcomeConvo, apiConfig: { ...welcomeConvo.apiConfig, defaultSystemPromptId: 'mock-system-prompt-1', }, }, - [alertConvo.title]: { + [alertConvo.id]: { ...alertConvo, apiConfig: { ...alertConvo.apiConfig, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx index 753a941ef4f62..f92ca3fc3c763 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx @@ -172,7 +172,9 @@ export const AssistantSettings: React.FC = React.memo( // If the selected conversation is deleted, we need to select a new conversation to prevent a crash creating a conversation that already exists const isSelectedConversationDeleted = defaultSelectedConversationId && - conversationSettings[defaultSelectedConversationId] == null; + // sometimes the key is a title, so do not rely on conversationSettings[defaultSelectedConversationId] + !Object.values(conversationSettings).some(({ id }) => id === defaultSelectedConversationId); + const newSelectedConversation: Conversation | undefined = Object.values(conversationSettings)[0]; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/upgrade_license_cta/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/upgrade_license_cta/index.tsx index 4908b580552fb..e69b530beaf60 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/upgrade_license_cta/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/upgrade_license_cta/index.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; import { css } from '@emotion/react'; import { HttpSetup } from '@kbn/core-http-browser'; -import { ENTERPRISE } from '../../content/prompts/welcome/translations'; +import { ENTERPRISE } from './translations'; import { UpgradeButtons } from '../../upgrade/upgrade_buttons'; interface OwnProps { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/welcome/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/upgrade_license_cta/translations.ts similarity index 100% rename from x-pack/packages/kbn-elastic-assistant/impl/content/prompts/welcome/translations.ts rename to x-pack/packages/kbn-elastic-assistant/impl/assistant/upgrade_license_cta/translations.ts diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts index a5ae389a40353..3aa8215f0a090 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts @@ -120,10 +120,10 @@ describe('useConversation helpers', () => { expect(result).toEqual(systemPrompts[1]); }); - test('should return the fallback prompt if default new system prompt do not exist', () => { + test('should return undefined if default new system prompt do not exist', () => { const result = getDefaultNewSystemPrompt([systemPrompts[0]]); - expect(result).toEqual(systemPrompts[0]); + expect(result).toEqual(undefined); }); test('should return undefined if default (starred) isNewConversationDefault system prompt does not exist and there are no system prompts', () => { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.ts index dce5a1ab11388..85370e511dfc9 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.ts @@ -10,7 +10,6 @@ import { ApiConfig, PromptResponse } from '@kbn/elastic-assistant-common'; import { Conversation } from '../../assistant_context/types'; import { AIConnector } from '../../connectorland/connector_selector'; import { getGenAiConfig } from '../../connectorland/helpers'; -import { DEFAULT_SYSTEM_PROMPT_NAME } from '../../content/prompts/system/translations'; export interface CodeBlockDetails { type: QueryType; @@ -76,11 +75,10 @@ export const analyzeMarkdown = (markdown: string): CodeBlockDetails[] => { * * @param allSystemPrompts All available System Prompts */ -export const getDefaultNewSystemPrompt = (allSystemPrompts: PromptResponse[]) => { - const fallbackSystemPrompt = allSystemPrompts.find( - (prompt) => prompt.name === DEFAULT_SYSTEM_PROMPT_NAME - ); - return allSystemPrompts.find((prompt) => prompt.isNewConversationDefault) ?? fallbackSystemPrompt; +export const getDefaultNewSystemPrompt = ( + allSystemPrompts: PromptResponse[] +): PromptResponse | undefined => { + return allSystemPrompts.find((prompt) => prompt.isNewConversationDefault); }; /** @@ -103,24 +101,6 @@ export const getDefaultSystemPrompt = ({ return conversationSystemPrompt; }; -/** - * Returns the default system prompt - * - * @param allSystemPrompts All available System Prompts - * @param conversation Conversation to get the default system prompt for - */ -export const getFallbackDefaultSystemPrompt = ({ - allSystemPrompts, -}: { - allSystemPrompts: PromptResponse[]; -}): PromptResponse | undefined => { - const fallbackSystemPrompt = allSystemPrompts.find( - (prompt) => prompt.name === DEFAULT_SYSTEM_PROMPT_NAME - ); - - return fallbackSystemPrompt; -}; - /** * Returns the API config for a conversation * diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_current_conversation/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_current_conversation/index.test.tsx index 36a6ed5a10a3a..0f04068a89ca2 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_current_conversation/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_current_conversation/index.test.tsx @@ -72,17 +72,31 @@ describe('useCurrentConversation', () => { const { result } = setupHook(); expect(result.current.currentConversation).toBeUndefined(); - expect(result.current.currentSystemPromptId).toBeUndefined(); + expect(result.current.currentSystemPrompt).toBeUndefined(); }); - it('should set the current system prompt ID when the prompt selection changes', () => { - const { result } = setupHook(); + it('should set the current system prompt ID when the prompt selection changes', async () => { + const conversationId = 'welcome_id'; + const conversation = mockData.welcome_id; + mockUseConversation.getConversation.mockResolvedValue(conversation); + + const { result } = setupHook({ + conversationId, + conversations: { [conversationId]: conversation }, + }); - act(() => { - result.current.setCurrentSystemPromptId('prompt-id'); + await act(async () => { + await result.current.setCurrentSystemPromptId('prompt-id'); }); - expect(result.current.currentSystemPromptId).toBe('prompt-id'); + expect(mockUseConversation.setApiConfig).toHaveBeenCalledWith({ + conversation, + apiConfig: { + ...conversation.apiConfig, + defaultSystemPromptId: 'prompt-id', + }, + }); + expect(defaultProps.refetchCurrentUserConversations).toHaveBeenCalled(); }); it('should fetch and set the current conversation', async () => { @@ -136,7 +150,7 @@ describe('useCurrentConversation', () => { }); expect(result.current.currentConversation).toEqual(conversation); - expect(result.current.currentSystemPromptId).toBe('something-crazy'); + expect(result.current.currentSystemPrompt?.id).toBe('something-crazy'); }); it('should non-existing handle conversation selection', async () => { @@ -169,7 +183,7 @@ describe('useCurrentConversation', () => { }); expect(result.current.currentConversation).toEqual(mockData.welcome_id); - expect(result.current.currentSystemPromptId).toBe('system-prompt-id'); + expect(result.current.currentSystemPrompt?.id).toBe('system-prompt-id'); }); it('should create a new conversation', async () => { @@ -210,6 +224,115 @@ describe('useCurrentConversation', () => { expect(mockUseConversation.createConversation).toHaveBeenCalled(); }); + it('should create a new conversation using the connector portion of the apiConfig of the current conversation', async () => { + const newConversation = { + ...mockData.welcome_id, + id: 'new-id', + title: 'NEW_CHAT', + messages: [], + } as Conversation; + mockUseConversation.createConversation.mockResolvedValue(newConversation); + + const { result } = setupHook({ + conversations: { + 'old-id': { + ...mockData.welcome_id, + id: 'old-id', + title: 'Old Chat', + messages: [], + } as Conversation, + }, + conversationId: 'old-id', + refetchCurrentUserConversations: jest.fn().mockResolvedValue({ + data: { + 'old-id': { + ...mockData.welcome_id, + id: 'old-id', + title: 'Old Chat', + messages: [], + } as Conversation, + [newConversation.id]: newConversation, + }, + }), + }); + + await act(async () => { + await result.current.handleCreateConversation(); + }); + const { defaultSystemPromptId: _, ...everythingExceptSystemPromptId } = + mockData.welcome_id.apiConfig; + + expect(mockUseConversation.createConversation).toHaveBeenCalledWith({ + apiConfig: everythingExceptSystemPromptId, + title: 'New chat', + }); + }); + + it('should create a new conversation with correct isNewConversationDefault: true system prompt', async () => { + const newConversation = { + ...mockData.welcome_id, + id: 'new-id', + title: 'NEW_CHAT', + messages: [], + } as Conversation; + mockUseConversation.createConversation.mockResolvedValue(newConversation); + + const { result } = setupHook({ + conversations: { + 'old-id': { + ...mockData.welcome_id, + id: 'old-id', + title: 'Old Chat', + messages: [], + } as Conversation, + }, + allSystemPrompts: [ + { + timestamp: '2024-09-10T15:52:24.761Z', + users: [ + { + id: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + name: 'elastic', + }, + ], + content: 'Address the user as Mr Orange in each response', + isNewConversationDefault: true, + updatedAt: '2024-09-10T22:07:44.915Z', + id: 'LBOi3JEBy3uD9EGi1d_G', + name: 'Call me Orange', + promptType: 'system', + consumer: 'securitySolutionUI', + }, + ], + conversationId: 'old-id', + refetchCurrentUserConversations: jest.fn().mockResolvedValue({ + data: { + 'old-id': { + ...mockData.welcome_id, + id: 'old-id', + title: 'Old Chat', + messages: [], + } as Conversation, + [newConversation.id]: newConversation, + }, + }), + }); + + await act(async () => { + await result.current.handleCreateConversation(); + }); + const { defaultSystemPromptId: _, ...everythingExceptSystemPromptId } = + mockData.welcome_id.apiConfig; + + expect(mockUseConversation.createConversation).toHaveBeenCalledWith({ + apiConfig: { + ...everythingExceptSystemPromptId, + defaultSystemPromptId: 'LBOi3JEBy3uD9EGi1d_G', + }, + title: 'New chat', + }); + }); + it('should delete a conversation', async () => { const conversationTitle = 'Test Conversation'; const conversation = { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_current_conversation/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_current_conversation/index.tsx index 3f08b0a332ad6..d599190ca5623 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_current_conversation/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_current_conversation/index.tsx @@ -13,7 +13,7 @@ import deepEqual from 'fast-deep-equal'; import { AIConnector } from '../../connectorland/connector_selector'; import { getGenAiConfig } from '../../connectorland/helpers'; import { NEW_CHAT } from '../conversations/conversation_sidepanel/translations'; -import { getDefaultSystemPrompt } from '../use_conversation/helpers'; +import { getDefaultNewSystemPrompt, getDefaultSystemPrompt } from '../use_conversation/helpers'; import { useConversation } from '../use_conversation'; import { sleep } from '../helpers'; import { Conversation, WELCOME_CONVERSATION_TITLE } from '../../..'; @@ -31,7 +31,7 @@ export interface Props { interface UseCurrentConversation { currentConversation: Conversation | undefined; - currentSystemPromptId: string | undefined; + currentSystemPrompt: PromptResponse | undefined; handleCreateConversation: () => Promise; handleOnConversationDeleted: (cTitle: string) => Promise; handleOnConversationSelected: ({ cId, cTitle }: { cId: string; cTitle: string }) => Promise; @@ -41,7 +41,7 @@ interface UseCurrentConversation { isStreamRefetch?: boolean; }) => Promise; setCurrentConversation: Dispatch>; - setCurrentSystemPromptId: Dispatch>; + setCurrentSystemPromptId: (promptId: string | undefined) => void; } /** @@ -83,12 +83,22 @@ export const useCurrentConversation = ({ [allSystemPrompts, currentConversation] ); - const [currentSystemPromptId, setCurrentSystemPromptId] = useState( - currentSystemPrompt?.id + // Write the selected system prompt to the conversation config + const setCurrentSystemPromptId = useCallback( + async (promptId?: string) => { + if (currentConversation && currentConversation.apiConfig) { + await setApiConfig({ + conversation: currentConversation, + apiConfig: { + ...currentConversation.apiConfig, + defaultSystemPromptId: promptId, + }, + }); + await refetchCurrentUserConversations(); + } + }, + [currentConversation, refetchCurrentUserConversations, setApiConfig] ); - useEffect(() => { - setCurrentSystemPromptId(currentSystemPrompt?.id); - }, [currentSystemPrompt?.id]); /** * END SYSTEM PROMPT @@ -248,10 +258,20 @@ export const useCurrentConversation = ({ }); return; } + const newSystemPrompt = getDefaultNewSystemPrompt(allSystemPrompts); const newConversation = await createConversation({ title: NEW_CHAT, - apiConfig: currentConversation?.apiConfig, + ...(currentConversation?.apiConfig != null && + currentConversation?.apiConfig?.actionTypeId != null + ? { + apiConfig: { + connectorId: currentConversation.apiConfig.connectorId, + actionTypeId: currentConversation.apiConfig.actionTypeId, + ...(newSystemPrompt?.id != null ? { defaultSystemPromptId: newSystemPrompt.id } : {}), + }, + } + : {}), }); if (newConversation) { @@ -263,6 +283,7 @@ export const useCurrentConversation = ({ await refetchCurrentUserConversations(); } }, [ + allSystemPrompts, conversations, createConversation, currentConversation?.apiConfig, @@ -272,7 +293,7 @@ export const useCurrentConversation = ({ return { currentConversation, - currentSystemPromptId, + currentSystemPrompt, handleCreateConversation, handleOnConversationDeleted, handleOnConversationSelected, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx index b9f2f789f1df8..4217a3d9dc2b8 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx @@ -5,7 +5,6 @@ * 2.0. */ -import { EuiCommentProps } from '@elastic/eui'; import type { HttpSetup } from '@kbn/core-http-browser'; import { omit } from 'lodash/fp'; import React, { useCallback, useMemo, useState, useRef } from 'react'; @@ -21,7 +20,12 @@ import type { RegisterPromptContext, UnRegisterPromptContext, } from '../assistant/prompt_context/types'; -import type { Conversation } from './types'; +import { + AssistantAvailability, + AssistantTelemetry, + Conversation, + GetAssistantMessages, +} from './types'; import { DEFAULT_ASSISTANT_TITLE } from '../assistant/translations'; import { CodeBlockDetails } from '../assistant/use_conversation/helpers'; import { PromptContextTemplate } from '../assistant/prompt_context/types'; @@ -34,7 +38,6 @@ import { STREAMING_LOCAL_STORAGE_KEY, TRACE_OPTIONS_SESSION_STORAGE_KEY, } from './constants'; -import { AssistantAvailability, AssistantTelemetry } from './types'; import { useCapabilities } from '../assistant/api/capabilities/use_capabilities'; import { WELCOME_CONVERSATION_TITLE } from '../assistant/use_conversation/translations'; import { SettingsTabs } from '../assistant/settings/types'; @@ -63,16 +66,7 @@ export interface AssistantProviderProps { basePromptContexts?: PromptContextTemplate[]; docLinks: Omit; children: React.ReactNode; - getComments: (commentArgs: { - abortStream: () => void; - currentConversation?: Conversation; - isFetchingResponse: boolean; - refetchCurrentConversation: ({ isStreamRefetch }: { isStreamRefetch?: boolean }) => void; - regenerateMessage: (conversationId: string) => void; - showAnonymizedValues: boolean; - setIsStreaming: (isStreaming: boolean) => void; - currentUserAvatar?: UserAvatar; - }) => EuiCommentProps[]; + getComments: GetAssistantMessages; http: HttpSetup; baseConversations: Record; nameSpace?: string; @@ -102,16 +96,7 @@ export interface UseAssistantContext { docLinks: Omit; basePath: string; baseConversations: Record; - getComments: (commentArgs: { - abortStream: () => void; - currentConversation?: Conversation; - isFetchingResponse: boolean; - refetchCurrentConversation: ({ isStreamRefetch }: { isStreamRefetch?: boolean }) => void; - regenerateMessage: () => void; - showAnonymizedValues: boolean; - currentUserAvatar?: UserAvatar; - setIsStreaming: (isStreaming: boolean) => void; - }) => EuiCommentProps[]; + getComments: GetAssistantMessages; http: HttpSetup; knowledgeBase: KnowledgeBaseConfig; getLastConversationId: (conversationTitle?: string) => string; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx index 790087158102e..c49ab38452dc0 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx @@ -6,6 +6,8 @@ */ import { ApiConfig, Message, Replacements } from '@kbn/elastic-assistant-common'; +import { EuiCommentProps } from '@elastic/eui'; +import { UserAvatar } from '.'; export interface MessagePresentation { delay?: number; @@ -67,3 +69,15 @@ export interface AssistantAvailability { // When true, user has `Edit` privilege for `AnonymizationFields` hasUpdateAIAssistantAnonymization: boolean; } + +export type GetAssistantMessages = (commentArgs: { + abortStream: () => void; + currentConversation?: Conversation; + isFetchingResponse: boolean; + refetchCurrentConversation: ({ isStreamRefetch }: { isStreamRefetch?: boolean }) => void; + regenerateMessage: (conversationId: string) => void; + showAnonymizedValues: boolean; + currentUserAvatar?: UserAvatar; + setIsStreaming: (isStreaming: boolean) => void; + systemPromptContent?: string; +}) => EuiCommentProps[]; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/read_only_context_viewer/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/read_only_context_viewer/index.test.tsx deleted file mode 100644 index 101b5058b5481..0000000000000 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/read_only_context_viewer/index.test.tsx +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { render, screen } from '@testing-library/react'; - -import { SYSTEM_PROMPT_CONTEXT_NON_I18N } from '../../content/prompts/system/translations'; -import { ReadOnlyContextViewer, Props } from '.'; - -const defaultProps: Props = { - rawData: 'this content is NOT anonymized', -}; - -describe('ReadOnlyContextViewer', () => { - it('renders the context with the correct formatting', () => { - render(); - - const contextBlock = screen.getByTestId('readOnlyContextViewer'); - - expect(contextBlock.textContent).toBe(SYSTEM_PROMPT_CONTEXT_NON_I18N(defaultProps.rawData)); - }); -}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/read_only_context_viewer/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/read_only_context_viewer/index.tsx index 0fd2da1942bc5..5c4cd6e06f1cc 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/read_only_context_viewer/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/read_only_context_viewer/index.tsx @@ -7,8 +7,7 @@ import { EuiCodeBlock } from '@elastic/eui'; import React from 'react'; - -import { SYSTEM_PROMPT_CONTEXT_NON_I18N } from '../../content/prompts/system/translations'; +import { SYSTEM_PROMPT_CONTEXT_NON_I18N } from '../../assistant/prompt/translations'; export interface Props { rawData: string; diff --git a/x-pack/packages/kbn-elastic-assistant/index.ts b/x-pack/packages/kbn-elastic-assistant/index.ts index 7cd882cd633b8..0baff57648cc8 100644 --- a/x-pack/packages/kbn-elastic-assistant/index.ts +++ b/x-pack/packages/kbn-elastic-assistant/index.ts @@ -106,6 +106,8 @@ export type { Conversation, /** Message interface on the client */ ClientMessage, + /** Function type to return messages UI */ + GetAssistantMessages, } from './impl/assistant_context/types'; /** diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/helpers.ts index 9e0bf457d528e..9e52b4a7414a6 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/helpers.ts @@ -23,6 +23,10 @@ export const getUpdateScript = ({ ctx._source.api_config.remove('model'); ctx._source.api_config.remove('provider'); } + // an update to apiConfig that does not contain defaultSystemPromptId should remove it + if (params.assignEmpty == true || (params.containsKey('api_config') && !params.api_config.containsKey('default_system_prompt_id'))) { + ctx._source.api_config.remove('default_system_prompt_id'); + } if (params.assignEmpty == true || params.api_config.containsKey('action_type_id')) { ctx._source.api_config.action_type_id = params.api_config.action_type_id; } diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts index d3e4fff018abb..c44329c28db48 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts @@ -134,10 +134,6 @@ describe('transformToUpdateScheme', () => { jest.clearAllMocks(); }); - afterEach(() => { - jest.clearAllMocks(); - }); - test('it returns a transformed conversation with converted string datetime to ISO from the client', async () => { const conversation: ConversationUpdateProps = getUpdateConversationOptionsMock(); const existingConversation = getConversationResponseMock(); @@ -199,4 +195,43 @@ describe('transformToUpdateScheme', () => { }; expect(transformed).toEqual(expected); }); + test('it does not pass api_config if apiConfig is not updated', async () => { + const conversation: ConversationUpdateProps = getUpdateConversationOptionsMock(); + const existingConversation = getConversationResponseMock(); + (getConversation as unknown as jest.Mock).mockResolvedValueOnce(existingConversation); + + const updateAt = new Date().toISOString(); + const transformed = transformToUpdateScheme(updateAt, { + id: conversation.id, + messages: [ + { + content: 'Message 3', + role: 'user', + timestamp: '2011-10-05T14:48:00.000Z', + traceData: { + traceId: 'something', + transactionId: 'something', + }, + }, + ], + }); + const expected: UpdateConversationSchema = { + id: conversation.id, + updated_at: updateAt, + messages: [ + { + '@timestamp': '2011-10-05T14:48:00.000Z', + content: 'Message 3', + is_error: undefined, + reader: undefined, + role: 'user', + trace_data: { + trace_id: 'something', + transaction_id: 'something', + }, + }, + ], + }; + expect(transformed).toEqual(expected); + }); }); diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts index 47a9594f42cab..807fea2decd99 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts @@ -115,13 +115,17 @@ export const transformToUpdateScheme = ( id, updated_at: updatedAt, title, - api_config: { - action_type_id: apiConfig?.actionTypeId, - connector_id: apiConfig?.connectorId, - default_system_prompt_id: apiConfig?.defaultSystemPromptId, - model: apiConfig?.model, - provider: apiConfig?.provider, - }, + ...(apiConfig + ? { + api_config: { + action_type_id: apiConfig?.actionTypeId, + connector_id: apiConfig?.connectorId, + default_system_prompt_id: apiConfig?.defaultSystemPromptId, + model: apiConfig?.model, + provider: apiConfig?.provider, + }, + } + : {}), exclude_from_last_conversation_storage: excludeFromLastConversationStorage, replacements: replacements ? Object.keys(replacements).map((key) => ({ diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts index 9eae749bfa58b..060616d280efe 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts @@ -54,6 +54,7 @@ export interface AgentExecutorParams { request: KibanaRequest; response?: KibanaResponseFactory; size?: number; + systemPrompt?: string; traceOptions?: TraceOptions; responseLanguage?: string; } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts index d0fe4f5097dfe..0222720d95e37 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts @@ -18,12 +18,7 @@ import { getLlmClass } from '../../../../routes/utils'; import { EsAnonymizationFieldsSchema } from '../../../../ai_assistant_data_clients/anonymization_fields/types'; import { AssistantToolParams } from '../../../../types'; import { AgentExecutor } from '../../executors/types'; -import { - bedrockToolCallingAgentPrompt, - geminiToolCallingAgentPrompt, - openAIFunctionAgentPrompt, - structuredChatAgentPrompt, -} from './prompts'; +import { formatPrompt, formatPromptStructured, systemPrompts } from './prompts'; import { GraphInputs } from './types'; import { getDefaultAssistantGraph } from './graph'; import { invokeGraph, streamGraph } from './helpers'; @@ -52,6 +47,7 @@ export const callAssistantGraph: AgentExecutor = async ({ replacements, request, size, + systemPrompt, traceOptions, responseLanguage = 'English', }) => { @@ -141,7 +137,7 @@ export const callAssistantGraph: AgentExecutor = async ({ ? await createOpenAIFunctionsAgent({ llm: createLlmInstance(), tools, - prompt: openAIFunctionAgentPrompt, + prompt: formatPrompt(systemPrompts.openai, systemPrompt), streamRunnable: isStream, }) : llmType && ['bedrock', 'gemini'].includes(llmType) && bedrockChatEnabled @@ -149,13 +145,15 @@ export const callAssistantGraph: AgentExecutor = async ({ llm: createLlmInstance(), tools, prompt: - llmType === 'bedrock' ? bedrockToolCallingAgentPrompt : geminiToolCallingAgentPrompt, + llmType === 'bedrock' + ? formatPrompt(systemPrompts.bedrock, systemPrompt) + : formatPrompt(systemPrompts.gemini, systemPrompt), streamRunnable: isStream, }) : await createStructuredChatAgent({ llm: createLlmInstance(), tools, - prompt: structuredChatAgentPrompt, + prompt: formatPromptStructured(systemPrompts.structuredChat, systemPrompt), streamRunnable: isStream, }); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/translations.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/translations.ts new file mode 100644 index 0000000000000..ae8e3c18c2217 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/translations.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +// TODO determine whether or not system prompts should be i18n'd +const YOU_ARE_A_HELPFUL_EXPERT_ASSISTANT = + 'You are a security analyst and expert in resolving security incidents. Your role is to assist by answering questions about Elastic Security.'; +const IF_YOU_DONT_KNOW_THE_ANSWER = 'Do not answer questions unrelated to Elastic Security.'; + +export const DEFAULT_SYSTEM_PROMPT = `${YOU_ARE_A_HELPFUL_EXPERT_ASSISTANT} ${IF_YOU_DONT_KNOW_THE_ANSWER}`; + +export const GEMINI_SYSTEM_PROMPT = + `ALWAYS use the provided tools, as they have access to the latest data and syntax.` + + "The final response is the only output the user sees and should be a complete answer to the user's question. Do not leave out important tool output. The final response should never be empty. Don't forget to use tools."; +export const BEDROCK_SYSTEM_PROMPT = `Use tools as often as possible, as they have access to the latest data and syntax. Always return value from ESQLKnowledgeBaseTool as is. Never return tags in the response, but make sure to include tags content in the response. Do not reflect on the quality of the returned search results in your response.`; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts index 9f0ff1b7a51f8..eb52c227421fc 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts @@ -6,69 +6,95 @@ */ import { ChatPromptTemplate } from '@langchain/core/prompts'; +import { + BEDROCK_SYSTEM_PROMPT, + DEFAULT_SYSTEM_PROMPT, + GEMINI_SYSTEM_PROMPT, +} from './nodes/translations'; -export const openAIFunctionAgentPrompt = ChatPromptTemplate.fromMessages([ - ['system', 'You are a helpful assistant'], - ['placeholder', '{chat_history}'], - ['human', '{input}'], - ['placeholder', '{agent_scratchpad}'], -]); - -export const bedrockToolCallingAgentPrompt = ChatPromptTemplate.fromMessages([ - [ - 'system', - 'You are a helpful assistant. ALWAYS use the provided tools. Use tools as often as possible, as they have access to the latest data and syntax. Always return value from ESQLKnowledgeBaseTool as is. Never return tags in the response, but make sure to include tags content in the response. Do not reflect on the quality of the returned search results in your response.', - ], - ['placeholder', '{chat_history}'], - ['human', '{input}'], - ['placeholder', '{agent_scratchpad}'], -]); - -export const geminiToolCallingAgentPrompt = ChatPromptTemplate.fromMessages([ - [ - 'system', - 'You are a helpful assistant. ALWAYS use the provided tools. Use tools as often as possible, as they have access to the latest data and syntax.\n\n' + - "The final response will be the only output the user sees and should be a complete answer to the user's question, as if you were responding to the user's initial question. The final response should never be empty.", - ], - ['placeholder', '{chat_history}'], - ['human', '{input}'], - ['placeholder', '{agent_scratchpad}'], -]); - -export const structuredChatAgentPrompt = ChatPromptTemplate.fromMessages([ - [ - 'system', - 'Respond to the human as helpfully and accurately as possible. You have access to the following tools:\n\n' + - '{tools}\n\n' + - `The tool action_input should ALWAYS follow the tool JSON schema args.\n\n` + - 'Valid "action" values: "Final Answer" or {tool_names}\n\n' + - 'Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input strictly adhering to the tool JSON schema args).\n\n' + - 'Provide only ONE action per $JSON_BLOB, as shown:\n\n' + - '```\n\n' + - '{{\n\n' + - ' "action": $TOOL_NAME,\n\n' + - ' "action_input": $TOOL_INPUT\n\n' + - '}}\n\n' + - '```\n\n' + - 'Follow this format:\n\n' + - 'Question: input question to answer\n\n' + - 'Thought: consider previous and subsequent steps\n\n' + - 'Action:\n\n' + - '```\n\n' + - '$JSON_BLOB\n\n' + - '```\n\n' + - 'Observation: action result\n\n' + - '... (repeat Thought/Action/Observation N times)\n\n' + - 'Thought: I know what to respond\n\n' + - 'Action:\n\n' + - '```\n\n' + - '{{\n\n' + - ' "action": "Final Answer",\n\n' + - // important, no new line here - ' "action_input": "Final response to human"' + - '}}\n\n' + - 'Begin! Reminder to ALWAYS respond with a valid json blob of a single action with no additional output. When using tools, ALWAYS input the expected JSON schema args. Your answer will be parsed as JSON, so never use double quotes within the output and instead use backticks. Single quotes may be used, such as apostrophes. Response format is Action:```$JSON_BLOB```then Observation', - ], - ['placeholder', '{chat_history}'], - ['human', '{input}\n\n{agent_scratchpad}\n\n(reminder to respond in a JSON blob no matter what)'], -]); +export const formatPrompt = (prompt: string, additionalPrompt?: string) => + ChatPromptTemplate.fromMessages([ + ['system', additionalPrompt ? `${prompt}\n\n${additionalPrompt}` : prompt], + ['placeholder', '{chat_history}'], + ['human', '{input}'], + ['placeholder', '{agent_scratchpad}'], + ]); + +export const systemPrompts = { + openai: DEFAULT_SYSTEM_PROMPT, + bedrock: `${DEFAULT_SYSTEM_PROMPT} ${BEDROCK_SYSTEM_PROMPT}`, + gemini: `${DEFAULT_SYSTEM_PROMPT} ${GEMINI_SYSTEM_PROMPT}`, + structuredChat: `Respond to the human as helpfully and accurately as possible. You have access to the following tools: + +{tools} + +The tool action_input should ALWAYS follow the tool JSON schema args. + +Valid "action" values: "Final Answer" or {tool_names} + +Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input strictly adhering to the tool JSON schema args). + +Provide only ONE action per $JSON_BLOB, as shown: + +\`\`\` + +{{ + + "action": $TOOL_NAME, + + "action_input": $TOOL_INPUT + +}} + +\`\`\` + +Follow this format: + +Question: input question to answer + +Thought: consider previous and subsequent steps + +Action: + +\`\`\` + +$JSON_BLOB + +\`\`\` + +Observation: action result + +... (repeat Thought/Action/Observation N times) + +Thought: I know what to respond + +Action: + +\`\`\` + +{{ + + "action": "Final Answer", + + "action_input": "Final response to human"}} + +Begin! Reminder to ALWAYS respond with a valid json blob of a single action with no additional output. When using tools, ALWAYS input the expected JSON schema args. Your answer will be parsed as JSON, so never use double quotes within the output and instead use backticks. Single quotes may be used, such as apostrophes. Response format is Action:\`\`\`$JSON_BLOB\`\`\`then Observation`, +}; + +export const openAIFunctionAgentPrompt = formatPrompt(systemPrompts.openai); + +export const bedrockToolCallingAgentPrompt = formatPrompt(systemPrompts.bedrock); + +export const geminiToolCallingAgentPrompt = formatPrompt(systemPrompts.gemini); + +export const formatPromptStructured = (prompt: string, additionalPrompt?: string) => + ChatPromptTemplate.fromMessages([ + ['system', additionalPrompt ? `${prompt}\n\n${additionalPrompt}` : prompt], + ['placeholder', '{chat_history}'], + [ + 'human', + '{input}\n\n{agent_scratchpad}\n\n(reminder to respond in a JSON blob no matter what)', + ], + ]); + +export const structuredChatAgentPrompt = formatPromptStructured(systemPrompts.structuredChat); diff --git a/x-pack/plugins/elastic_assistant/server/routes/helpers.ts b/x-pack/plugins/elastic_assistant/server/routes/helpers.ts index fba788df5cc2e..cdfa3ad26293f 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/helpers.ts @@ -28,6 +28,9 @@ import { AwaitedProperties, PublicMethodsOf } from '@kbn/utility-types'; import { ActionsClient } from '@kbn/actions-plugin/server'; import { AssistantFeatureKey } from '@kbn/elastic-assistant-common/impl/capabilities'; import { getLangSmithTracer } from '@kbn/langchain/server/tracers/langsmith'; +import { FindResponse } from '../ai_assistant_data_clients/find'; +import { EsPromptsSchema } from '../ai_assistant_data_clients/prompts/types'; +import { AIAssistantDataClient } from '../ai_assistant_data_clients'; import { MINIMUM_AI_ASSISTANT_LICENSE } from '../../common/constants'; import { ESQL_RESOURCE } from './knowledge_base/constants'; import { buildResponse, getLlmType } from './utils'; @@ -214,6 +217,39 @@ export const appendMessageToConversation = async ({ return updatedConversation; }; +export interface GetSystemPromptFromUserConversationParams { + conversationsDataClient: AIAssistantConversationsDataClient; + conversationId: string; + promptsDataClient: AIAssistantDataClient; +} +const extractPromptFromESResult = (result: FindResponse): string | undefined => { + if (result.total > 0 && result.data.hits.hits.length > 0) { + return result.data.hits.hits[0]._source?.content; + } + return undefined; +}; + +export const getSystemPromptFromUserConversation = async ({ + conversationsDataClient, + conversationId, + promptsDataClient, +}: GetSystemPromptFromUserConversationParams): Promise => { + const conversation = await conversationsDataClient.getConversation({ id: conversationId }); + if (!conversation) { + return undefined; + } + const currentSystemPromptId = conversation.apiConfig?.defaultSystemPromptId; + if (!currentSystemPromptId) { + return undefined; + } + const result = await promptsDataClient.findDocuments({ + perPage: 1, + page: 1, + filter: `_id: "${currentSystemPromptId}"`, + }); + return extractPromptFromESResult(result); +}; + export interface AppendAssistantMessageToConversationParams { conversationsDataClient: AIAssistantConversationsDataClient; messageContent: string; @@ -300,6 +336,7 @@ export interface LangChainExecuteParams { getElser: GetElser; response: KibanaResponseFactory; responseLanguage?: string; + systemPrompt?: string; } export const langChainExecute = async ({ messages, @@ -319,6 +356,7 @@ export const langChainExecute = async ({ response, responseLanguage, isStream = true, + systemPrompt, }: LangChainExecuteParams) => { // Fetch any tools registered by the request's originating plugin const pluginName = getPluginNameFromRequest({ @@ -389,6 +427,7 @@ export const langChainExecute = async ({ replacements, responseLanguage, size: request.body.size, + systemPrompt, traceOptions: { projectName: request.body.langSmithProject, tracers: getLangSmithTracer({ diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts index 12e854d5d0bf3..d19127be0d7e8 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts @@ -79,6 +79,9 @@ const mockContext = { appendConversationMessages: appendConversationMessages.mockResolvedValue(existingConversation), }), + getAIAssistantPromptsDataClient: jest.fn().mockResolvedValue({ + findDocuments: jest.fn(), + }), getAIAssistantAnonymizationFieldsDataClient: jest.fn().mockResolvedValue({ findDocuments: jest.fn().mockResolvedValue(getFindAnonymizationFieldsResultWithSingleHit()), }), diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index c8099e6e7f2fe..38df73b7d25b6 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -21,7 +21,11 @@ import { INVOKE_ASSISTANT_ERROR_EVENT } from '../lib/telemetry/event_based_telem import { POST_ACTIONS_CONNECTOR_EXECUTE } from '../../common/constants'; import { buildResponse } from '../lib/build_response'; import { ElasticAssistantRequestHandlerContext, GetElser } from '../types'; -import { appendAssistantMessageToConversation, langChainExecute } from './helpers'; +import { + appendAssistantMessageToConversation, + getSystemPromptFromUserConversation, + langChainExecute, +} from './helpers'; export const postActionsConnectorExecuteRoute = ( router: IRouter, @@ -89,6 +93,7 @@ export const postActionsConnectorExecuteRoute = ( const conversationsDataClient = await assistantContext.getAIAssistantConversationsDataClient(); + const promptsDataClient = await assistantContext.getAIAssistantPromptsDataClient(); onLlmResponse = async ( content: string, @@ -106,7 +111,14 @@ export const postActionsConnectorExecuteRoute = ( }); } }; - + let systemPrompt; + if (conversationsDataClient && promptsDataClient && conversationId) { + systemPrompt = await getSystemPromptFromUserConversation({ + conversationsDataClient, + conversationId, + promptsDataClient, + }); + } return await langChainExecute({ abortSignal, isStream: request.body.subAction !== 'invokeAI', @@ -124,6 +136,7 @@ export const postActionsConnectorExecuteRoute = ( request, response, telemetry, + systemPrompt, }); } catch (err) { logger.error(err); diff --git a/x-pack/plugins/elastic_assistant/server/routes/prompts/find_route.ts b/x-pack/plugins/elastic_assistant/server/routes/prompts/find_route.ts index 142b63a7d04b5..848680be662a3 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/prompts/find_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/prompts/find_route.ts @@ -59,7 +59,11 @@ export const findPromptsRoute = (router: ElasticAssistantPluginRouter, logger: L page: query.page, sortField: query.sort_field, sortOrder: query.sort_order, - filter: query.filter ? decodeURIComponent(query.filter) : undefined, + filter: query.filter + ? `${decodeURIComponent( + query.filter + )} and not (prompt_type: "system" and is_default: true)` + : 'not (prompt_type: "system" and is_default: true)', fields: query.fields, }); diff --git a/x-pack/plugins/security_solution/public/assistant/content/prompts/system/index.tsx b/x-pack/plugins/security_solution/public/assistant/content/prompts/system/index.tsx deleted file mode 100644 index ee9d4018365c5..0000000000000 --- a/x-pack/plugins/security_solution/public/assistant/content/prompts/system/index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { - PromptTypeEnum, - type PromptResponse, -} from '@kbn/elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen'; -import { APP_UI_ID } from '../../../../../common'; -import { - DEFAULT_SYSTEM_PROMPT_NAME, - DEFAULT_SYSTEM_PROMPT_NON_I18N, - SUPERHERO_SYSTEM_PROMPT_NAME, - SUPERHERO_SYSTEM_PROMPT_NON_I18N, -} from './translations'; - -/** - * Base System Prompts for Security Solution. - */ -export const BASE_SECURITY_SYSTEM_PROMPTS: PromptResponse[] = [ - { - id: 'default-system-prompt', - content: DEFAULT_SYSTEM_PROMPT_NON_I18N, - name: DEFAULT_SYSTEM_PROMPT_NAME, - promptType: PromptTypeEnum.system, - isDefault: true, - isNewConversationDefault: true, - consumer: APP_UI_ID, - }, - { - id: 'CB9FA555-B59F-4F71-AFF9-8A891AC5BC28', - content: SUPERHERO_SYSTEM_PROMPT_NON_I18N, - name: SUPERHERO_SYSTEM_PROMPT_NAME, - promptType: PromptTypeEnum.system, - consumer: APP_UI_ID, - isDefault: true, - }, -]; diff --git a/x-pack/plugins/security_solution/public/assistant/content/prompts/system/translations.ts b/x-pack/plugins/security_solution/public/assistant/content/prompts/system/translations.ts deleted file mode 100644 index b132a8e83770a..0000000000000 --- a/x-pack/plugins/security_solution/public/assistant/content/prompts/system/translations.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; - -export const YOU_ARE_A_HELPFUL_EXPERT_ASSISTANT = i18n.translate( - 'xpack.securitySolution.assistant.content.prompts.system.youAreAHelpfulExpertAssistant', - { - defaultMessage: - 'You are a helpful, expert assistant who answers questions about Elastic Security.', - } -); - -export const IF_YOU_DONT_KNOW_THE_ANSWER = i18n.translate( - 'xpack.securitySolution.assistant.content.prompts.system.ifYouDontKnowTheAnswer', - { - defaultMessage: 'Do not answer questions unrelated to Elastic Security.', - } -); - -export const SUPERHERO_PERSONALITY = i18n.translate( - 'xpack.securitySolution.assistant.content.prompts.system.superheroPersonality', - { - defaultMessage: - 'Provide the most detailed and relevant answer possible, as if you were relaying this information back to a cyber security expert.', - } -); - -export const FORMAT_OUTPUT_CORRECTLY = i18n.translate( - 'xpack.securitySolution.assistant.content.prompts.system.outputFormatting', - { - defaultMessage: - 'If you answer a question related to KQL, EQL, or ES|QL, it should be immediately usable within an Elastic Security timeline; please always format the output correctly with back ticks. Any answer provided for Query DSL should also be usable in a security timeline. This means you should only ever include the "filter" portion of the query.', - } -); - -export const DEFAULT_SYSTEM_PROMPT_NON_I18N = `${YOU_ARE_A_HELPFUL_EXPERT_ASSISTANT} ${IF_YOU_DONT_KNOW_THE_ANSWER} -${FORMAT_OUTPUT_CORRECTLY}`; - -export const DEFAULT_SYSTEM_PROMPT_NAME = i18n.translate( - 'xpack.securitySolution.assistant.content.prompts.system.defaultSystemPromptName', - { - defaultMessage: 'Default system prompt', - } -); - -export const SUPERHERO_SYSTEM_PROMPT_NON_I18N = `${YOU_ARE_A_HELPFUL_EXPERT_ASSISTANT} ${IF_YOU_DONT_KNOW_THE_ANSWER} -${SUPERHERO_PERSONALITY} -${FORMAT_OUTPUT_CORRECTLY}`; - -export const SUPERHERO_SYSTEM_PROMPT_NAME = i18n.translate( - 'xpack.securitySolution.assistant.content.prompts.system.superheroSystemPromptName', - { - defaultMessage: 'Enhanced system prompt', - } -); diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx b/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx index efbb56ebcf540..b3be6370e905d 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx @@ -5,8 +5,7 @@ * 2.0. */ -import type { EuiCommentProps } from '@elastic/eui'; -import type { Conversation, ClientMessage } from '@kbn/elastic-assistant'; +import type { ClientMessage, GetAssistantMessages } from '@kbn/elastic-assistant'; import { EuiAvatar, EuiLoadingSpinner } from '@elastic/eui'; import React from 'react'; @@ -14,7 +13,7 @@ import { AssistantAvatar } from '@kbn/elastic-assistant'; import type { Replacements } from '@kbn/elastic-assistant-common'; import { replaceAnonymizedValuesWithOriginalValues } from '@kbn/elastic-assistant-common'; import styled from '@emotion/styled'; -import type { UserAvatar } from '@kbn/elastic-assistant/impl/assistant_context'; +import type { EuiPanelProps } from '@elastic/eui/src/components/panel'; import { StreamComment } from './stream'; import { CommentActions } from '../comment_actions'; import * as i18n from './translations'; @@ -52,7 +51,7 @@ const transformMessageWithReplacements = ({ }; }; -export const getComments = ({ +export const getComments: GetAssistantMessages = ({ abortStream, currentConversation, isFetchingResponse, @@ -61,16 +60,8 @@ export const getComments = ({ showAnonymizedValues, currentUserAvatar, setIsStreaming, -}: { - abortStream: () => void; - currentConversation?: Conversation; - isFetchingResponse: boolean; - refetchCurrentConversation: ({ isStreamRefetch }: { isStreamRefetch?: boolean }) => void; - regenerateMessage: (conversationId: string) => void; - showAnonymizedValues: boolean; - currentUserAvatar?: UserAvatar; - setIsStreaming: (isStreaming: boolean) => void; -}): EuiCommentProps[] => { + systemPromptContent, +}) => { if (!currentConversation) return []; const regenerateMessageOfConversation = () => { @@ -122,6 +113,32 @@ export const getComments = ({ }; return [ + ...(systemPromptContent && currentConversation.messages.length + ? [ + { + username: i18n.SYSTEM, + timelineAvatar: ( + + ), + timestamp: + currentConversation.messages[0].timestamp.length === 0 + ? new Date().toLocaleString() + : new Date(currentConversation.messages[0].timestamp).toLocaleString(), + children: ( + ({ content: '' } as unknown as ContentMessage)} + // we never need to append to a code block in the system comment, which is what this index is used for + index={999} + /> + ), + }, + ] + : []), ...currentConversation.messages.map((message, index) => { const isLastComment = index === currentConversation.messages.length - 1; const isUser = message.role === 'user'; @@ -139,7 +156,7 @@ export const getComments = ({ : new Date(message.timestamp).toLocaleString() ), username: isUser ? i18n.YOU : i18n.ASSISTANT, - eventColor: message.isError ? 'danger' : undefined, + eventColor: message.isError ? ('danger' as EuiPanelProps['color']) : undefined, }; const isControlsEnabled = isLastComment && !isUser; diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/translations.ts b/x-pack/plugins/security_solution/public/assistant/get_comments/translations.ts index fbccef68f7398..62614dbfaf77d 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/translations.ts +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/translations.ts @@ -7,6 +7,10 @@ import { i18n } from '@kbn/i18n'; +export const SYSTEM = i18n.translate('xpack.securitySolution.assistant.getComments.system', { + defaultMessage: 'System', +}); + export const ASSISTANT = i18n.translate('xpack.securitySolution.assistant.getComments.assistant', { defaultMessage: 'Assistant', }); diff --git a/x-pack/plugins/security_solution/public/assistant/provider.test.tsx b/x-pack/plugins/security_solution/public/assistant/provider.test.tsx index 0534df76aaf6e..a96623b8567a8 100644 --- a/x-pack/plugins/security_solution/public/assistant/provider.test.tsx +++ b/x-pack/plugins/security_solution/public/assistant/provider.test.tsx @@ -5,28 +5,14 @@ * 2.0. */ -import React from 'react'; import { act, renderHook } from '@testing-library/react-hooks'; import { httpServiceMock, type HttpSetupMock } from '@kbn/core-http-browser-mocks'; import type { Storage } from '@kbn/kibana-utils-plugin/public'; -import { AssistantProvider, createConversations } from './provider'; +import { createConversations } from './provider'; import { coreMock } from '@kbn/core/public/mocks'; -import { useKibana as mockUseKibana } from '../common/lib/kibana/__mocks__'; import { loadAllActions as loadConnectors } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; -import { useKibana } from '../common/lib/kibana'; -import { render, waitFor } from '@testing-library/react'; -import { TestProviders } from '../common/mock'; -import { useAssistantAvailability } from './use_assistant_availability'; -import { - bulkUpdatePrompts, - getPrompts, - getUserConversations, -} from '@kbn/elastic-assistant/impl/assistant/api'; -import { BASE_SECURITY_SYSTEM_PROMPTS } from './content/prompts/system'; -const mockedUseKibana = mockUseKibana(); jest.mock('./use_assistant_availability'); -jest.mock('../common/lib/kibana'); jest.mock('@kbn/elastic-assistant/impl/assistant/api'); jest.mock('../common/hooks/use_license', () => ({ @@ -224,85 +210,3 @@ describe('createConversations', () => { }); }); }); -describe('AssistantProvider', () => { - beforeEach(() => { - jest.clearAllMocks(); - (useKibana as jest.Mock).mockReturnValue({ - ...mockedUseKibana, - services: { - ...mockedUseKibana.services, - }, - }); - jest.mocked(useAssistantAvailability).mockReturnValue({ - hasAssistantPrivilege: true, - hasConnectorsAllPrivilege: true, - hasConnectorsReadPrivilege: true, - hasUpdateAIAssistantAnonymization: true, - isAssistantEnabled: true, - }); - - (getUserConversations as jest.Mock).mockResolvedValue({ - page: 1, - perPage: 5, - total: 5, - data: [], - }); - (getPrompts as jest.Mock).mockResolvedValue({ - page: 1, - perPage: 5, - total: 0, - data: [], - }); - }); - it('should not render the assistant when no prompts have been returned', async () => { - const { queryByTestId } = render( - - - , - { - wrapper: TestProviders, - } - ); - expect(queryByTestId('ourAssistant')).toBeNull(); - }); - it('should render the assistant when prompts are returned', async () => { - (getPrompts as jest.Mock).mockResolvedValue({ - page: 1, - perPage: 5, - total: 2, - data: BASE_SECURITY_SYSTEM_PROMPTS, - }); - const { getByTestId } = render( - - - , - { - wrapper: TestProviders, - } - ); - await waitFor(() => { - expect(getByTestId('ourAssistant')).not.toBeNull(); - }); - }); - it('should render the assistant once prompts have been created', async () => { - (bulkUpdatePrompts as jest.Mock).mockResolvedValue({ - success: true, - attributes: { - results: { - created: BASE_SECURITY_SYSTEM_PROMPTS, - }, - }, - }); - const { getByTestId } = render( - - - , - { - wrapper: TestProviders, - } - ); - await waitFor(() => { - expect(getByTestId('ourAssistant')).not.toBeNull(); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/assistant/provider.tsx b/x-pack/plugins/security_solution/public/assistant/provider.tsx index dbfbb026ab2d3..54d4e47edb684 100644 --- a/x-pack/plugins/security_solution/public/assistant/provider.tsx +++ b/x-pack/plugins/security_solution/public/assistant/provider.tsx @@ -5,7 +5,7 @@ * 2.0. */ import type { FC, PropsWithChildren } from 'react'; -import React, { useEffect, useState } from 'react'; +import React, { useEffect } from 'react'; import { parse } from '@kbn/datemath'; import type { Storage } from '@kbn/kibana-utils-plugin/public'; import { i18n } from '@kbn/i18n'; @@ -30,7 +30,6 @@ import { useAssistantTelemetry } from './use_assistant_telemetry'; import { getComments } from './get_comments'; import { LOCAL_STORAGE_KEY, augmentMessageCodeBlocks } from './helpers'; import { BASE_SECURITY_QUICK_PROMPTS } from './content/quick_prompts'; -import { BASE_SECURITY_SYSTEM_PROMPTS } from './content/prompts/system'; import { useBaseConversations } from './use_conversation_store'; import { PROMPT_CONTEXTS } from './content/prompt_contexts'; import { useAssistantAvailability } from './use_assistant_availability'; @@ -117,7 +116,7 @@ export const createConversations = async ( }; export const createBasePrompts = async (notifications: NotificationsStart, http: HttpSetup) => { - const promptsToCreate = [...BASE_SECURITY_QUICK_PROMPTS, ...BASE_SECURITY_SYSTEM_PROMPTS]; + const promptsToCreate = [...BASE_SECURITY_QUICK_PROMPTS]; // post bulk create const bulkResult = await bulkUpdatePrompts( @@ -176,8 +175,6 @@ export const AssistantProvider: FC> = ({ children }) storage, ]); - const [basePromptsLoaded, setBasePromptsLoaded] = useState(false); - useEffect(() => { const createSecurityPrompts = once(async () => { if ( @@ -197,8 +194,6 @@ export const AssistantProvider: FC> = ({ children }) // eslint-disable-next-line no-empty } catch (e) {} } - - setBasePromptsLoaded(true); }); createSecurityPrompts(); }, [ @@ -212,9 +207,6 @@ export const AssistantProvider: FC> = ({ children }) const { signalIndexName } = useSignalIndex(); const alertsIndexPattern = signalIndexName ?? undefined; const toasts = useAppToasts() as unknown as IToasts; // useAppToasts is the current, non-deprecated method of getting the toasts service in the Security Solution, but it doesn't return the IToasts interface (defined by core) - // Because our conversations need an assigned system prompt at create time, - // we want to make sure the prompts are there before creating the first conversation - // however if there is an error fetching the prompts, we don't want to block the app return ( > = ({ children }) toasts={toasts} currentAppId={currentAppId ?? 'securitySolutionUI'} > - {basePromptsLoaded ? children : null} + {children} ); }; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 583b571bbc73f..5e08ebf2f10f2 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -15026,7 +15026,6 @@ "xpack.elasticAssistant.assistant.connectors.connectorSelector.newConnectorOptions": "Ajouter un nouveau connecteur...", "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorPlaceholder": "Sélectionner un connecteur", "xpack.elasticAssistant.assistant.connectors.preconfiguredTitle": "Préconfiguré", - "xpack.elasticAssistant.assistant.content.prompts.system.defaultSystemPromptName": "Invite de système par défaut", "xpack.elasticAssistant.assistant.conversations.settings.connectorTitle": "Connecteur", "xpack.elasticAssistant.assistant.conversations.settings.promptHelpTextTitle": "Contexte fourni dans le cadre de chaque conversation.", "xpack.elasticAssistant.assistant.conversations.settings.promptTitle": "Invite système", @@ -35521,12 +35520,6 @@ "xpack.securitySolution.assistant.commentActions.viewAPMTraceLabel": "Voir la trace APM pour ce message", "xpack.securitySolution.assistant.content.promptContexts.indexTitle": "index", "xpack.securitySolution.assistant.content.promptContexts.viewTitle": "vue", - "xpack.securitySolution.assistant.content.prompts.system.defaultSystemPromptName": "Invite de système par défaut", - "xpack.securitySolution.assistant.content.prompts.system.ifYouDontKnowTheAnswer": "Ne répondez pas aux questions qui ne sont pas liées à Elastic Security.", - "xpack.securitySolution.assistant.content.prompts.system.outputFormatting": "Si vous répondez à une question liée à KQL, à EQL, ou à ES|QL, la réponse doit être immédiatement utilisable dans une chronologie d'Elastic Security ; veuillez toujours formater correctement la sortie avec des accents graves. Toute réponse à une requête DSL doit aussi être utilisable dans une chronologie de sécurité. Cela signifie que vous ne devez inclure que la portion \"filtre\" de la requête.", - "xpack.securitySolution.assistant.content.prompts.system.superheroPersonality": "Donnez la réponse la plus pertinente et détaillée possible, comme si vous deviez communiquer ces informations à un expert en cybersécurité.", - "xpack.securitySolution.assistant.content.prompts.system.superheroSystemPromptName": "Invite système améliorée", - "xpack.securitySolution.assistant.content.prompts.system.youAreAHelpfulExpertAssistant": "Vous êtes un assistant expert et serviable qui répond à des questions au sujet d’Elastic Security.", "xpack.securitySolution.assistant.content.prompts.user.finallySuggestInvestigationGuideAndFormatAsMarkdown": "Ajoutez votre description, les actions que vous recommandez ainsi que les étapes de triage à puces. Utilisez les données \"MITRE ATT&CK\" fournies pour ajouter du contexte et des recommandations de MITRE ainsi que des liens hypertexte vers les pages pertinentes sur le site web de MITRE. Assurez-vous d’inclure les scores de risque de l’utilisateur et de l’hôte du contexte. Votre réponse doit inclure des étapes qui pointent vers les fonctionnalités spécifiques d’Elastic Security, y compris les actions de réponse du terminal, l’intégration OSQuery Manager d’Elastic Agent (avec des exemples de requêtes OSQuery), des analyses de timeline et d’entités, ainsi qu’un lien pour toute la documentation Elastic Security pertinente.", "xpack.securitySolution.assistant.content.prompts.user.thenSummarizeSuggestedKqlAndEqlQueries": "Évaluer l’événement depuis le contexte ci-dessus et formater soigneusement la sortie en syntaxe Markdown pour mon cas Elastic Security.", "xpack.securitySolution.assistant.conversationMigrationStatus.title": "Les conversations de stockage local ont été persistées avec succès.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 70d5a3b861b99..76b479846efa4 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -15013,7 +15013,6 @@ "xpack.elasticAssistant.assistant.connectors.connectorSelector.newConnectorOptions": "新しいコネクターを追加...", "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorPlaceholder": "コネクターを選択", "xpack.elasticAssistant.assistant.connectors.preconfiguredTitle": "構成済み", - "xpack.elasticAssistant.assistant.content.prompts.system.defaultSystemPromptName": "デフォルトシステムプロンプト", "xpack.elasticAssistant.assistant.conversations.settings.connectorTitle": "コネクター", "xpack.elasticAssistant.assistant.conversations.settings.promptHelpTextTitle": "すべての会話の一部として提供されたコンテキスト。", "xpack.elasticAssistant.assistant.conversations.settings.promptTitle": "システムプロンプト", @@ -35506,12 +35505,6 @@ "xpack.securitySolution.assistant.commentActions.viewAPMTraceLabel": "このメッセージのAPMトレースを表示", "xpack.securitySolution.assistant.content.promptContexts.indexTitle": "インデックス", "xpack.securitySolution.assistant.content.promptContexts.viewTitle": "表示", - "xpack.securitySolution.assistant.content.prompts.system.defaultSystemPromptName": "デフォルトシステムプロンプト", - "xpack.securitySolution.assistant.content.prompts.system.ifYouDontKnowTheAnswer": "Elasticセキュリティに関連していない質問には回答しないでください。", - "xpack.securitySolution.assistant.content.prompts.system.outputFormatting": "KQL、EQL、ES|QLに関連する質問に回答した場合、Elastic Securityのタイムライン内ですぐに使用できるようにする必要があります。出力は常にバックティックで正しい形式にしてください。クエリDSLで提供されるすべての回答は、セキュリティタイムラインでも使用可能でなければなりません。つまり、クエリの\"フィルター\"部分のみを含める必要があります。", - "xpack.securitySolution.assistant.content.prompts.system.superheroPersonality": "サイバーセキュリティの専門家に情報を伝えるつもりで、できるだけ詳細で関連性のある回答を入力してください。", - "xpack.securitySolution.assistant.content.prompts.system.superheroSystemPromptName": "拡張システムプロンプト", - "xpack.securitySolution.assistant.content.prompts.system.youAreAHelpfulExpertAssistant": "あなたはElasticセキュリティに関する質問に答える、親切で専門的なアシスタントです。", "xpack.securitySolution.assistant.content.prompts.user.finallySuggestInvestigationGuideAndFormatAsMarkdown": "説明、推奨されるアクション、箇条書きのトリアージステップを追加します。提供された MITRE ATT&CKデータを使用して、MITREからのコンテキストや推奨事項を追加し、MITREのWebサイトの関連ページにハイパーリンクを貼ります。コンテキストのユーザーとホストのリスクスコアデータを必ず含めてください。回答には、エンドポイント対応アクション、ElasticエージェントOSQueryマネージャー統合(osqueryクエリーの例を付けて)、タイムライン、エンティティ分析など、Elasticセキュリティ固有の機能を指す手順を含め、関連するElasticセキュリティのドキュメントすべてにリンクしてください。", "xpack.securitySolution.assistant.content.prompts.user.thenSummarizeSuggestedKqlAndEqlQueries": "上記のコンテキストからイベントを評価し、Elasticセキュリティのケース用に、出力をマークダウン構文で正しく書式設定してください。", "xpack.securitySolution.assistant.conversationMigrationStatus.title": "ローカルストレージ会話は正常に永続しました。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 5ba58da581710..a17ef39b025e3 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -15038,7 +15038,6 @@ "xpack.elasticAssistant.assistant.connectors.connectorSelector.newConnectorOptions": "添加新连接器……", "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorPlaceholder": "选择连接器", "xpack.elasticAssistant.assistant.connectors.preconfiguredTitle": "预配置", - "xpack.elasticAssistant.assistant.content.prompts.system.defaultSystemPromptName": "默认系统提示", "xpack.elasticAssistant.assistant.conversations.settings.connectorTitle": "连接器", "xpack.elasticAssistant.assistant.conversations.settings.promptHelpTextTitle": "已作为每个对话的一部分提供上下文。", "xpack.elasticAssistant.assistant.conversations.settings.promptTitle": "系统提示", @@ -35547,12 +35546,6 @@ "xpack.securitySolution.assistant.commentActions.viewAPMTraceLabel": "查看此消息的 APM 跟踪", "xpack.securitySolution.assistant.content.promptContexts.indexTitle": "索引", "xpack.securitySolution.assistant.content.promptContexts.viewTitle": "视图", - "xpack.securitySolution.assistant.content.prompts.system.defaultSystemPromptName": "默认系统提示", - "xpack.securitySolution.assistant.content.prompts.system.ifYouDontKnowTheAnswer": "不回答与 Elastic Security 无关的问题。", - "xpack.securitySolution.assistant.content.prompts.system.outputFormatting": "如果您回答与 KQL、EQL 或 ES|QL 相关的问题,它应在 Elastic Security 时间线中立即可用;请始终用反勾号对输出进行正确格式化。为查询 DSL 提供的任何答案也应在安全时间线中可用。这意味着您只应包括查询的“筛选”部分。", - "xpack.securitySolution.assistant.content.prompts.system.superheroPersonality": "提供可能的最详细、最相关的答案,就好像您正将此信息转发给网络安全专家一样。", - "xpack.securitySolution.assistant.content.prompts.system.superheroSystemPromptName": "已增强系统提示", - "xpack.securitySolution.assistant.content.prompts.system.youAreAHelpfulExpertAssistant": "您是一位可帮助回答 Elastic Security 相关问题的专家助手。", "xpack.securitySolution.assistant.content.prompts.user.finallySuggestInvestigationGuideAndFormatAsMarkdown": "添加描述、建议操作和带项目符号的分类步骤。使用提供的 MITRE ATT&CK 数据以从 MITRE 添加更多上下文和建议,以及指向 MITRE 网站上的相关页面的超链接。确保包括上下文中的用户和主机风险分数数据。您的响应应包含指向 Elastic Security 特定功能的步骤,包括终端响应操作、Elastic 代理 OSQuery 管理器集成(带示例 osquery 查询)、时间线和实体分析,以及所有相关 Elastic Security 文档的链接。", "xpack.securitySolution.assistant.content.prompts.user.thenSummarizeSuggestedKqlAndEqlQueries": "评估来自上述上下文的事件,并以用于我的 Elastic Security 案例的 Markdown 语法对您的输出进行全面格式化。", "xpack.securitySolution.assistant.conversationMigrationStatus.title": "已成功保持本地存储对话。", diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant/conversations.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant/conversations.cy.ts index 286627367c46e..2b277e73cf24a 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant/conversations.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant/conversations.cy.ts @@ -24,7 +24,6 @@ import { selectRule, assertErrorToastShown, updateConversationTitle, - assertSystemPrompt, } from '../../tasks/assistant'; import { deleteConversations } from '../../tasks/api_calls/assistant'; import { @@ -71,7 +70,6 @@ describe('AI Assistant Conversations', { tags: ['@ess', '@serverless'] }, () => openAssistant(); assertNewConversation(false, 'Welcome'); assertConnectorSelected(azureConnectorAPIPayload.name); - assertSystemPrompt('Default system prompt'); cy.get(USER_PROMPT).should('not.have.text'); }); it('When invoked from rules page', () => { @@ -81,7 +79,6 @@ describe('AI Assistant Conversations', { tags: ['@ess', '@serverless'] }, () => openAssistant('rule'); assertNewConversation(false, 'Detection Rules'); assertConnectorSelected(azureConnectorAPIPayload.name); - assertSystemPrompt('Default system prompt'); cy.get(USER_PROMPT).should('have.text', EXPLAIN_THEN_SUMMARIZE_RULE_DETAILS); cy.get(PROMPT_CONTEXT_BUTTON(0)).should('have.text', RULE_MANAGEMENT_CONTEXT_DESCRIPTION); }); @@ -94,7 +91,6 @@ describe('AI Assistant Conversations', { tags: ['@ess', '@serverless'] }, () => openAssistant('alert'); assertNewConversation(false, 'Alert summary'); assertConnectorSelected(azureConnectorAPIPayload.name); - assertSystemPrompt('Default system prompt'); cy.get(USER_PROMPT).should( 'have.text', EXPLAIN_THEN_SUMMARIZE_SUGGEST_INVESTIGATION_GUIDE_NON_I18N @@ -135,19 +131,19 @@ describe('AI Assistant Conversations', { tags: ['@ess', '@serverless'] }, () => assertNewConversation(false, 'Welcome'); assertConnectorSelected(azureConnectorAPIPayload.name); typeAndSendMessage('hello'); - assertMessageSent('hello', true); + assertMessageSent('hello'); assertErrorResponse(); selectConversation('Alert summary'); selectConnector(bedrockConnectorAPIPayload.name); typeAndSendMessage('goodbye'); - assertMessageSent('goodbye', true); + assertMessageSent('goodbye'); assertErrorResponse(); selectConversation('Welcome'); assertConnectorSelected(azureConnectorAPIPayload.name); - assertMessageSent('hello', true); + assertMessageSent('hello'); selectConversation('Alert summary'); assertConnectorSelected(bedrockConnectorAPIPayload.name); - assertMessageSent('goodbye', true); + assertMessageSent('goodbye'); }); // This test is flakey due to the issue linked below and will be skipped until it is fixed it.skip('Only allows one conversation called "New chat" at a time', () => { @@ -159,7 +155,7 @@ describe('AI Assistant Conversations', { tags: ['@ess', '@serverless'] }, () => typeAndSendMessage('hello'); // TODO fix bug with new chat and error message // https://github.com/elastic/kibana/issues/191025 - // assertMessageSent('hello', true); + // assertMessageSent('hello'); assertErrorResponse(); selectConversation('Welcome'); createNewChat(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant/prompts.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant/prompts.cy.ts index ff8e137a874ce..b1bcf5a74d1b1 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant/prompts.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant/prompts.cy.ts @@ -5,14 +5,16 @@ * 2.0. */ -import { SUPERHERO_SYSTEM_PROMPT_NON_I18N } from '@kbn/security-solution-plugin/public/assistant/content/prompts/system/translations'; import { EXPLAIN_THEN_SUMMARIZE_SUGGEST_INVESTIGATION_GUIDE_NON_I18N } from '@kbn/security-solution-plugin/public/assistant/content/prompts/user/translations'; +import { PromptCreateProps } from '@kbn/elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen'; import { QUICK_PROMPT_BADGE, USER_PROMPT } from '../../screens/ai_assistant'; import { createRule } from '../../tasks/api_calls/rules'; import { + assertEmptySystemPrompt, assertErrorResponse, assertMessageSent, - assertSystemPrompt, + assertSystemPromptSelected, + assertSystemPromptSent, clearSystemPrompt, createQuickPrompt, createSystemPrompt, @@ -23,7 +25,11 @@ import { sendQuickPrompt, typeAndSendMessage, } from '../../tasks/assistant'; -import { deleteConversations, deletePrompts } from '../../tasks/api_calls/assistant'; +import { + deleteConversations, + deletePrompts, + waitForCreatePrompts, +} from '../../tasks/api_calls/assistant'; import { createAzureConnector } from '../../tasks/api_calls/connectors'; import { deleteConnectors } from '../../tasks/api_calls/common'; import { login } from '../../tasks/login'; @@ -33,10 +39,23 @@ import { ALERTS_URL } from '../../urls/navigation'; import { waitForAlertsToPopulate } from '../../tasks/create_new_rule'; import { expandFirstAlert } from '../../tasks/alerts'; +const promptType: PromptCreateProps['promptType'] = 'system'; const testPrompt = { - title: 'Cool prompt', - prompt: 'This is a super cool prompt.', + name: 'Cool prompt', + content: 'This is a super cool prompt.', +}; + +const customPrompt1 = { + name: 'Custom system prompt', + content: 'This is a custom system prompt.', + promptType, }; +const customPrompt2 = { + name: 'Enhanced system prompt', + content: 'This is an enhanced system prompt.', + promptType, +}; + describe('AI Assistant Prompts', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { deleteConnectors(); @@ -47,88 +66,103 @@ describe('AI Assistant Prompts', { tags: ['@ess', '@serverless'] }, () => { }); describe('System Prompts', () => { - it('Deselecting default system prompt prevents prompt from being sent. When conversation is then cleared, the prompt is reset.', () => { + beforeEach(() => { + waitForCreatePrompts([customPrompt2, customPrompt1]); + }); + it('No prompt is selected by default, custom prompts can be selected and deselected', () => { + visitGetStartedPage(); + openAssistant(); + assertEmptySystemPrompt(); + selectSystemPrompt(customPrompt2.name); + selectSystemPrompt(customPrompt1.name); + clearSystemPrompt(); + }); + it('Deselecting a system prompt prevents prompt from being sent. When conversation is then cleared, the prompt remains cleared.', () => { visitGetStartedPage(); openAssistant(); + selectSystemPrompt(customPrompt2.name); clearSystemPrompt(); typeAndSendMessage('hello'); assertMessageSent('hello'); // ensure response before clearing convo assertErrorResponse(); resetConversation(); + assertEmptySystemPrompt(); typeAndSendMessage('hello'); - assertMessageSent('hello', true); + assertMessageSent('hello'); }); it('Last selected system prompt persists in conversation', () => { visitGetStartedPage(); openAssistant(); - selectSystemPrompt('Enhanced system prompt'); + selectSystemPrompt(customPrompt2.name); typeAndSendMessage('hello'); - assertMessageSent('hello', true, SUPERHERO_SYSTEM_PROMPT_NON_I18N); + assertSystemPromptSent(customPrompt2.content); + assertMessageSent('hello', true); resetConversation(); - assertSystemPrompt('Enhanced system prompt'); - selectConversation('Alert summary'); - assertSystemPrompt('Default system prompt'); + assertSystemPromptSelected(customPrompt2.name); + selectConversation('Timeline'); + assertEmptySystemPrompt(); selectConversation('Welcome'); - assertSystemPrompt('Enhanced system prompt'); + assertSystemPromptSelected(customPrompt2.name); }); it('Add prompt from system prompt selector without setting a default conversation', () => { visitGetStartedPage(); openAssistant(); - createSystemPrompt(testPrompt.title, testPrompt.prompt); + createSystemPrompt(testPrompt.name, testPrompt.content); // we did not set a default conversation, so the prompt should not be set - assertSystemPrompt('Default system prompt'); - selectSystemPrompt(testPrompt.title); + assertEmptySystemPrompt(); + selectSystemPrompt(testPrompt.name); typeAndSendMessage('hello'); - assertMessageSent('hello', true, testPrompt.prompt); + assertSystemPromptSent(testPrompt.content); + assertMessageSent('hello', true); }); it('Add prompt from system prompt selector and set multiple conversations (including current) as default conversation', () => { visitGetStartedPage(); openAssistant(); - createSystemPrompt(testPrompt.title, testPrompt.prompt, [ - 'Welcome', - 'Alert summary', - 'Data Quality Dashboard', - ]); - assertSystemPrompt(testPrompt.title); + createSystemPrompt(testPrompt.name, testPrompt.content, ['Welcome', 'Timeline']); + assertSystemPromptSelected(testPrompt.name); typeAndSendMessage('hello'); - assertMessageSent('hello', true, testPrompt.prompt); + + assertSystemPromptSent(testPrompt.content); + assertMessageSent('hello', true); // ensure response before changing convo assertErrorResponse(); - selectConversation('Alert summary'); - assertSystemPrompt(testPrompt.title); + selectConversation('Timeline'); + assertSystemPromptSelected(testPrompt.name); typeAndSendMessage('hello'); - assertMessageSent('hello', true, testPrompt.prompt); + + assertSystemPromptSent(testPrompt.content); + assertMessageSent('hello', true); }); }); - describe('User Prompts', () => { + describe('Quick Prompts', () => { it('Add a quick prompt and send it in the conversation', () => { visitGetStartedPage(); openAssistant(); - createQuickPrompt(testPrompt.title, testPrompt.prompt); - sendQuickPrompt(testPrompt.title); - assertMessageSent(testPrompt.prompt, true); + createQuickPrompt(testPrompt.name, testPrompt.content); + sendQuickPrompt(testPrompt.name); + assertMessageSent(testPrompt.content); }); it('Add a quick prompt with context and it is only available in the selected context', () => { visitGetStartedPage(); openAssistant(); - createQuickPrompt(testPrompt.title, testPrompt.prompt, ['Alert (from view)']); - cy.get(QUICK_PROMPT_BADGE(testPrompt.title)).should('not.exist'); + createQuickPrompt(testPrompt.name, testPrompt.content, ['Alert (from view)']); + cy.get(QUICK_PROMPT_BADGE(testPrompt.name)).should('not.exist'); createRule(getNewRule()); visit(ALERTS_URL); waitForAlertsToPopulate(); expandFirstAlert(); openAssistant('alert'); - cy.get(QUICK_PROMPT_BADGE(testPrompt.title)).should('be.visible'); + cy.get(QUICK_PROMPT_BADGE(testPrompt.name)).should('be.visible'); cy.get(USER_PROMPT).should( 'have.text', EXPLAIN_THEN_SUMMARIZE_SUGGEST_INVESTIGATION_GUIDE_NON_I18N ); - cy.get(QUICK_PROMPT_BADGE(testPrompt.title)).click(); - cy.get(USER_PROMPT).should('have.text', testPrompt.prompt); + cy.get(QUICK_PROMPT_BADGE(testPrompt.name)).click(); + cy.get(USER_PROMPT).should('have.text', testPrompt.content); }); // TODO delete quick prompt // I struggled to do this since the element is hidden with css and I cannot get it to show diff --git a/x-pack/test/security_solution_cypress/cypress/objects/assistant.ts b/x-pack/test/security_solution_cypress/cypress/objects/assistant.ts index 7401a0ced2a49..23ab68f1e91d8 100644 --- a/x-pack/test/security_solution_cypress/cypress/objects/assistant.ts +++ b/x-pack/test/security_solution_cypress/cypress/objects/assistant.ts @@ -11,6 +11,7 @@ import { ConversationResponse, Provider, } from '@kbn/elastic-assistant-common'; +import { PromptCreateProps } from '@kbn/elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen'; export const getMockConversation = (body?: Partial) => ({ title: 'Test Conversation', @@ -38,3 +39,11 @@ export const getMockConversationResponse = ( namespace: 'default', ...getMockConversation(body), }); + +export const getMockCreatePrompt = (body?: Partial): PromptCreateProps => ({ + name: 'Mock Prompt Name', + promptType: 'quick', + content: 'Mock Prompt Content', + consumer: 'securitySolutionUI', + ...body, +}); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/ai_assistant.ts b/x-pack/test/security_solution_cypress/cypress/screens/ai_assistant.ts index 341b65bf722e0..fcdd9b42304a6 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/ai_assistant.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/ai_assistant.ts @@ -43,7 +43,7 @@ export const QUICK_PROMPT_BODY_INPUT = '[data-test-subj="quick-prompt-prompt"]'; export const SEND_TO_TIMELINE_BUTTON = '[data-test-subj="sendToTimelineEmptyButton"]'; export const SHOW_ANONYMIZED_BUTTON = '[data-test-subj="showAnonymizedValues"]'; export const SUBMIT_CHAT = '[data-test-subj="submit-chat"]'; -export const SYSTEM_PROMPT = '[data-test-subj="systemPromptText"]'; +export const SYSTEM_PROMPT = '[data-test-subj="promptSuperSelect"]'; export const SYSTEM_PROMPT_BODY_INPUT = '[data-test-subj="systemPromptModalPromptText"]'; export const SYSTEM_PROMPT_TITLE_INPUT = '[data-test-subj="systemPromptSelector"] [data-test-subj="comboBoxSearchInput"]'; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/assistant.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/assistant.ts index a8898f1652e1e..6a2543ed12bbf 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/assistant.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/assistant.ts @@ -6,8 +6,13 @@ */ import { ConversationCreateProps, ConversationResponse } from '@kbn/elastic-assistant-common'; +import { + PerformPromptsBulkActionRequestBody, + PerformPromptsBulkActionResponse, + PromptCreateProps, +} from '@kbn/elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen'; import { deleteAllDocuments } from './elasticsearch'; -import { getMockConversation } from '../../objects/assistant'; +import { getMockConversation, getMockCreatePrompt } from '../../objects/assistant'; import { getSpaceUrl } from '../space'; import { rootRequest, waitForRootRequest } from './common'; @@ -36,3 +41,21 @@ export const deletePrompts = () => { cy.log('Delete all prompts'); deleteAllDocuments(`.kibana-elastic-ai-assistant-prompts-*`); }; + +const bulkPrompts = ( + body: PerformPromptsBulkActionRequestBody +): Cypress.Chainable> => + cy.currentSpace().then((spaceId) => + rootRequest({ + method: 'POST', + url: spaceId + ? getSpaceUrl(spaceId, `api/security_ai_assistant/prompts/_bulk_action`) + : `api/security_ai_assistant/prompts/_bulk_action`, + body, + }) + ); +export const waitForCreatePrompts = (prompts: Array>) => { + return waitForRootRequest( + bulkPrompts({ create: prompts.map((prompt) => getMockCreatePrompt(prompt)) }) + ); +}; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/assistant.ts b/x-pack/test/security_solution_cypress/cypress/tasks/assistant.ts index c3f4f0cc970e0..8a3bd3600591c 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/assistant.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/assistant.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { DEFAULT_SYSTEM_PROMPT_NON_I18N } from '@kbn/security-solution-plugin/public/assistant/content/prompts/system/translations'; import { TIMELINE_CHECKBOX } from '../screens/timelines'; import { CLOSE_FLYOUT } from '../screens/alerts'; import { @@ -110,6 +109,7 @@ export const sendQueryToTimeline = () => { export const clearSystemPrompt = () => { cy.get(CLEAR_SYSTEM_PROMPT).click(); + assertEmptySystemPrompt(); }; export const sendQuickPrompt = (prompt: string) => { @@ -120,7 +120,7 @@ export const sendQuickPrompt = (prompt: string) => { export const selectSystemPrompt = (systemPrompt: string) => { cy.get(SYSTEM_PROMPT).click(); cy.get(SYSTEM_PROMPT_SELECT(systemPrompt)).click(); - assertSystemPrompt(systemPrompt); + assertSystemPromptSelected(systemPrompt); }; export const createSystemPrompt = ( @@ -174,23 +174,30 @@ export const assertNewConversation = (isWelcome: boolean, title: string) => { cy.get(CONVERSATION_TITLE + ' h2').should('have.text', title); }; -export const assertMessageSent = (message: string, hasDefaultPrompt = false, prompt?: string) => { - cy.get(CONVERSATION_MESSAGE) - .first() - .should( - 'contain', - hasDefaultPrompt ? `${prompt ?? DEFAULT_SYSTEM_PROMPT_NON_I18N}\n${message}` : message - ); +export const assertSystemPromptSent = (message: string) => { + cy.get(CONVERSATION_MESSAGE).eq(0).should('contain', message); +}; + +export const assertMessageSent = (message: string, prompt: boolean = false) => { + if (prompt) { + return cy.get(CONVERSATION_MESSAGE).eq(1).should('contain', message); + } + cy.get(CONVERSATION_MESSAGE).eq(0).should('contain', message); }; export const assertErrorResponse = () => { cy.get(CONVERSATION_MESSAGE_ERROR).should('be.visible'); }; -export const assertSystemPrompt = (systemPrompt: string) => { +export const assertSystemPromptSelected = (systemPrompt: string) => { cy.get(SYSTEM_PROMPT).should('have.text', systemPrompt); }; +export const assertEmptySystemPrompt = () => { + const EMPTY = 'Select a system prompt'; + cy.get(SYSTEM_PROMPT).should('have.text', EMPTY); +}; + export const assertConnectorSelected = (connectorName: string) => { cy.get(CONNECTOR_SELECTOR).should('have.text', connectorName); }; From 10c1c2c7acac40edb592ed19a0c36e7ce515cf0d Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Wed, 11 Sep 2024 17:57:55 -0400 Subject: [PATCH 39/52] [Synthetics] Unbreak uptime journey (#192641) ## Summary Previously the uptime e2e journey we rely on to test the uptime overview page was looking back 5 years to query for canned data we load during the standard Kibana test script. Unfortunately, that data was generated now > 5y ago, so the test started to fail. This patch hardcodes the date of the filter to ensure we permanently look back to a timeframe that includes the canned data we use for testing the page. --------- Co-authored-by: shahzad31 --- x-pack/plugins/observability_solution/uptime/e2e/README.md | 6 +++--- .../uptime/e2e/uptime/journeys/uptime.journey.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/observability_solution/uptime/e2e/README.md b/x-pack/plugins/observability_solution/uptime/e2e/README.md index ab7ebdf591d89..eaca49c558375 100644 --- a/x-pack/plugins/observability_solution/uptime/e2e/README.md +++ b/x-pack/plugins/observability_solution/uptime/e2e/README.md @@ -10,7 +10,7 @@ with an example run command when it finishes. ### Run the tests -From the same directory you can now run `node node e2e.js --runner`. +From the same directory you can now run `node e2e.js --runner`. In addition to the usual flags like `--grep`, you can also specify `--no-headless` in order to view your tests as you debug/develop. @@ -22,11 +22,11 @@ script for standing up the test server. ### Start the server -From `~/x-pack/plugins/observability_solution/synthetics/scripts`, run `node uptime_e2e.js --server`. Wait for the server to startup. It will provide you +From `~/x-pack/plugins/observability_solution/uptime/scripts`, run `node uptime_e2e.js --server`. Wait for the server to startup. It will provide you with an example run command when it finishes. ### Run the tests -From the same directory you can now run `node node uptime_e2e.js --runner`. +From the same directory you can now run `node uptime_e2e.js --runner`. In addition to the usual flags like `--grep`, you can also specify `--no-headless` in order to view your tests as you debug/develop. diff --git a/x-pack/plugins/observability_solution/uptime/e2e/uptime/journeys/uptime.journey.ts b/x-pack/plugins/observability_solution/uptime/e2e/uptime/journeys/uptime.journey.ts index f3916cd4eab12..5d6112cc41a95 100644 --- a/x-pack/plugins/observability_solution/uptime/e2e/uptime/journeys/uptime.journey.ts +++ b/x-pack/plugins/observability_solution/uptime/e2e/uptime/journeys/uptime.journey.ts @@ -17,7 +17,7 @@ journey('uptime', ({ page, params }) => { }); step('Go to Kibana', async () => { - await page.goto(`${params.kibanaUrl}/app/uptime?dateRangeStart=now-5y&dateRangeEnd=now`, { + await page.goto(`${params.kibanaUrl}/app/uptime?dateRangeStart=2018-01-01&dateRangeEnd=now`, { waitUntil: 'networkidle', }); }); From 0ce33f842df3e63d971af553e16e68da75a20bc0 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 11 Sep 2024 15:02:26 -0700 Subject: [PATCH 40/52] [DOCS][API] Adds Crowdstrike connector config and secrets; edits UI text (#192526) --- .../action-types/crowdstrike.asciidoc | 7 +++---- .../images/crowdstrike-connector.png | Bin 399378 -> 178210 bytes oas_docs/overlays/connectors.overlays.yaml | 12 ++++++++---- .../schemas/crowdstrike_config.yaml | 11 +++++++++++ .../schemas/crowdstrike_secrets.yaml | 13 +++++++++++++ .../crowdstrike/translations.ts | 4 ++-- .../stack_connectors/crowdstrike_connector.ts | 9 +++++---- 7 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_config.yaml create mode 100644 x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_secrets.yaml diff --git a/docs/management/connectors/action-types/crowdstrike.asciidoc b/docs/management/connectors/action-types/crowdstrike.asciidoc index ba7e544055910..813b6a699a71c 100644 --- a/docs/management/connectors/action-types/crowdstrike.asciidoc +++ b/docs/management/connectors/action-types/crowdstrike.asciidoc @@ -19,7 +19,7 @@ The CrowdStrike connector communicates with CrowdStrike Management Console via R You can create connectors in *{stack-manage-app} > {connectors-ui}*. For example: [role="screenshot"] -image::management/connectors/images/crowdstrike-connector.png[Crowdstrike connector] +image::management/connectors/images/crowdstrike-connector.png[CrowdStrike connector] // NOTE: This is an autogenerated screenshot. Do not edit it directly. [float] @@ -29,9 +29,8 @@ image::management/connectors/images/crowdstrike-connector.png[Crowdstrike connec CrowdStrike connectors have the following configuration properties: CrowdStrike API URL:: The CrowdStrike tenant URL. If you are using the <> setting, make sure the hostname is added to the allowed hosts. -CrowdStrike Client ID:: A CrowdStrike API client ID. -Client Secret:: A CrowdStrike API client secret created by the user. - +CrowdStrike client ID:: The CrowdStrike API client identifier. +Client secret:: The CrowdStrike API client secret to authenticate the client ID. [float] [[crowdstrike-action-parameters]] diff --git a/docs/management/connectors/images/crowdstrike-connector.png b/docs/management/connectors/images/crowdstrike-connector.png index 04eef86f1e2aed15dd776459c00583ff21f87bdb..4943d2402b1bb08f7426b8a4ca05a362228bc9ca 100644 GIT binary patch literal 178210 zcma&ObyQp5)-_Biv{0Z}aS0AZi@Ovl4y8bGhvHt`inqnxp}0E)_u_@LI0P+PLU0Jq zd${lSe$RdG@BYy-PR7Ux;hcT;S$nNH=bAfT-m1uAJtKXFgoK18FDLyD3F)aF5)vvl z+7sXtZ&Vx#B&0`n)>2Y$<)x&k-nuw`u(q>6LSl+@i|bO9RC_Tf{uL)3OYPUh>W*>Y zheBzo1?;a+ej#IEW^>fa!H;}#$6g1>y0W3N;iB2IzsBJ?GkfWzh(@Zrr_VN(=Ocjd zT}DvuBb-2Ue(5F~6#h&v*tlzP&I)E`L=7}En|G+c*A%5hrg{33=!iGE`YoENpE+nR zoq48LIf#G^ayphM1BymD0&oW3zNZGO!`&Qjk zyWsOUn%LSm0aWzT`;+S>y@fS=r4-oNm8PN|bKfOOGrL~8$20Gxw=JAJ>b7#bp?mX8 z?bt)9j6V_2mcsL%m#uTigH3KlUM}YX(=TA5E&oAT8HpKqkB0Op+!_f5c=rf+kpeFy zB;;?%|L>EhcHbWVzxSxv4}WYlb#OpJl0cG|ey!p8XfF#jlfZ�J~#qVo9!)hh~ZG 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 literal 399378 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
00+4on>%DH^ahA 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 z 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ⅇ_6tpfp{&S%PaJOEyk8G#&}3v+_* zb0w;1j&-ldSO47PC_70a+cqX~P|aNSV9S#3&ewDN0eIeGnb1u}bSv*@-SrI3y#m+9 z&x*931d-$=VBjVg&iW&Br7Oz!eH50=Q3US2KL)!(-RAvP@2xdtz9Z9^>jovW*<&q=yXf z-HHyS{{70`Jq|x^Zh~UG%_$k7M8Nm4OXSBr!C2eCBG7?g*&yx$?U#fAyqGE8=~5nF z79|7OcWONTysqN=&5f@&X5gQl0iCD+l??cE=a4KMVx8;%x^`Uv__YA=)RP(5p`f+D zyO>V_^qUz8{?CbKTR}#H960+?9@nE(z6;>e0HH2JHsNeamMJq;QFV=8TWP&&=dkAh zk39q2@A3cfkNyC>mNgyGOF1&9!5HQ;q9ckH+>0Tx9UwUaiq!2~7NTRil?doZWt31W zMEyF!#dOan>+BaYUS)7qM#=AUcd)zE{5z??t)R~1XlRO-Q3Glp2H1G&o75v4S&EUD z0UwgaN5$Kei}*e=@;!w?b8`%5=b+D4*}|PaQm^tHb#$mFS0$gLx6x((Wb zo2*~e9QI%<=;67!PW^P|0t)(UM0t;Tq`Xs1yfI5L_-xuHdubkZ`MA__=Sk}vuH_X` zha*8vO7tO|jzyoIN4>?AE<5CY0GNh2{iPI0Sv(KGqqIgI|JAjN4Du>X>yyxobS z(}(CuIrsdV6w=w7_M`Ym(HKtXUdlPPB%B?i60o{s4R?l;u{GfoKb@ zVF*q<7qAfjX34G9WSsRGzRo#~1vtFco^`>|=heLQK1a^lZ*g9>AGg_2+hqove(;X` z*0f@v%UqkdY&SJHw^&vb_jEX%$M>n`_O#%V=b>JkM;%T@Ag4#!{Q)p!<({8xNc$p0 zgBBp`FNKAxRyLqcA>>b992Bj|u4@8FDM#Eg47OK^u$9rGTEg$$r#|K&67$apOvy1B zN#8DuwFkyVyK|8k0RJ9AJz~U=ll%bZ|GW7{=D2C$t!Q+)LI9qz3KLDSc{T|HOe2(*@QXC1{4YVd#1i<6Wih){i{$pir z6QI=Nvto^^dajOCN3zbElldDp=<5%zLQRdlqJHtZ_^NGw0kl|{gupK z4>%-XV@?Pu2T?S=)cIn-R2yOVT&`;S>?b9vtntWQ~(7Wy;}GS#&8mpS^JztXN2 zfEVbsF7}x99=gV@X*kY`#m`iB{m~lxHdeUf>Wo4LB|U?qqC(5x8U&JYqnz@tX*UNy&IoY*S=I?M>(^0TE%p`NMIAsvH(p^8* z5A{JB>ECrDI7`n(v0(}nA_YWIFRbDITvgbsff2pSDUJU^6 z_7gI87tuxcQIlDjymA=$pV0$2 z>r3>71{;~3k`2+VIiOmxY);<$f2PjzR5F*}!1<#3;3dgid4&62WkPm9o%_M8tu_-! zdRp|5(op91BjZjqlm1N(qxAr=D`Ji~&_#N7OETBxfb$37<*4jlE-SibDOZw&VVrOJ zc?|uS3`nOkGm(J$;e9GQ76E^msGF=Rfo^Km5X7Ja@x>>o-2!)g4wH!YR*HJD;5{;A8~!^CK4R zv7d3cr9zK+2m1Lk@p>>_b@Ev2qMnJO^d=M^t)IrLeWSmPqKv`x#k*V?n9WciuA)|| zoVR-a^#tH6lEtYYf%)qx$1y70QR0@$eyhDeaBv1dT;FW|IZ0w&c>D9!HkRy1Wdpw2 zr~uiZ`7AfOk?!aB2+Cd=b%YG`o2*H2dh6P%qzk@ckWOYgU4!$aCKs+xcK-SNYx$Gz z(kTnJTK`$w?N%Ip`fPowGG)TZ&KJvBP4w|U&oK5C^0vjx-#a~38HhE@<+R?Es!9uZ z=g9-jiGZk81Zeh}7-heZ8FcjKWY(){fOTySqZ@YP-wnVk2r%Z>TWnR=(g4zAoY8kR z1#NG@>0SH7wN?a&d`5y_T2;?$_bT`W$EDX4kk)CyJljU_cN}M{$6Y>ZYdM@%hUPy8 z;L*vaui0l~peEf30KbKd$d6kWwmKE_xvX-uPl6+SdqjOvbN4Ctrnd*Re)FOZ*@*K1 z{2#XJIdoY7csaeVwD|+@(n}+gr?6<)N;0NZ2B-IFK2TJd%@0i2Y-z}v%R!Jur#c1P z{osKn{+~IKQUDXM{{_HoA<$>TV?MBV7e0n@vo_lYEB3>f@Q1xmo%n{Z zeN(OfLd(V!X#e%4L_>|xY%Y*|34uJ0f}RZc?byoWNOq`NI?z$Edymn5w;!9k{0A`h z{q&0qysuX&w><(N?hQ>g<1lRCDNA<2?svxW0KgAw83F*G-T?#ZkM6w9(9t#-vB@%? zq!udvlcrV4yo2Id_KAO!9x{VK)NymSI0nD1sZ!X|E~PA(+OEpD_5k=?1i;-vefth% z?-l2+^4Hn@pO@6nw{Y$jAorV%{1bq0Uq1){KGOxy)86q1;CJCqc?G%LkN|d-RrBV; zcelgPLNJX=r2NQ-zg9h`b-AaEJI5;VF@!z))qaXVg5P^V` zDX;c2l-Quz(9mN`)C=WrWG

ih^D={sL+4#{bi)hICEeXeF9X;Ny6E)Eb+;^`!0M z{(G)oK5K8KL7y#87zY}$w>FnH~XHT&%9Cq{s-)(Xzr7>P{#+tIw4&} zO}fM?0zK;wUT;CjYMr^ZHDP054|sQ!UME@EuK)M0^v^-=tH&D@w$_ycU6A5#f@a3g z-fV9#-;b~84}w7Q!`2y;sH{W}D?eo*Y9y zzS+2-H3sxe=x5MAl^`6Nte@BLK(Ui&ca&?zf1V3{8PA8hsU)%}&mNBaPH0M(}N zt#tr=Spo3(3xG$~_&rSX{+}QW?jGKM%JbIWH;)Seu}^S2~w-{gmAF0C+v848f>k z$W#!Fr-x{6!BsQIoHr^kA*BR+W0De6fEhIm^ra4;# zOT*APTM3lqegOpkyhUMaShb*&^?UJEHyyg(Qj)o^XxZo-&mWP*PKOz2t${w72$wz06#*mvR`t zx{UYx(Jd6Pr}6%TelZ&WzUzc7&iCEBG6|6a;JGKfc~QSs69D%7@U`wPl3#ORdjgtZ z{!7e{`#r&NZNG?$_v7A*JYv6840JlMKL9TsvpT_wy;)BMV%%sqX5imC13C-;D*(J? z;SB&jey2%TFCzoK;j3%xmDc&JedA(Ifs;by-=rW&371j%^m~hJ{PrL0oz_LHA=HzX z0^pS`CIG(S>#OW3vg`kj40!cfeRrn3HwN{c->d&>G9GS2vFKDYuiXVLUMhL8dBrj4 z<%6G_@0^%YAgYwgY1M+WIA;!_EN z!qHYg(Y}o3zyMRGRG)DhZ4-u#E~pGR10Sjl?V=oMev9Wu#^tgJD*Bhd+imF>>%(QT zy4q)%_^guvZe9&|)e|a*V$c`otrQBcN%{Q(WApv*cT!XCj8#Jc?}Cxf|P(I@r}p^prL|Lr%vD0E{DMY$2)^2S4X5vVTp>NU(;^ zg@1E$kZclVXdWYQ;~eLx7fccN-Wg2I&0ifbSnJK@R+PwAQ4GIBkV+wFDL1p;AB^8% zE1`T=glHg{B{5{|O@hL%d$nBFo|;|xQ8t%t++$7N;T&gzo|{0LuB}QyX_nd<+j8cO z1n|+`4#yzb(66RtBO@ZwK8DBHJ!EiXBXA}y4hH`Wco`MnlbQJ{0D|hss~tvJtxEP} zZRC&2PUPS{it2TLWlsD*LvwpI0Q?aQsIJs}YhSZ~t9#`Spr{X53c&9?`iqO~PYb8^CR-=1N~T%g4} zu&1alrc-YG2BXp!8<7ixkv+)(%0M;0a6(lN%3$s57jeua$C+ObfX_r=iT3r^{pvU) z$L|qNCQeNd)Qdkz8KyN%!0ic=sz32;XO^vjSTm zEw-{-X)6G5mr#}p+=$^h)m~l-&0WgBoB=O-;9(f=%cA2m;5jF)k*}9KC*E8o_Wf!B zcmc+7fYXB~Y_OSR-R&oMtv6ZQp#^ltnKdm4Ou6?s{`w?pd5EI7zB+AE! z2!0Wu<}cs%0LlLKWW0R~h!RJZMYbGi038eC9Lr_VP#|_46K*HtPCD>fbf~>3)sS$1 z={fGXe9;Y}u4zuBGjHSW6b1co0FGbztbWyUTG!U4F4{YKeZMcmDSze5fVmx+|1kP% zI`l&Q&A%x)PW$=U8QU#@z<{P98LVrYl1?wwovHp^3jkgpD@R;tU+xpmp62~Q0NEDQ zca;vu)Y}JRR@=~ZN9>sN?>f{PhrT#B=hOerQ~&iW*&uQfYCpx{gi@A_DEe2y(jXdf zW#>nnLC1&jC0{O>q8Rjb1>gx35UbYc`LQ;Hy)BSTl)@^xO?pZ= z)UPc^huiJ2sT82@dmC84nkZABedsmG$?hL6hbsM)?Pc7LBTMe7n%BvTYXQKEf<7GD z;m>Dmwr``4yAoE%(OL2#YwF;HuTVHMRR3wX8+`$$viA~h5B2d{1Moj1zY9=*^qsb0 zj@npf)N8U;=C9ap%|DH>AWC?M<)CJ%01LsP><<)rZ;3?jpS5_W3zCn7KYUZ)DwZ37 zZ3XNXpU;VbKA*dj0Gwy5=d!XewYbc{_z%-FbRKk{48q>{4RA~})m`o`V$E;}%a*+W zfIkAj`4m*|#dAA-%j>iBE(KmaNqMau1R5*LFk#^16#?+ z%iII6;LFtl@Da$WN!=&`1eLKz8Lp3$j8M(vsf%Lm#aTPJ3<<0y8R6m9rIE!xCX2^E z-)K9yANAUt?AQBi<#)adue;tn+=M@4+1foeoZ$Wwm=CYj&0{U<6(IoW7TeAJDF8kM z06rV{aYwRJ>*Ej5d%cz%**f6UWi~$IxW#b>-)ULI>T{o~e23;r=RpZ9Yd4dX`VLvC z8OcfofbVr*8CSF3fA4zF^uBA2K z+sq!4ED6Qu^?I8ypHC(Jq28UQeXBr)ICS3q=qmeReo_gyMU<$z`7AZOd3`<@5ML$Z zKRdzb>WjeH%_IyQ0i5kvE3ac|6m@fAdqU6m=@j(N_kRbL`Deg~1B}NGssk8&VSt@< z%vI>%Lnv#rlJoZmxbASmC(UgR&U*I}2nMc+z& z@)t5R0Tz+f3L5d3)#}$n?=7=f&fEcXhR5zIWNoVCrKCzKTe%fk12fbj^z;MBny0G; zSoxB{L!8rvdWI& z-`N)rz~{oh!!o$0y{jg_@orxG)vCR=2L`w-=&Nn3=Y>^^phEWarJD4I1L)hsDW5TJ zBZ1p|&U?*+D9M%2mtCER0M&bZpX<}#)s>w`ezwu;E2E3*_UyM*=&_iaCG;)BFW}^sz zY+SRjvln;Aov_j`F0oJ;u+m^(SH-Vhv5?q%efN&{9E~ZK0GfHQ8Ex7BlWnCA%Jgo< zty-Bti&5zdSOZ2a*-N4j0iBe1efoilE|AT8zyEj1R!__G~#=ijj3d(_Hf_u=Q04(1QQYkZx-W|~rx zK>O@QyDD~n#P88rM zvRxYzeJaO}KLDQxK(!MNV1Yt@U2@TFeLq@iGZX<0F!qIe_qlozj${@?Z4GLDo%)*>vk-FJ5wPLNy4`u`JvSLRfOl2Ch* zL7Er<|6V)*Un3rXS0tflENH#26o5a111Uf?C0mDD0a4+hNccBhj4oqw;0g;N3p)cD zi%p2A6^nqJC>;mPcM6r(CaE>jGqpx~x|IKiN@ccQ_m_8><^BM?vJZMdXQp6*%NZp8 z{q+A?;OC^3du$jHtpa-^2vphfvS{d2xq3f?$FH@|)*p8Df#0~h5OrtsLAOYz4I|h{ zp&H2RweYQXQbY&df27R%zOtBd9RbKfNO{>1*K zeRcr=&juJ&FVI@l4{@1#-kH>Ubw)m(yNztKojUz?{FW59h%CD_WDi}q<9yD`jYR6o zcvrpagQ8Btaof3BF=v3C1ZWEzxXcRu`l|zeIyNX`tq78sgnXMw7T=-+r|peqLDXBy zWDAz#^ergzrHBM> zjM5#7bJ0bR#!rSPv;S%a{5~8=eeQr(&Sj-u2uA4huNZ*GsiP=ruSsS_ARC7ey?a-+ zf{y0bUxupNCjd->pPy%8WL~HxB@gs^y4Git&7*F(R4xHT(S2Z@1enGD~v(mjUn^e-!l;>%2;>y!aaM4>k?8Y9U!KxRW)H zi8bjBuKq8M#_2esRzth|D}fl=Y}!lu=P!43j!Oc-_fG_XKgIccl3i{r;SubW`P&D`U-AAp$fE5;; z`ey2x{RIko-W$O<$50n^3iarZaF2a_cYap`{tOP*t8G^cz$*(YD(;jGn;dRScATRA zo9fT`&iSSKB6ULNJURMI3GUI??=9(GdI12B&h|~uviv=p1FW@%YSKOSLD@P1C;e-4 zcUWFB1pY1n-q!>59Y+Y8PLA#fK==hXB$q?Se4OkE&Et=p#e4R?am5$EfNsF!l%@LL~mEk>?YOaBoc+9H#=Sr z6aVf3l>*?0F5OE&P;%=70QGRQ;*R3i|6LkmkKt=LmnR$$t-oEW&-$Bspgya%Z*3^~ zJCl7}D4UOl@>&7#`W)S#&wd$Uo0xOS&OmgP52;0ZJNKrtFh+e7Wvj$u1SR{_$4gm- z61jbwO>d@Y-yP;on!VwGeGi+(LD&@JtX1DN2K`;%)iehY6wv&;0QgF<9HK-Zo_XWMI50IhSgBkItvg zQAXreC4v$gVp9b0v-FGW*<{PkqYm&JIO>iaI&CT|)vS1C%8kJIqHHF=eJmNhV#{G_ zdu}j9oJHVVUGPjrml^Eu%v66h76ngChq2+AueVti>WFqIk=Y(aH!{XHLggtFqQa}Nu+)EV)b_R6&e;8hZ#cxYB? zt%tf=+&YV16P@#SOSjoQ!y_#W9YM|OtM?lJ?|Q4(-*7;P^{-X8yadtABV&04nekD` zh}4`3ja5VU`zZg%oDZy0uurp^l=}c!xE-gl2f(k}g{CK-1^(IX3&y^mn#eCumpUj1L5XK=){^b^ z2z1lQ2v~ZKY_|KL3%(sN-kYmGpK|%1t{Q+xx1aZPMOT`~+jsgj?;L-#B-VO=y`4>X zv%LZU|4=*te~Npw)WUo3BZd@QUJW~9Q+BuuZbcn^5cxm!*KeCh;tyyTx3 zJi3??FE_(*+3z0);Ew>n7lF=SvN~5H0Q@}w@M!?xiwJx_ z?16a%@_k02Y}Bq(uC$7l_ex}qf_)@w9ww7mWy&tsbQV;$rqXLZdm<;cNjpkf>0VcW zj`WG|u#Lso@CUZ*Bthk-T=Hn%kbUD?IXsr4F69??BOe&Pl3oyD3A9Dx=}#p+im=eaO*l{ zJLNiWvS!e7x5Ix{G}px}AkJ3|+v-3FGR97 z4pzL6$ex}?(4qp7suu--7qcfo@@fJz2EvSS5=wV>*D%?a5>JvXlC_$zo3JU`Rmx>u z@P#B~XYt?1`uu1GRD2y_bD~e!9`1xM9->q!Y!=$_p1ksZPr{$oFEM?+Kc1j0*kd-I zw;8iyGhWDw!pCv{or`B~ji8K63K+z0vpx@$W$eCSBM*R=ucr@w!6pR2i0Q+V<@!7Y zSbw`b)*c)a4X)w=@WowunS=oRY4CwBo~jHZRqFHimB!%qGB*5Jf^(*BIAn(b;71F9 zr<8*5m+d;seV15Rwv=wjSA5r_=S+K)vJe&WTO_Ql?-N|H04BK9*vKj``gqIYe+l2w zoLvb3uRx2zlw$d2(Jt5DL$EY0?^DIn_ysSxKWOaIf$7^282lFED>;T<*B=`Hhp-pL zK;aL->z;fBzyF=E9ozumy&1gm{ognPHvss5$*Np)3VM{;)zH>8{XD|zkb&C~Dv}x@ zP>cIrrv5`$R{K-$`T+PhiP~)p055tO?-KD|s|#=shRi2iz%w@aykzu{de~4edxqU7cWOwC>nTz1dfmnlKXM>4t|xVtEzYFaxEu;^vL3xKbPQvKX@2H=&!k&g_H*8wOJ z%OZ7q2RhVJAFj3{WVi}|Z&)R-qmnrR@bT~)i|jB;uP$&Icv_7q5nMFOQt{+bxc2@rqLZG0~}qS44tp2qt3>AKiHy#oxv%udf5ZNftGkRzyflm7+C^u zbSP;9$bOfiw+TnooZi$DDwN&6oUzGz%-rSrKJCF`0G1i;{Rt5ij3QAWDO<+;3bEZT{mpub{o5B zx1D1Sz~G>+^r+{3jwqd(Zg=Ff`V|5l<+%3RKMla|0)UrN?4NC+^PP%l|K}P(VM>6K z|NWseCkJFn&T$w{CbhGiDUD6?{8EiwMP2iA_I6VkUnsevbC^_3%6%-@K{MyHn{l+^p>z!0G3H7}#;Y5{mrmA}ot{(gmzx=znMP8#3kWZ+?pyGl@n zJq(-3ot*cJ0r*q^@Kv0{&Fiba|2G5hn)V-&#Y7vcZeGL7Iu)e4ag1=MG8;1b+*geOrJel-C+%UPx8o1IL@N!tklGX9$cYr5Lzu%SRt8?m{qgPP_UbQaQ0@99{hWr$$feaKK`)TI> za!u#9T%ip1(L?3jOaBT0|0MwYfPV;p_r|5Y=>y}<1qDo_1i_nR9OQ?jXD`%<{qD$P z9UFz&QL@lxuaC2*#zk2EcsY0_@<5K*BPmnZ7cf~hf+90w+d-@N!CDLY?Hr|$Qd$f2 ziZ+!4FT3VmfBz}~-;M0!ZDh4b!PYoWf`qCx)TNsCRvfQsT_~+R+?;y3%1&i}T}uF7 z_pt&VUKzW|1!lw`J669~opW|O?Sf0e`PG{pYAY9SlelSKF+^Tf*Wqe3Hb-Vzit`u?BBQM#M()0pAs;(JWA%A0Qha_ zIIn#jOpK3&qA*BX1W-XNf{daM&Pg-}-^5Aez z#a*X6T)LY?fY=zsy3ngtn3X5{SOFxLUg1mi;L3il^S*`tjE8c21evKnFu(6LAjqy^ z7;;&f_Mc7t7nSOp<2G?`0;0i)v9W&*%Sx^Kgmb}AxC4H(Z@B}yjgO`@NHS|l5VL|n za&k`ozXI?ZcAl`F1c587Hk>Saw(@r)z3n zrFVzrN@E?dM-?O?9bfJ51mLyaDwj2P$u{fw`DPb@uRBX+Ky+pk?g!UFzIeZnJ3z^) zH)~j7vOed)urzEA)cXV~-iDo^5(uY|DVGAXy=P&T!yuKHOv*wI_*?>@E(-c90^lcI zy7Z6cHz^8w-`LGoqaWQ3&>IG0j%4vKjQz(e8T-C7HuvQURx&iFvyuL*0eAvw>b$+& zZiih=`nvX_>d3}#NpGnx_^$bjgNg33DmkoOeP8m*&VL$!=ZwX$|Hc8pf3fzEV>*$p zs(qMLb9;f~my*EHd5>41oFOGC@DEO3y~oDSk9CYWdV;c(&oC)J^B*VpS;1Gi0lR-c zea87S`~mnMuvL1zv)Hzuz-}T?;gfbnVZoplx*zbARG;*>|78Ha4FLS@R|&v-vSvrz zmB|{ducYhGtX+p1k~O|E13rnXnNGavF5ibQ_tk09u4Z>e{Bc#Ghws}K-w1x3PH!y% zZ2cMf`QNO212Xi{8I_c!y)&PZi2}p6>^WuoVfGjfV`GEL7t^uplXWLggpPeQwyks~ z)ydxSN=-`#Tf&tC@V~=;aM)T6p*A&s>9p8nBYRhOK~3Jhl-MX`pKORdYHv@cOeAHX zRDwx%-f?W^q-3`{|BPFpaBp;@Y#GzoH~{#^zuDoKWV=+zLAk*oD@d@Ye*mERpgZOO z`dNoTi`{+q{{?^-ki3}t?Y;4v>=YND^Z*6cN~T<@X`a~dw`-1nD*`aB;1zXJe%^K}8>mAny6 zGD0nq5qx(&I0xrWKC`5n=3jcw#2zKBHs?2rk~M?Aj*uzf`WP|)G7#INgp zj@JE30C+v~E%|ZrcWK^}p<{jpGe%;GRI&lYA~p&eVB)I%cAVg`fi(i`VMKollD|NlTo6=?YzI0Nyz*aLNo8Z4*(7&onG-&8eC63xHW-4ZF;q zdS{W1gMxlgOJ5XMV$rO6u4iG9Xj{hdDmFEF)jo&46J zT0SU{RL>h~Od_Vn0|Y+t?M@5jzaz06KBi_@BWkm$yrp)646eh}L@E08_e8*_bWWr@ zE9Y^v&2k1LwORDnyjfCP9x@~4efWDa;D5L7WDxCuYDS7(AkN6PRRZlc9M(zgY#n6L zoE0G=Q%Z{H6aQ`i{x~33N@y&HbqKRUiBRYYKyY*T{2~j@a*K=XZ%(vs+sb*}{%H?* ztc)C8-VG}RSOsbkyV~tZERqz6EGP;^0JddVUz7p=9|G{&vjPWuj9hP9$)uJdrP?~r zH3_ltfOi5z4+7Aa4$f@P$cY)BJ*%;XL;qK+{|XBtBC!Ch1noI1cNEQ*sN-9-bb~%y zY10(diQ@l4y?oY!%;UU7SFfbpLtkjd_M&*^$(|azH|W=xGk?%h{gh$R>DBobM=(R= zbp+s*ku(>F)TcP4cH{GNi`XLpWuMnMkcom{^S7CJsSoQVVuT} zlL0z~Ac3c5?sQ(Tq%z| z8W(kYMM~hJ$V2ut8B>`t&Lkbb?pxDd7`(#P#Zl)H8MCfOc`HDT%1P8BeHE}SmaOj86qk`78O7Uxj*q zXJJs|3G8T4CAXD<*+lnG!uiwOcun#k7YqXVVSBk8sHnXts<>fOA}oS6-SPw3^I|Mf z$q+IlB~vfe)YoYQZLHi7=YUB$!Uo)5#?s)RxLN@IG$8KK@3&JAe5d=^Ger5m1Q?`@ z(^^wP`b>zltwh}m3@S^u$!pZ86gYIb zrZrMT`XgV)SY`sZ1X>>Ej;~4pS#^SNR8unmfIAH`p+B;BJu*W3;d%h@uT9uQR;`b| zIu&d9*}cVK*Z7ly*c*$}y(r;Q{)Ht_(BJZxDCij)V>FvSKgPO#xz+ODo*at1wAPXA z4%MgiKYQNidEaGFi?VMLwYBGUD6)fE~C&1$tG9#LQw$V~kUMVBN77Z)qwl4Kl8!+*^ zT6@K7T8F<1z&|}|oo(8B%&mVe7#t$`n>a%MRqIn;wLx^&qK$1Cz)yQLqGpz#8KOg9?_3I*tAN10u@rZ`@@|%sD}sQ zq+SON^=NYIK_%5_(HJ)|c2QPlM)|UYfI5gwYa#jphFFE7= zn*$&K7^W=RZZFT>X&D()=h9iAt}f-Wdrtw}6?_Q_`kQ@|(w(fD2BmU1aM^o~I~!y% zj+-5Aqt+a<6J!exX-QU6?I63E$&8;)@8uVL*Z%qleRu}tivF$)_{=x`Zp}($B{MU~ z1-tm$?)rH#*^Muc-stYp!~l2=LT6J!X)4#UmTWRP#g}bAVKD^W1fjEe0U71;q_L;& zEpxtX!QTnMtDnlq|9;tafSYh?;HDrWH4U|&b5SNLjkB-ynoBi_q2iQx$^Zzt049== zWWaCa4E%)iw`-MLRwgvZMK;*Q&-%lac91-gp1(A{2K@B~;MEV=pqs?D^a^FrvZr)G zC3Py~VGb_VEfV%yz7H{JWx`%jV6;~Q{=YQ?{$7B)Q`GR)eOrh%ZH*5|I-@7=5{_U0 zEm@KiTdV*qbSaPxdy%pKWCpzC)gI*41OWKAm&KX#9J^J_VHHc|cJex@v1mLQIhTcz z)4E4QAwCwFwG7?sR`z)~`d4wz#$7Nx6(fK(FM30IY>8+Xmzu)V7?K|Q!jFPp;VTcn zK93Cev$g~K|Aoedta(K;{do`5c2P^HQ|JXZ0QieD;6*{dkl-fCnhmj(D&h=3Ocr+8 zqB$=sYjoQbfH^B0dschpa!qR@zw=Tu?mG-!Z^5i_2!5*9x>d40M^D?cpRRJgxQL@? zZ23#osCA##>F|>6%b?j;mj2ppWWbZ{Jc3NzrcluTf-fXt(_QgCe&{(%ce^tci60=Q zcjb#R;BUq^{Ycf^b`NYJ1^j?*jpQf(HV@{ZuAhfn5W%Qd48Svgkz~LRrmyoi9dgv% zb%Hb6UFdiT{bvdLt@9s97IFYUtAbW0%!sguC&P9KQ%;SLOwMmnnsSpKTd4Pby)POT zn#Tx4)qVH>1%OuuyeQIN9l6eqBTu3U-W!ZRB@=!!DME>eh4?8WkehW1$dn2_lwiFi z1ex~rb^^&qObfT^QO9i`ezni;3$|M2^Et}&#NL`v_GmvvP-^DgG5B;z4v7ZDAK#^< zm4|igHa{I$ozwaqMGq9?Z?DNQRtP4tasjv53lCLrr7>l<{L=t@BPi%K_wucmdv=i( z<*rYQ4N$jI9`w8PN#1c9qwac@4^=6RXej6hV@J$hd(duyrS5*pyFS^z^hKq{^ggwO zbF1G;^jrx5FZ;szaVeXn=Y-?4-u`;+OJ=~Yhp9}Z4>n+f{D3a?d`*~4nz{u1Vmb7T^WgDy&VZLu@&Yw9*HJ@LWdZUO$Y}4iD+aKGVUu9t zbkT`MOzYw)E$XZO`=0>de?sAk0##eotDJ>U%Qc~cSNkYp`(Y^YRyxYy>;UH-Sc|)$ ziqU%BJ8+@x!+ELN(+}QR$nHUbaJ6*e$E`I{^R0(q#rSda2bZ14e_sy(Uj3fF4#0WJ zX8Q$W;zWuRHV2BJktl&*lCi#<%>TjdL##He5$T~%(^|;5kKB65s=u+?g45h=nJ`|P zL$%)#isFP|hsLw>=+E}ixOKL8=P8S&7S22I)ODhzQw?|l@Nq;NrzbP#ftu7XuM>1Z zFpc(VbleZtcj#(Yjv-P}>DMU(Ugu*sfXukrQTE=71D2h0SDuW-hp4|?zHk=m+aidy zI0>45brf*0_eaZY3)D|P02J2%km(Hop96#c#1#VYIwM~Zz5gjrag_xSRp9Cus<}E{ znoF-~Pu&W5xn$!$>ppR_rGUQk9OtMfl;G`&UY6pf*C^Al=u4ESh_4U(0R8!9L9Fe7 zUawN|?Dl+rqON|3QApkE&ulpZ!FURLE$Toe3_S(-l z$iBltI0Xau0P7M<#BP_0IjwE&LMYa0kQ>y%#fbRFDCnsHAB}Q7p>vp(2+D4=sfG3U z^c_wfpQLa15>4I;XK(;}-HRqy4fq1ANl|>}qVeq5AjsA1mGSRy$uafkWwzGcUk-Zv zAgS-alX3dWu;n%_=7d3PVmIRe843UzS^yRm?!LsDwwUI;$y-b93>3Ed?=%?dUv@8V zD$j7W0K96ze+8&NlzpvdswUPJ43gVY`D6;ea!q5_&&k*mq8U{-vi_(2!G8iYox6Sj zJkIN0jf=Q*p5jmrnvW0d5O^Fp#~7nvB(e7w@tj*H~1 zOzcwH$`&C23qwoe^_qTGCgy2^P!@Bp+kdvnLQ^NBPH}Qdy-?e_Nl|w`yw@l8UH9gX z$ew9{Sv|gqwVa&U`XL#uC61q907Ff#?)&6SrVQIhaVW%YKkk?at~CI!d*TD4z-Ix# zxcd|8ztz1fSbhSz{2e>m4`%?rS4SPN<{zxFU|3ZGxC^c{177pssGQgCu?HqcTaMFb z?HH5!I25ZL$Rt&uj(2tv&RHsGXGhK7ZePL_ag?=*h81MSGi9w*NDjxMu$lm|m!>K} z?8*Un1=bw_-23p0wJzvvA2R&Y_MuiCXL4$sAnJ?uxSG~nYo>jq=JnH)_5UUSUNU(b zj`|T(BV7iWRF`JRwqmO17vFz3i1;tMOAisa`1PV~)@MenWh8R6W2r2zl#l`oBMADd z`^IuB3O#6Q)@WcC>WY)erup!1?p*ME{a$yPPaZI5?5~~lrzdAG4xmi(sYY-n>vw-y zx3~SDp`TIj?G$!{fVfm-I>{lWGq@G-;>sxK&0hT~!j`QEC`F!S2kiKO+RT~K-RiR= z;y+OR)t;9ADwzc)?)vPlsa~eJ^atQWgR|P}t&6%k_8Q|~Z8}f=r$pLH`ld2aWkRz6 z8sxFb)Kpvn3&XaPzuD|3%UFpb*?p792PoSsV#`6R{x*8tZ8tmF)u>`_Yg?6!8}1Ix zuXIn{OQO>qhokub`rzij2*6L`{J)Rf7XZ&=ZBG9>P6qjpQFXjWPu*xe=I*vYV(min zXK)$t6{$liRfyyhGgEE^gj=sQRtnX@6?woo>M|d~3pg z=?9wTO!}&H4z0&g?z_*I?Y1Rr;&>N zu&ZT9_@4`Xwq&#$8$V00(lOAzDZp|JYdjC8n!V_PWKFnXof3YoM%OQig8~~K=W2gJ_ zKFR&%Q3tK<5CC{GKm7rC$$_r#EV0c8escGGC44x~QGYxe!Cdl}cun&t_M0Ek1@t`i zCoP{xZ1Fz|z>nw{Vl|+xPK|Esbys8BPkrmBCPdhFGGvv|Ql~swxg<_#FKQ3GH+{3s zS+&nGrX@u|f3+F#0^rvW@HPgT>F=Q1-^YD2x<{F13jD;O)Ig^`_qbXgfJ09fXgDXii-(eQF%GaUJ!^KQ0KCroHiGxYQV#I5rTgqx{`&<2T)W;= z#^htTXr}nZpJ&ErgJ_PVH%}tjtMim?R*-qh0btn!_MuuOaynm(|9I8!>FeU`qsdWj zeg1U-e5Z2Ir?ZxRoz~tKbI@q^_kTh`zn1`^ULP!TB{?Gj$EQ3}#)=W7;Q4J5ex^QG zztj0rlYC05@p3zke`Dyx4K{q;VaH_fLfyR9ta<^q)M?l6e**x2 z4n543cYS$@h1{OZvT}~wk`N@{y3U{ftZFVauJd!RziZ#4FYF|saxAv~;01du6Mm7F zp&9Lo4rLwdgExoX+-R+2!%G*FA1WO_7@rPtApoBYo2CzCYwm3v=7JWydsVhYLVwq) z7puW0D*N`&9_w@EFIWl-LANiX>=yjEzv0JyqE?`Fs8`_0l@q1KPl2{Ht)APKiOy%(?Q9EeJa0 zz_ckWBN2}+$(qkiw73+fTQDl4b{w_mp_o~4@Mr5=EtfsoEbOvb7Jgm&OFt$Gz*i#! z9%ab83?%rc;Jkcz`gRM&QL+subw4s(Ti#K`2Zr&9q7v-!ML0_J5vK?gBC`9vhs&dA zxjXcHpQI%0K=D+4&YMxx0#OtL$fis~W~n~sdS}3Ahr&`$u4$_Q?!Mmaf*oQ=@R;AT zf&=cPe8lT1?(&p_GXh0;FVU*18JmkbO>)}m?)oPH_|qsdQo7!39%PLO;E)0HD_$`5 zN0+;dn?V4Q-)%T(x8s}%hLPa82g+F<`mOaGfa7+_dK@Yk{5Pk&%_clj*0KZ4Duc{h zZ(Z<5a004^&uPXV$lg@OYX)ekG&k1+fR}Q35+nZJfs0(-_a9Lll;yVy8m{e!f3_I- ze7}37loczS^}G=*XUkTYB6vm|;I>|?^_O8UN7?&dZ6cES z5XRLX7Jld#8{M^}RVkL!T|%OSzLE@hDU`d9{AjISU*hOi#g5U4tiB!ub7(F#x7sh7 zyCcx?Pg}Uno|(PFQT&GF@zvO^9hUvP<55nu2Zyf%96aIVVn&o#l|=|3vDgoAoXiN{ZRUdW`soV9PrR3KF7}Cc& zrE^#xoRMkBR+c0*aDq&xmi$X(VFeQea4TonAApzRB9e&RBh+L)3awq`;B3?r zztyLt#>)h`F8`0cvjEVmxZd}PySuv!2?Pil+}*8ED1{<5S_;1!6bdbEfl{ocXpv%t zqD6xR5;X4a?h3L0^Uk+7d|8sP2?2KVe{aj~X7_&g&O9@7=FB-~&OGwsi1;-N*+xu+ ztqDZ>=@IQydfH?-M+QFe?&P@sd3L{Itm)pUa@_IrJ{!u*$I~U}@n0VNDDKA~y}fq8 zPb9cx^s0z=FW)UXwXPRakg<=knEk`+)1ouSf@rts`TI*|cZxE|aB>4;B^zSdb-wj zl)M)lMn5JcuhOAqV^#fF<65cW|Bj>O-)~Khs`N3n<%tKjj_>oI=E!Yzz{`L=2{vc{ z<=qr0HWT@F(>XiELEUq5Agd3>V16pi8G&R$pwH^8F#XpM%Zy%PC*C^lX8^mI?CuoMwpoNRB?dgDjY4B`O=XLblE{T*>5KZqaRMI>3rZfd$I%m#2(1H(lJNb zo385@T`~H}FnBbM-%AN})9jJ;Q$4Q|&l$*B@1tqoIvCd^2OF?^u@c70*~}S_zCDrb zE#spjyWrZP-~WU(qutSivw)}U8IQg(Em2xjfnvNn#&B}H?<^Pm?n zKHm522n=OwV+6+8zGRT;RM1zl>Pweh$+#QIj*AJLL))T$^`yr&KnKn)&0E(#H9Q6s zILzDOEWDXuRP9E}uX}d?mwgxek1+yYg)vxZ&CrpIxA{Uln~CPiz@>T&U@J=j5uUdr>b)|7$hy2l5{YoE+S2UWd`wgX=Js^<5% zhs};3v+KACYYoY-n=aZdc4|>;LzNT+Gm4b74?I6C{zI^FWeV51zyaU8L;Vyq@zF?v zb8aFyhji0z&`&Nstw-$2JsSn`@Wj%k*%dr^8bL^FqcMHE1(_10KWm)LMYkS9ADV+) ztwev_jb}>^sjj+o9Ey&@x#+h3F&n)_8KHJ1Nb$GFbt1b0>592ebD;XY)|5;~=z5>a z)bx<8{33Z>)E)48v~;l3NT0hDeNFwl26N-RKj;;82?ELH2FdpIC~$9mJUPz%_sD3A z-m!*&%8UCni*t3P8f=s?;ndqch*hjxRF~E*YsMYl-?hMTr=xw)-^!PZ$NP?s8_+K+ zp!1HvNmx7`@MYqE{Yka|^w_A!*e*+({_4nfaqK>AXwT15i^u`BjNqH|?j#Tnr-kaA z?|?_mO~;sMy{WmVZNqBOmCR$($ufDQZlZIA_r2xA=u(crMD(!3_G}&(AKEUBS|oDy=THL6{iRJCN6VEjtg+@22jyIvg|&-9y22DVS5zHAz-Rq`G1ncnr&$A`yU zY#P-V<45n@FfK!Wt;T4bFGDpq4JSBq402xbwK-#^F#)j(!1{W2z)y-3?j07*n8NpN zS2NB!tYh>>zURxT?d5=1V5>5W+`$nYRcVJ()b+lf?wRZ*65u(>mUBuhC17XJgn2O^ z9kV%esQN%1xM^&B+YWg3F=cf44_V?a`0w~=K_E@{RyE=xGM#9{iFDQMl6=$k0viYP zb0c=4YBz5U)_#?6fZzJ$ptuj+cMNd=cLkV=Q59KU62c4e)8oJ@rxHGMJxK0vT0p_uDCB*vDB{F zr7=7N``6|F{FtM8I3kkr9^0oS$KgSE6PJGX@<&tSh8M@ia_kw?5&6G8sCk@pP{*i_&X(!*!mg}C=iT-` zsl7RdiEEo2@ML%EaoxMoxk9O^i~Kp~=#Fs|L4=vCN)P^$FDi?UTTMaRfBTpWFy*5c z=a>KDyStIuBNt4OJwi;sssmp7x;T7~z?`XU1X)VoIc&Ga@rz?SlT9OM+s@vnId$sX zW$`XH`I?o>G2c{07p=tcE*l5jXZPoSmkj*-Q-kBWx2H!_`qx_4JGZmhXb+D6lr2ve zRZsTwVa(?buy)ltt2_bBryt!l+LIkha_Ne@21I|dOt8Zv)-!(ob$-uigC3Fv0_qv- zfjDH`oH*nzGDPsMvdkZc_Gl1Sp0-nJXZ7#m;DFagftl!JKmPa7m_BhK$8nZnGgO_p zmaL4*N=h*|T(X&sVSFp|ngUBS*Eb<+hQ_08wEYH7jWcf_935Flw8XA*CbqC+$O@S@ zRuw!&^Fv?OEN}Inlmdh1uvz5l@AQb~jcdZ5H3DPqfA5ULVLm3xQ{6(^>HQBee3B^>i4aau68*+6&&^&ejH6e*c;|aNMW^Pqk`go#L)m>qf&cBb zDRIH>r0V0mMhWjs`OtH==T#I3yo{1EDnH6DmYZ2nv_aUnAx-xMhqa4?cWIg&IWp$H zF=SSp`*+Slt49iGCe^cXpq_#=zdFt^T@vzhakxG8`Y3j;&LUF)iv@P}pM$cvXV*rl zj^Bg>UXzX-%m-ZmPD+idGu!%fts55-h1-?|l6L<|v08`m=-olnaLkTPJ9#TJsUC^r z=oF$**JDijRvhpw9MEN=G78mYN4JkYJ)5S;?DcHvkrDX$0h8ia&yR~XOrW1piQQQ| z{`tb*X%bW$d@yc)Ty@XK=^WVk)cd@Bn#FexY>UC2^9T96`tuSN$Zvi;C2srQ*rJ!ufqYavPn?>hA8@vF&=5cmyu!>3*Nab)c586mmS$YT49jN4BA@Q zEF^08e*-4RPwpGed5D#89+Zxw*!lV0BRZ$ZYc2iPug3^DVrJa)+(?XDD6KrR9!4!W ze%s-Q&^?Oa{nzW`;$QDg!$4a$T5#6!$@{mCBYNi|xaTeXEM8)9@B}*)7x1$#?VkNQ z9q?KdDN6d`|BZ~B`prxc^4ht$Tf5q^U$3UIGZ_%-lI~XhS+eaDoCEy_PLCH!1GbJ% zvW$9`X; z1IX<-9+uD+qn53WEB0v|=d$>!O&`q^K`p`_dS@~V!Lez4NuFszGIZ9e=>PjZ(UM*3 zdWRIZr;!ieCk=rw0 zXU0W=QAZJ^FJlXXHdan@IAmM3T!`sq6wTkTu|^kB^MbIAL00SiI(18K&j$PZ;OHNp=8MFZX zm|b`GFc*)-s9b}&YCjxFNA+nJ4PmAFY?l=D)MXCQ#@7)H)}O$rYRs*jFFk#=1W)b!XpQ<5`E za$$Qr;3fAIP;k|q@5O+bE7LA#^}lOQ>dd^-6#azYKkk`HJ3RgFB+g|XAGKLTQk1RU z0WaAi-RGSlGveeYMny-?_GA!6Gj>-Wh!d@Mk0!~XqH(3?&m{8yy^*uy4R-d9n6@n@sEqT$AK)!r8}u@x77i!ptPr$AMfKV$r(66S5lTA^l2U^a`cLf-)aZ7m1NiR zqyW6{wecyvw)*&fy<5a#9DSr~`#Io)G~#pPZyX6AgY9s1;OB52@5&Bi?dFs`SDC(S zu`VOfF}HmX>j@ImBvFoe@pSs<5zG%t_pPig{C|Ui=$U>KLyrG4^z-4!lRxW-6bwb$ z)u7#bf5bTYT)(MNpTIpGad9cm&I1X`sQ@pUDLFicV&r`Mb&i`NQ-kC|cbpkV?a_kq zS|iDnAsoYU`1J!gzp#7?eAumRtvH{v{n`-Nq`64}JxbmE_os$NKeF&B`09ImHI0if zaSQh0HE9r-4|MlHih|@~D zJS$^dRp8TL(yZQc8gnykR14iM(+y;(8%!GKgV{yet`>%7j=4CGEE|0~vx}7Xt0ASA zzCsXc(5!htuu8{Np1q^m1|f)^j(C8gw7f0J|USpo^)7&1W8qGO=^(n(@73x{z|ZnwmK27G)W8|9y92Jo(O~ zlqp3M*mp68??DixjQ<0MOpo7?A%jgcQJVgBI&-NUjccfD&aHwY3Ip`TH@}l~k@@Hy z7aZ0m&eB?nzA5MX#~4-L`ebUXqVMiXKi!2nRC5PK+@?!wv#oK!tL^T5Wn4V@`UKjB z-A-g9xadH#9v#qzqbn*U4h*ySaMYZ*hd{b_#}Uj+8ywW82E3SSl~xum+Hv^fhlj+3 zG4oOzucMvMKdfz>fR3W{%!^ih7H@tsEuMnq2#&C+NIMNB`$4gEz|$_Tp|@Q7+*kq% zR>W$`+NVRUI0GGVcY-WbUmaucB)gxU{bW|;R>iC%kOPCS%AEl(z2p98hs8_7=B6F3 z)o|kf`uI+{Bmwct zj70j^$1mN5AlxP?U|s=_MKOpL)d8>hV+O$_PqG8@TC&}=uU8?ukZSu(>b?I?WWg)w z)#{iN2$;R~(Sa$WnH)UTv2FYxM~x|PLqVcXzA-i~d~STSC)HwQWW<@QPmdvhp%J>Y z#<1pT>4^XM-zZqmjN0^hWi7ezgzg*-S3ML=sQG1koB^+S_o25Z5V$)L9qrQ?y`G>N zg22@la)7Emq_b-G-}CQHj>{h!LA@(QV;rDoFy4>Ap;jI?8j{JmOe)@caB2)>o|o;T z3eKmW9n~S)kP%4p?{?h*4+qJI;~yFx?Fi1Pi;nw!bpKPB_oer1-jh62hxw{I;FZZj zYtU&pdv?3}9ptOdfDYD)_2YbY2r6(jn~!BvdHKDGaqk-wQ=p;x>UYsc4%xE}VxDI( zKEBNz@am(|nfj4|@)iR2hD}@&RhYky=~+KcJE$FVJ!?J2u`UI;r#Xq^Ei~uWV1C^j z$M>-W11hWF-RQLsy*(usVwY(};Mw)8op(xEzu5f1{mYQ+Z?og@DuOr4(Iyg_`3`ux zI)Q_W;+lIuirMH&E3nt>PipUrj_wp4vU#58XkNSLf1~3rY;%gnI=4fOxa9Pmacovj z87jXC2Rua${6TRmN6p+da9*sWtQYOuG`>p)5ZTm}2~Yh__5QXU@Ujb(VLkaDoJ|)z zGj4;dIfElFj={#IpqNb7EJv652krYRvZj_~4SX-;4DF7LSi!8qw8#JT z!|2YYm>u&$a_g&zh-q*K~Fijd;K__Oen3fe@NDd zgVsh5aTL_^WFykQOEH!%JhoHxY+Elm;iUsVf}QyvAI^$a@K#%#b5N@|d=EB-Av0Cq zr34Y^8TYc*pU6E)MY{dNxUR7zJYK9<|N(aKMY(ov)2c*%P$+Y8lVH{HS)=J+-@>08RRo zZ1&nT@zgsL;;HwiMSTJ|+Olcq5cH}&+t*F=|CZ_|8Tb-`MR&hACdSWR9xG|LW4hH% z8GX8QOrh2f%1$*If5lag42phaCQ|TE6Xw2$F5f2|wWN&-53yP45%ff5{F;J}sG}Za zGi${$s_JASJd(b57s2r_qIXy0Gp*ov(TO?zU-p3F;(*sKaBaMJ<>P5_@m+&ir)c9~ zS;kSDIDW4dDT|qys-2ag>ya0S#T%m*L>0JH#m{ju^KWid)8 zwim~xOcWF#>s4i=dB#uw%4GUMU-rFBABt z2}mC9C=PhZLhpbt)Pp3zCgGq~n$w3qniXg4R5woQ(>nI;M%r&C@eR&%?wdAqaawrf zv=LyIEt_^AS7YLoBK;%_zQ4RXBMxiGf{F94_u*V3r5*UXuA(^L^=>JKFMlvO&VG7K zbVj((qDVhb#1)QCrJT`%UPi%xa<0;?Z%j_RfGUu}aUkYqPkn z9IIIx0@!@Yp*O<6p0iPlnqv>_|DHea&dg z07`#y@Z{+{?J>M%rL0(@J+-r(U%b{ks?={Q%At zoH%<$G7gU_Q!f5{PFL8~&pF(9hN6c1(!bBUXLxky>|e!rN}1fNP4yI&Ea%jlla@w* zjDTI(btgsR>vq7ajv99#V8p!nxzW*g!lLNH&ha%UclLWK`cOLpZ+4;IHR5bw zO>7H@n*Nw`-v^UsY9av%XLP9*=Ml&vB|VF-R6X?B@uV00&R^amJsy_lg5RyIRxzIE z{Lp$eE2rmaVfq>h?sdeIsCT%&lEbGg9hRUeGpQ|1koQxp) zTQhdd?B1Mn+Hibm2i`0es2`4A5FgNXI)hXTgNn$k{2lPiSs+~c;Gh^bf<*x3TLt6q zl5L<7&XsEHMqP|!Qsd$ymf%o)o zTQdcXl%`%Mlfp|2)vwb5-~VzP@a&M#oFRSpEmDY|!MR$U*ny=w^(G+aT-rwla0LWt zL2*BUC-<B6VtW0#vHeHp`c-imCL04>@~xBo36x1W=vVt3J-F&Mfe? zyR&F>lj=Q?;GbJbPy8&-r>>RC#8M`~&ID_9Yg8r8A+jznqaTl(w<_M9zC5Z>fmJYF z#A5#5)4Ig&WF=4^*7a2!@ai*TIB)m-`v*l?vKGiOuxE>E(UXN~BNm2g$7PFF#6VIc z_NA<4S;&lCS33T5Sj#w@T|_b{Z?7Hjs*cW+fA)i^@iPK9x{(z}j>yBh*5N3ON>PXN z+78g}e8$0+F7e%(9q>BlL%S53GpA`hsLqO}UqCv>=>!-}Vh;HXL$_3q@f7msESxVm zOldejcbsjhJo=l0R-WNJ^z$DX6CJ9TjW#T-ckNgwTCwZ2N+p6A*u^{ro##Q$+x`Fm zKmbWZK~y|+?q_lN5iR0OQuWIqr%PP6)d8>mrQK5xGRE)1!CVeG*N{5xfn4gqoL{9% z#Wd%u9o`wUkYfr~hQiBaOn&I{y^}LrW!PR0cs*+Ydg8@@emiC(*H_ctd$8lVBhmJy zVR9IOWz86aGJtOBlH7TpV`EOd;}gzq&p95o^K!oyWamKcSCS!$dzK=%wX1oMG7IoN z9ldZu$69gmab2RP((%#{G*2nL_(eDZmmn83)><>S?%knIG{o3ZmicwbqUAAU!oqY$ zx5obH8K1_DXSIvt$#zw>V0Wrgc)r-5V8BO4p+gY10{cGgYejpEoK+~>BJ_|U?2;Tl zb!pPQhEC+H*(-bDm~BF^4Jqge2r5bn`izTG*IxVR&{)ha_)qD-hqbI4UC>|aVf2u5 zXg&tUVdECWGZS(6P{&&64i_HUHcn-2lAT+w@%B1LG2Kii6gJBfghe`k=J5I$@2l6Y zns(9YjAG68MZF|n|M~(BvH{bmr%X3F?)M5J(s%l9X2OMPF==$$mJFrwyNkm;PtMBOIJnrn+8OOl{(Ud zxrRP=5HheeXR=bk7>Bb`hC~J0$+4%5I-OhPQqao*FN3UhdJf=-iqq~J8eQ2rC8yyY zZEHl=wsoQwI*bBFm!K29iUV~5V`(*VZT#BO@%%+SqF1Me>CEqs2<*D}(c!TieO=C- zj_iOrh~S)>1U*!czQWF|$U*opd1C$Qp) zF^kiY7~KfU(v|Okm;U=NoC|+{bz*#mJXypuPiB4A9iwUu9JZ2a)6ql6Oj;CgV3?Iw z(28+=%VqndEDGs?d=a-_-~MiVL>4`1OuIE>ZHtk&9P7RP2&!s_15dJVOIJ}H@Op;Y zas+{sci;&8&yabn!^jZ9xY`RDTCag*Xz7?cZ)uE2{=GVKK?)=oNif_^-|ZI1?9n{6 zbu!-4w;yAkzWVj4(Uu5>=FC;Q6ExI@zF!I5bSYza7Eannc?X`O6kxR&J*nSMI4_nR zfRf$YYX`jM@d3!sd!8N|!&p14g5*(cs}n3-Evg}xc10$%#K~W7@CrMXbuy9#SB*5oQ>MmpVs2MBccc*dW6SBAgmeaQJZS-1q}K z(kD+|!kV~jbg5q{dbO?*)#*n&5wN4cFviDv+WT>&ahn{Mdf%#?_joIP8Fz&LlgD0`4z)VO%s}jZhC; z$}X&(y0@+!)yN#U8r^Lc>)C#+2gfqzH4aCkyS@GUeN!eyWm9>Tb?Lw86C=?-%Aq41 zj^5FYK2wdX4Vo9GBI5_J-h2z2O><ew7xRNvLe|Acbk9ew1uD z>yxZm7c*)5kAJc|x)j;@Bv`lNnvGtt)6MTk7qWs#DC-ag|D_8)Idoo3W{uj4Yy!Hr+5u1F&0&rI>;DXo zAq1LNMXykBJ4 zbkw4#%l%qE9JN=|xPs#q^mq-AW!R-}e|}UvPe!@Y%nxPI=?>uNrZ(7@Dw6$6xts913o)Wa~5k9WoP`yJJX^&GDAUXp8U5lYHntG((v)?T>a(0RhK~0;`(MMOD`Q1LyJ^kC=Bg^y zE5(w9%Sm^?EIIJC6dsDM^hb`5JATg=DU+7kPuYIn;8@L*9vl&!P{6BUQ`-qWPuWpx z6S#8V?yXoapl9>G@!0UryLVueVJ_30pX|7d|3-{EJ!`>&W$_7pWgxb89eH(nC+xUK zb&Q<~?6~R=MRCBVzzyu^cf2wo`b}p}q7CmnwjCLoTBXf#U)JwZgZqmKY)1k+k^_GA zYUD5jTJp8TU0=rzctMbGlEH8!lhGeJWAL?M^W$jF^*E9=D!cb+N?N0;NeCu~lx8I^ zDJ;3Opoo?tD)AGHIEXPcQmcIpFuZ>W!$vl&SP2 z=?wUNH%>vXr%4f!k@AVx#>Dk3j@wr&OFA2NRANv$2H`4aj(Ua8a=E==A=(m!aSjSq zJMOE+zat_9QIS9usUL6M`#(ch@66e>%{J_+QG3Yn_daPYPrh|vw60Yy`d}FP$yvQfA^dq-ASoDq z2jc8|l2r8kEaPJX77dN~PmAR7?6j$XAybQ>SuCJ#IHXmaxDUHfP;g{aEbM^q-Lnz9 z6>@1%v$AUO{Rq1NZ^6N}h$#B~y4H;!kZxut7EqZ1M2mshOn}|4?;l-CuT6^UxlDdX z?b4XO#pDe8JBY%4j;PW3C{w+0kd32kAF$|ZgfguK#Yz@*O5vxo!sSp>RNW5_YMpko zmPhf+E^*ebsYl)%pQ5wZU{GAfJDSkv>Y>bP_xlvmN>-9lfvCHkF{1pCzIX_`U8N6c z;D5mZe`1$ZRz=!=)l0k6f5`5sDX>zpHD-pF=4={v9<*y-JN-NV9cpWhy|Eaj{(`aL zc?>h1aP~|_8*Ge1tsU{Bc~+Bj-@2I0E{2CmjkZ@eomVMEG$+cWM32V!e&aKwsV7}; zcXn}5{g}uiL74>7iiEQK<@omTpMF!=MbFU$IGpdq!F>pku1W)`wtkA#b>}@fE^4u~ zI(3%@?1X3^T~OqU8cmyDH~p->p|%~$u@n#Me6IKBr2ee5X|w3#WbjQ!SsCV<()L=8 zjA2ZiK&12~w10kO)_wVx@C+ha^G6R3jg=^G72q_P z_jba-^eKN-c7ob`U_9?Us$GpZpA>1kvUo{-C5Lvy_xiY z!`h}D1A3PtcZZSk`yo<4{&(P_?@D3LHhLUp?Zak;&*eN+pT>k zM?<)%xu#LZ#*7O&0kw#oLpvUf)2SwmJ{-RY!+ym$|A5?X@3iZZwpIHdaL>S~!%kSe zcLLAoitMV(qCrl{>5Pk7jDT@V;LCaRKO$vW*H(4te>4J@+G^(fWpTjYKaS6ErnJBa zHIMhMW?anYZ=-(GC)HCa{PR=LUwKf=|{UurVpYEQLgm~{W)~s3Z^a%e%Rs zxivZ4Mw2@AzL&?vL+p}hLHN3yDRbbgsCCZfTQQ<`*DspyE&AaTWn=K+-L_pEFb>GK50(RXCRsQEIW(u zdUbqEWsJFvoW^RU{P5340xSAcBN9^vM5yBEu?Qwg?+9SOGPz)SB3xN2v*?3Z0_sW zq)J?RV5``lAb|Q9iVOEoy?b+)7Gob11^pL}M0uG-dVA!uc5$>|?A1nI&LQR5`#8Hb zU=L$aKAlK=J-|??Gj>azx__H=Mt9bhdVkWt zaN-^OC+1KV#r0T>{^^q5DZQ!YP_?gi!QaU-B)1Nj5pDRlM(tdxUyrh=?@eZmH%3os z*@zv>7>j4jU6BG5&eS{irM9Z@)kQ61+K}Km_I)y%{fG9<& z*WtZ&83PKco5J}0+evL=A9O~Y^Qm29YMsIk_+|tloqJ&GIBBnzDY{*T?O#4V3`5eK zB!hM%Tg+9=$=Q6YzM-Qv9^#C>-(xgr#(URefUCoNuQ9HYaSVA@&x=*a2|F&hG z)0{LJKGK!SV^|)yV0B!wU*kB3fRxr4Ff#eCXU#*Gf8wq2aSiEfJJu!0g!Zn=JXD81 zHj;CMYw-Ds?DQM6WNln^WUDxtY$F<1+C`ks(IimfZZeHjp#1;GoOj^~J0;zEQ!GBC zes2$+5jQ?Hg87M5&-9l%jQhsOFzLS&26P-~8i)SU|h0A1f7m z7v%5n*#+2y0D*itqP37RQvLVcN%6}^Mn~rcoVm3!x zD2vH(IpDA4Z0n}Ald*3!My7}9<8p#6rGMXYNDI=6c1`-K$|!xiFT3c^xoc3gXXkJQ z>Zm~0*)&|*4T=tPOwYO)vdR-E&3W}0rFUv82R!F^<2cEj+d3ZQZH#Bxwh5;uXm{3bkxnYPY&Yonab9q&@kUmZ>xD1*h14{sZ%@6$3F@2LuN3hCcJo*HM7{iHrYj|~)PNc|@v zmo&zenW`ND1{WXL0-b9@3Pi|vz)P>!Sh$<=-o$yj?Z_6if_GMyZo<5_hG&h$@lXcY zr*~CEuKeFoZP|g6#*uQC9%-pK%N188nsZY&d=icK4Azc5;R2(b>b9KxbzQgpitdkU=7-i z3|I?s7PYHWf!*$9l0LZ<{i6nbU<^A{PvZy_oqOGqjBe6B3ZDW0OU`pW=eX`ESUHo` z1w}8?H$78x_7gZ5uX%C;L9RGEc+hz2vlq@GW#l++*QROiD(rxN{TF+r9oCWw*`?({mJpe=f+24c0ZP5ja-qrQ}Ru=qY=pYx(F-1YbpcmA7^lmc<&ZT zmhf>hBdm@)I0oX@4`xOu7Bm`v4fw2BDByoI0b0tW(4K&fIn0+N>dQIcFY3+uj-W6u zJx6QyhuEF`;M-GTJ=`Q0l~qO#P6co-Lk`tqJd9meDlXW$K6AzAnF0$t;OAgZ9Pq1s zQUGi|2FbsV7`u1BJeI6z^P?2w?b;(+$BFy3OS{)MPwMl(NKbur@XWXs8_FO8R+^)S zEuhcMTD~r>Jg{j>@!lMrLTRzHGvJfca|>s{cj!$6HqV^4cgtiiQy-A5nJHNV+v{GQl9M$&TNxi~OV*$dj6r54S;M$l2$L7i zk*ukk=7G;^{^dVOyeZq)-`FVf{JT?=y+xmro$=Rabms`PhN<5aev)j&vv9`!hpZ`A zzc@MCRpWRz2FhyWTvPhdO#0|*`bRzV=uwQXs}F09Eul@y9>XisrSIA;`yaCV{P2bG z(G;Dq7GrZEbJ8^WuB>)zDaU>Ui5<0TqqvD|hPBb3v;+RWEBmA@Tq^&UUAZ+6*U_2j6K<(Mry4>Va~$Y+ZV^K%2pHy{AmYr1O&T?C9Cxr>2a^4$9@0S zLD3ocDE)aP>+Tx#+aDg#iVYgAQ@OsZ-bvO{=D)F9{GYE(j&2Q*wY*~rM z(Sx84_1mp>z+;nX0J}b2>cv%O?Yv>Fp?B(tnm<21B3|ZLt?Iy2cC+TpOA02?+Ik+c zp(^re9M1P++t-Lo*_GcDJvLjfd|AEJ7ShdhWY%v9QfXa^O&z?qENk-GILhZDcN7Rv zpZCgsbIdLc;}YzDI#wXNG>6P0JI?LcsP6q_PBh1Ur#V4K4pisAh4f#otCZ|=6?U=n z_h}m6A^2Pwva<0my=Ef^{PCUQxZRtjXQM;5gSF$B{NQK z^k%KKWg|Z7#sSfqv8`+(5C446lm$+5AiK2I8;bqpVeEB_Yl?dKIXb2+$10~Tjg`gN z1YTjTy!63Q(XJ-8Im+=Fx)usM4ob>;H zBf#OwkLF;jEFVkhca!0JJi*vMJH1D=N5@rpg=sMI{ioQw-$bX8441My3M1Zs-y@aBOVgrhql$6XF7?^nQ-i4fN>P_6 z;O3mCt;usXi~LzE0GDZ3IMLIulYZsZ5sMMlwc^YJ+r%#H&Q-KyzL9woul>ruQdC!q zAHJecTPmz#63dPS!sCK~kJ|1iOoV(xYA+MyjrkI8}89nm#LM*#sOkyI=HXL@g9y z()s-DoE~uy3xEE+;ZmCFOK#{Jj}KggReeqT>9Xzw0bm4S($-+pt3Klc{W*j2l%EVB zjJ|vv-laxd&%#D2jkqOUYBL$1-~421Jo5gGczrC-lL0H0m0S1`%RwAL*SQM*sY&@rl{)dpC${Ns+w^ zsc168jue1d?2hVw`CC{5IhKInhQFQFEly@(qKR4)?VtZUBL0X`JJ@-9+z~h-c4-tN zi5$F!V2Hp$mU1zvUfjPgyGOpWSF_|~uE%1c@T8ZNA`Hb^C_nJQ3{qDSsYc&T^%fZ> zaWskeZuh!zRIkR-gI!fJ+GfvD`qx%JdR1NzdDY^t?Cv?9#e8P)*CV#|5{sKTANIA6 zW?*1n$L?pGoxL&C9M&$Kzm=6C|M_YQjT4Q%2j83!_kS`sMT4iX^n$jQw`KQEHRA_+ zb2b{OK&xQT$~Rc)8H#!zgAwJKcPGcKq`RZkkpfpp&0fb zL0>IRpZ>`8yK~yaImdS2 zu!}qWvd|Zez5c^y#v|-#`_CZQ=JyqpIIPBTO4r(P250B?L~bcd!KT_tDyo`{UOET<7k9w1E?OMy?>Mo2oN++AO*$j=nVIzGHwR8* zm*+H$qa5*}r|E$>5%I>vO-Hcsu3aS_B^}qRugxGmM3uPln6_~qN^NGeR+$H}YvgIt zLEru1oLnDD58*lDi+l=p_FRMUZ2z5`q*PF;+NfbH-+1Yz>T>)34c& zEsKblIGvfMGN`DeZ5w^t zAyES(#+EKEmPe7wZSVUAlMiox8Z(!XX8YHtbWe*<$+{^xlz0FATNIu-MwQ6F1ebA3 zKG&$kLg{FXG5fKzvNMK*M(kj#i}5L&ukt^(rJwZ*op&~J(gK{alj8pV=mR*Wl3Z3h z(;<2h7#`VuJ&oPEBJf&59PmWK{ht6+H z1<4KLT+zdS_%>~!aZ)xux@tepT_YWGL0!d2#=loSnI8Yd$vKV;FB|3vcK!!v_uYJ` zQnOcy6CWH-6wlHq-=uQfdTQ4=0bOOQ`#bfM(QOEU9y;pb=0V5sUB z7-w^IN-qLiYT>L>+pGC?DUhK*0h&iXNM9Stcxh8L?l`Ukj-OU3h+`Qt{X00Y-g_TC zgm<2>U$eORv~J8tv}eI39by^*7%$-*x&_D140e>Jw#d2xVhT?|oZqWK9Nn{F+96kw z&t%sO^wslk>=&O*LCz2<@a*k-N6(Jz=;eJ`IW+Ph^s^HJmT%dSNjnMO~T8_x`y759Ef z|H8!N~0v>`GM1Sm}y|F9qd1*l$ui^a*XHXKkn*rA9t9 z#W-=%t_|Wq=GSK0*~zc-pQ14Nd%U2xKESeJV z@Vlo+#XNR|Xuccp=Y7~sQ#*B^;RMj#hB4~#{~;@A^BYcWlTuS>{Pa$ZmG>~ZUWcq1 zBRR|bm>Q5du6Ng3aSgipFvk657@;{lJKF44FaCN`r`U^enJ=%E2K9B;4gbW!`SFMa zIXz5u5_^@G9}eHCcAU0bB!} z_^+g&C?G{nO3l-mOnv0lG4ZQsCnC#N$7y{U#Sf0?5Z%aVv9&U~;Ek#OjiUeEg`xCc zFHTGI&JEvd8|R<2Gtb;~|I=sHZE z&x)wps!II%_>OVP9xXOvs zBqHQbmvoL}ajeziGnQ#CQ_*e}Sw(zZ<~(pxwPV zGCsd}4&(b0+VQBJ8%H++_?1yXmkj8AnQQ;}_)r|Mv=P}SUc748=)Dt;a@jZvF1VL{Ur2okQ|8(Cm@$*|oaK2pW zxa`=bap~#1Y&I}DtH+kUt8J%})#v&C^no{ML;7WsspuO&>eDQ)Iu+dzCJM~l<9Bb- z#*DXFpGDt0_D|V1GNyV*vRUDPe}e1;zxxO4GJyx)s@WBJ0Hyn3Ht$OfCA8#-ZLZWyYe|e6n(pWpNr`Xr1Ot%>V@+%=BhyLAdaOZqwYD6`H7=+h@$`Yvm|3b9|isst|Y zk@Ug*_Dv7m#20k|^`-d)F1~@y>(+Os#_(}Vr~`jdU3BF-eVl-e?*vlR@7^UBh@bsg zdZ+k5_1@&T{%vHc^qg!?lWb#i!_^10h)x82p86}+Dnt>s#(DSOUvV4-_LuC+>@_cQ zyqWaYQCi*guQ^L>srxsG7je*Ng@WJ|dH^!B7z?y$)`nyTxBkLh zJh?#DT>U<>MzS`OHR8+sC0TPZI-fSgbkCDDd9Nwbj|!$Afy3-jcENYknvqKx4PLrp z@2E|CXX}*050eaO*s} zk-R;0X5396$A@HLNy@A4r2m}IwN9M6SBn%ZdgNtqv)(V4)+uBDatO99GP#IF5iZqX z?&6j4GCSdK?msi8$)>syPac8}d>Tiuo``L+7f!xPtmX4BJwvj&@4)Hthj*sMTr#}` z4%JjC*&?t9{qdmYu`kD)?0MxI^f3xY`@ZnUeNu)BjoXT3;8EcAFaM1mhu(hfaV_Ek zg1y=??`Hb1ywPWyh6~qEnZ;@xn#D(i*fd%lxwHXQ7c!qbw*-vv#=Y zO=PX+nu5i_HDn|>uTQJw%zt^v?6`_-Q{yJmhUl+vT;Dsow{NhKj-fH2x%&^#jf%&# z7N}P~&LZ3FU%$8OhO+Cu(rXmB|I~mf@n^052;5BLO@Gvd?I0Rej?3x0hxKTb>_SQW z_WFvtmg|Nytq`SsK93l%Mp)5Hypsi7{yJ zhH+OZqq}3+*1~2Y(XYcviT#ocvT{=6Y`=`C=fit*UPd$0kg!P7`7V0q*Li7?{mBRv zPf14pt5K&~N~@MHRI~R>G0;w`Nz)e*b;)9ms{)Enh7B?d%E{N4Dr1+GIDx{~<8Jtp>vr7h< z@hC}p_IjdMDv)-kS)-bqd6zTT=sw-8U2H=*N2oLlEA8N{*PsT*3C`i5TJbL?TK-OZCPuT%S5OrtaEBE`zGdqDuFXjF?`O`P+VSMS`N zTmMyceGG-<@t4P@9gD+>{(I`jy_5AiN{A86)Yf=S&%$d6cCM#0}y81(PB3k7@ zszqIN-d-gZaGSdHZY|uU{7;{`C{|!dP=uzUv}s>YYXTorb3TdKw=(^L`r7UrL+n9BM_ttIXO_s&Xnl zp4wkKqzfC()qJ1Qc2gO@bJ?k_t3JEYTCjtRZo1h^f6{KdNxWBSZM9>1k&L8VN`bHQ z8ynD9w6jfeD?9Hi-H`W1<(Ys%ViE15c9HDq)UH9=8K$~rS6Xmlh|zHsS~!*=h^1lu z>S;V=%4BwL_B|~y>BG}!E{@sMZ5GB3-K$;RH5qGdWuynm3WgPV5l*GGoS>8)MT&FBa9kYSQGU`gXQD@W>w{BA5Ms1{KUrDeY%gKQq0Z8(Nxzgcr^+TA6Dr#Rg0#ky+Ft!jW2|!rBF1@!-ZdSE z*DU&~j9`j#m$Re>#$YX4vP)&0Ls=$GnV(Yf>u)k*bnVzE%|*IT@?K7O$*H->&G{Ji z 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 diff --git a/oas_docs/overlays/connectors.overlays.yaml b/oas_docs/overlays/connectors.overlays.yaml index 7cb2f79be3a1e..6168237425cc1 100644 --- a/oas_docs/overlays/connectors.overlays.yaml +++ b/oas_docs/overlays/connectors.overlays.yaml @@ -142,7 +142,8 @@ actions: oneOf: # Bedrock (.bedrock) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_config.yaml' - # Crowdstrike (.crowdstrike) TBD + # Crowdstrike (.crowdstrike) + - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_config.yaml' # D3 Security (.d3security) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/d3security_config.yaml' # Email (.email) @@ -193,7 +194,8 @@ actions: oneOf: # Bedrock (.bedrock) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_secrets.yaml' - # Crowdstrike (.crowdstrike) TBD + # Crowdstrike (.crowdstrike) + - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_secrets.yaml' # D3 Security (.d3security) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/d3security_secrets.yaml' # Email (.email) @@ -249,7 +251,8 @@ actions: oneOf: # Bedrock (.bedrock) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_config.yaml' - # Crowdstrike (.crowdstrike) TBD + # Crowdstrike (.crowdstrike) + - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_config.yaml' # D3 Security (.d3security) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/d3security_config.yaml' # Email (.email) @@ -300,7 +303,8 @@ actions: oneOf: # Bedrock (.bedrock) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_secrets.yaml' - # Crowdstrike (.crowdstrike) TBD + # Crowdstrike (.crowdstrike) + - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_secrets.yaml' # D3 Security (.d3security) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/d3security_secrets.yaml' # Email (.email) diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_config.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_config.yaml new file mode 100644 index 0000000000000..654baa9f71e95 --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_config.yaml @@ -0,0 +1,11 @@ +title: Connector request config properties for a Crowdstrike connector +required: + - url +description: Defines config properties for connectors when type is `.crowdstrike`. +type: object +properties: + url: + description: > + The CrowdStrike tenant URL. + If you are using the `xpack.actions.allowedHosts` setting, add the hostname to the allowed hosts. + type: string \ No newline at end of file diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_secrets.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_secrets.yaml new file mode 100644 index 0000000000000..71bb7478b7747 --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/crowdstrike_secrets.yaml @@ -0,0 +1,13 @@ +title: Connector secrets properties for a Crowdstrike connector +description: Defines secrets for connectors when type is `.crowdstrike`. +type: object +required: + - clientId + - clientSecret +properties: + clientId: + description: The CrowdStrike API client identifier. + type: string + clientSecret: + description: The CrowdStrike API client secret to authenticate the `clientId`. + type: string \ No newline at end of file diff --git a/x-pack/plugins/stack_connectors/public/connector_types/crowdstrike/translations.ts b/x-pack/plugins/stack_connectors/public/connector_types/crowdstrike/translations.ts index e10226f532914..1fb91cecfe992 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/crowdstrike/translations.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/crowdstrike/translations.ts @@ -19,14 +19,14 @@ export const URL_LABEL = i18n.translate( export const CLIENT_ID_LABEL = i18n.translate( 'xpack.stackConnectors.security.crowdstrike.config.clientIdTextFieldLabel', { - defaultMessage: 'Crowdstrike Client ID', + defaultMessage: 'Crowdstrike client ID', } ); export const CLIENT_SECRET_LABEL = i18n.translate( 'xpack.stackConnectors.security.crowdstrike.config.clientSecretTextFieldLabel', { - defaultMessage: 'Client Secret', + defaultMessage: 'Client secret', } ); diff --git a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/crowdstrike_connector.ts b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/crowdstrike_connector.ts index 9a419f949b529..0447b15762262 100644 --- a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/crowdstrike_connector.ts +++ b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/crowdstrike_connector.ts @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const actions = getService('actions'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const toasts = getService('toasts'); + // const toasts = getService('toasts'); let simulatorUrl: string; let editSimulatorUrl: string; @@ -44,9 +44,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.setValue('secrets.clientId-input', 'test'); await testSubjects.setValue('secrets.clientSecret-input', 'secret'); await commonScreenshots.takeScreenshot('crowdstrike-connector', screenshotDirectories); - await testSubjects.click('create-connector-flyout-save-test-btn'); - await toasts.dismissAll(); - await commonScreenshots.takeScreenshot('crowdstrike-params-test', screenshotDirectories); + // You cannot test the CrowdStrike connector + // await testSubjects.click('create-connector-flyout-save-test-btn'); + // await toasts.dismissAll(); + // await commonScreenshots.takeScreenshot('crowdstrike-params-test', screenshotDirectories); await testSubjects.click('euiFlyoutCloseButton'); }); }); From f55829155488255476b15b770a338f7be3889802 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 11 Sep 2024 16:29:48 -0700 Subject: [PATCH 41/52] Update oas_docs ownership (#192647) --- .github/CODEOWNERS | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index aaea3b56aa038..2dec31b8135eb 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1788,15 +1788,9 @@ test/functional/page_objects/solution_navigation.ts @elastic/appex-sharedux /x-pack/test_serverless/functional/page_objects/svl_common_navigation.ts @elastic/appex-sharedux # OpenAPI spec files -/x-pack/plugins/fleet/common/openapi @elastic/platform-docs -/x-pack/plugins/ml/common/openapi @elastic/platform-docs -/packages/core/saved-objects/docs/openapi @elastic/platform-docs -/plugins/data_views/docs/openapi @elastic/platform-docs oas_docs/.spectral.yaml @elastic/platform-docs oas_docs/kibana.info.serverless.yaml @elastic/platform-docs oas_docs/kibana.info.yaml @elastic/platform-docs -oas_docs/makefile @elastic/platform-docs -oas_docs/overlays @elastic/platform-docs # Plugin manifests /src/plugins/**/kibana.jsonc @elastic/kibana-core From 94411c550995fe727220d64e420b738d8be1d905 Mon Sep 17 00:00:00 2001 From: Brad White Date: Wed, 11 Sep 2024 17:35:32 -0600 Subject: [PATCH 42/52] [Storybook] Mute SASS mixed-decls warnings (#192648) ## Summary This extends #190348 to the Storybook build because it is quite noisy there as well. Example: https://buildkite.com/elastic/kibana-pull-request/builds/233585#0191e2ad-bc90-45f1-b375-959f3fc22b98/268-294 Remediation will be tracked at https://github.com/elastic/kibana/issues/190345 ### Testing The Storybook build step should not have SASS deprecation warnings. --- packages/kbn-storybook/src/webpack.config.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/kbn-storybook/src/webpack.config.ts b/packages/kbn-storybook/src/webpack.config.ts index fb901692e7f66..94302fdc19c41 100644 --- a/packages/kbn-storybook/src/webpack.config.ts +++ b/packages/kbn-storybook/src/webpack.config.ts @@ -120,6 +120,18 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { sassOptions: { includePaths: [resolve(REPO_ROOT, 'node_modules')], quietDeps: true, + logger: { + warn: (message: string, warning: any) => { + // Muted - see https://github.com/elastic/kibana/issues/190345 for tracking remediation + if (warning?.deprecationType?.id === 'mixed-decls') return; + + if (warning.deprecation) + return process.stderr.write( + `DEPRECATION WARNING: ${message}\n${warning.stack}` + ); + process.stderr.write('WARNING: ' + message); + }, + }, }, }, }, From b0683988e4128bfeeab83a03b6b88710fdd31772 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 11 Sep 2024 16:39:55 -0700 Subject: [PATCH 43/52] [DOCS][API] Add TheHive connector config and secrets (#192424) --- docs/action-type-template.asciidoc | 8 +++- oas_docs/overlays/connectors.overlays.yaml | 10 +++- .../schemas/bedrock_create_request.yaml | 23 --------- .../components/schemas/bedrock_response.yaml | 31 ------------ .../schemas/bedrock_update_request.yaml | 13 ----- .../components/schemas/run_createalert.yaml | 47 ++++++++++++++----- .../components/schemas/run_pushtoservice.yaml | 25 ++++++---- .../components/schemas/thehive_config.yaml | 16 +++++++ .../components/schemas/thehive_secrets.yaml | 9 ++++ 9 files changed, 92 insertions(+), 90 deletions(-) delete mode 100644 x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_create_request.yaml delete mode 100644 x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_response.yaml delete mode 100644 x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_update_request.yaml create mode 100644 x-pack/plugins/actions/docs/openapi/components/schemas/thehive_config.yaml create mode 100644 x-pack/plugins/actions/docs/openapi/components/schemas/thehive_secrets.yaml diff --git a/docs/action-type-template.asciidoc b/docs/action-type-template.asciidoc index b9d7ca3c6326c..ad59f2a2d9ed6 100644 --- a/docs/action-type-template.asciidoc +++ b/docs/action-type-template.asciidoc @@ -22,7 +22,9 @@ or as needed when you're creating a rule. connectors have the following configuration properties: //// -List of user-facing connector configurations. This should align with the fields available in the Create connector flyout form for this connector type. +List of user-facing connector configurations. +This should align with the fields available in the Create connector flyout form for this connector type. +To include these configuration details in the API documentation, add appropriate files in x-pack/plugins/actions/docs/openapi/components/schemas/ and reference them from oas_docs/overlays/connectors.overlays.yaml //// Property1:: A short description of this property. @@ -41,7 +43,9 @@ You can test connectors as you're creating or editing the connector in {kib}. actions have the following properties. //// -List of user-facing action configurations. This should align with the fields available in the Action section of the Create/Update alert flyout. +List of user-facing action configurations. +This should align with the fields available in the Action section of the Create/Update alert flyout. +To include these configuration details in the API documentation, add appropriate files in x-pack/plugins/actions/docs/openapi/components/schemas/ and reference them from oas_docs/overlays/connectors.overlays.yaml //// Property1:: A short description of this property. diff --git a/oas_docs/overlays/connectors.overlays.yaml b/oas_docs/overlays/connectors.overlays.yaml index 6168237425cc1..022946e893be2 100644 --- a/oas_docs/overlays/connectors.overlays.yaml +++ b/oas_docs/overlays/connectors.overlays.yaml @@ -160,7 +160,7 @@ actions: # Observability AI Assistant (.observability-ai-assistant) TBD # Azure OpenAI (.gen-ai) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/genai_azure_config.yaml' - # OpenAI (.gen-ai) + # OpenAI (.gen-ai) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/genai_openai_config.yaml' # Opsgenie (.opsgenie) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/opsgenie_config.yaml' @@ -178,6 +178,8 @@ actions: - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/slack_api_config.yaml' # Swimlane (.swimlane) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/swimlane_config.yaml' + # TheHive (.thehive) + - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/thehive_config.yaml' # Tines (.tines) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/tines_config.yaml' # Torq (.torq) @@ -226,6 +228,8 @@ actions: - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/slack_api_secrets.yaml' # Swimlane (.swimlane) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/swimlane_secrets.yaml' + # TheHive (.thehive) + - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/thehive_secrets.yaml' # Tines (.tines) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/tines_secrets.yaml' # Torq (.torq) @@ -287,6 +291,8 @@ actions: - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/slack_api_config.yaml' # Swimlane (.swimlane) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/swimlane_config.yaml' + # TheHive (.thehive) + - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/thehive_config.yaml' # Tines (.tines) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/tines_config.yaml' # Torq (.torq) @@ -335,6 +341,8 @@ actions: - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/slack_api_secrets.yaml' # Swimlane (.swimlane) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/swimlane_secrets.yaml' + # TheHive (.thehive) + - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/thehive_secrets.yaml' # Tines (.tines) - $ref: '../../x-pack/plugins/actions/docs/openapi/components/schemas/tines_secrets.yaml' # Torq (.torq) diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_create_request.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_create_request.yaml deleted file mode 100644 index 2acc21bfbfac7..0000000000000 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_create_request.yaml +++ /dev/null @@ -1,23 +0,0 @@ -title: Create Amazon Bedrock connector request -description: The Amazon Bedrock connector uses axios to send a POST request to Amazon Bedrock. -type: object -required: - - config - - connector_type_id - - name - - secrets -properties: - config: - $ref: 'config_properties_bedrock.yaml' - connector_type_id: - type: string - description: The type of connector. - enum: - - .bedrock - example: .bedrock - name: - type: string - description: The display name for the connector. - example: my-connector - secrets: - $ref: 'secrets_properties_bedrock.yaml' diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_response.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_response.yaml deleted file mode 100644 index 0d3f308744aa3..0000000000000 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_response.yaml +++ /dev/null @@ -1,31 +0,0 @@ -title: Connector response properties for an Amazon Bedrock connector -type: object -required: - - config - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name -properties: - config: - $ref: 'config_properties_bedrock.yaml' - connector_type_id: - type: string - description: The type of connector. - enum: - - .bedrock - id: - type: string - description: The identifier for the connector. - is_deprecated: - $ref: 'is_deprecated.yaml' - is_missing_secrets: - $ref: 'is_missing_secrets.yaml' - is_preconfigured: - $ref: 'is_preconfigured.yaml' - is_system_action: - $ref: 'is_system_action.yaml' - name: - type: string - description: The display name for the connector. diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_update_request.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_update_request.yaml deleted file mode 100644 index dfa479870aab5..0000000000000 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/bedrock_update_request.yaml +++ /dev/null @@ -1,13 +0,0 @@ -title: Update Amazon Bedrock connector request -type: object -required: - - config - - name -properties: - config: - $ref: 'config_properties_bedrock.yaml' - name: - type: string - description: The display name for the connector. - secrets: - $ref: 'secrets_properties_bedrock.yaml' diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/run_createalert.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/run_createalert.yaml index e739a9ed6c91d..194d9d979cdd8 100644 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/run_createalert.yaml +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/run_createalert.yaml @@ -3,7 +3,7 @@ type: object required: - subAction - subActionParams -description: The `createAlert` subaction for Opsgenie connectors. +description: The `createAlert` subaction for Opsgenie and TheHive connectors. properties: subAction: type: string @@ -12,12 +12,10 @@ properties: - createAlert subActionParams: type: object - required: - - message properties: actions: type: array - description: The custom actions available to the alert. + description: The custom actions available to the alert in Opsgenie connectors. items: type: string alias: @@ -28,21 +26,21 @@ properties: description: A description that provides detailed information about the alert. details: type: object - description: The custom properties of the alert. + description: The custom properties of the alert in Opsgenie connectors. additionalProperties: true example: {"key1":"value1","key2":"value2"} entity: type: string - description: The domain of the alert. For example, the application or server name. + description: The domain of the alert in Opsgenie connectors. For example, the application or server name. message: type: string - description: The alert message. + description: The alert message in Opsgenie connectors. note: type: string - description: Additional information for the alert. + description: Additional information for the alert in Opsgenie connectors. priority: type: string - description: The priority level for the alert. + description: The priority level for the alert in Opsgenie connectors. enum: - P1 - P2 @@ -52,7 +50,7 @@ properties: responders: type: array description: > - The entities to receive notifications about the alert. + The entities to receive notifications about the alert in Opsgenie connectors. If `type` is `user`, either `id` or `username` is required. If `type` is `team`, either `id` or `name` is required. items: @@ -75,14 +73,39 @@ properties: username: type: string description: A valid email address for the user. + severity: + type: integer + minimum: 1 + maximum: 4 + description: > + The severity of the incident for TheHive connectors. + The value ranges from 1 (low) to 4 (critical) with a default value of 2 (medium). source: type: string - description: The display name for the source of the alert. + description: The display name for the source of the alert in Opsgenie and TheHive connectors. + sourceRef: + type: string + description: A source reference for the alert in TheHive connectors. tags: type: array - description: The tags for the alert. + description: The tags for the alert in Opsgenie and TheHive connectors. items: type: string + title: + type: string + description: > + A title for the incident for TheHive connectors. + It is used for searching the contents of the knowledge base. + tlp: + type: integer + minimum: 0 + maximum: 4 + default: 2 + description: > + The traffic light protocol designation for the incident in TheHive connectors. Valid values include: 0 (clear), 1 (green), 2 (amber), 3 (amber and strict), and 4 (red). + type: + type: string + description: The type of alert in TheHive connectors. user: type: string description: The display name for the owner. diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/run_pushtoservice.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/run_pushtoservice.yaml index d81c0e61059be..210bf1dcf8570 100644 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/run_pushtoservice.yaml +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/run_pushtoservice.yaml @@ -3,7 +3,7 @@ type: object required: - subAction - subActionParams -description: The `pushToService` subaction for Jira, ServiceNow ITSM, ServiceNow SecOps, Swimlane, and Webhook - Case Management connectors. +description: The `pushToService` subaction for Jira, ServiceNow ITSM, ServiceNow SecOps, Swimlane, TheHive, and Webhook - Case Management connectors. properties: subAction: type: string @@ -16,7 +16,7 @@ properties: properties: comments: type: array - description: Additional information that is sent to Jira, ServiceNow ITSM, ServiceNow SecOps, or Swimlane. + description: Additional information that is sent to Jira, ServiceNow ITSM, ServiceNow SecOps, Swimlane, or TheHive. items: type: object properties: @@ -28,7 +28,7 @@ properties: description: A unique identifier for the comment. incident: type: object - description: Information necessary to create or update a Jira, ServiceNow ITSM, ServiveNow SecOps, or Swimlane incident. + description: Information necessary to create or update a Jira, ServiceNow ITSM, ServiveNow SecOps, Swimlane, or TheHive incident. properties: alertId: type: string @@ -52,7 +52,7 @@ properties: NOTE: Using the default configuration of `{{ruleID}}:{{alert ID}}` ensures that ServiceNow creates a separate incident record for every generated alert that uses a unique alert ID. If the rule generates multiple alerts that use the same alert IDs, ServiceNow creates and continually updates a single incident record for the alert. description: type: string - description: The description of the incident for Jira, ServiceNow ITSM, ServiceNow SecOps, Swimlane, and Webhook - Case Management connectors. + description: The description of the incident for Jira, ServiceNow ITSM, ServiceNow SecOps, Swimlane, TheHive, and Webhook - Case Management connectors. dest_ip: description: > A list of destination IP addresses related to the security incident for ServiceNow SecOps connectors. The IPs are added as observables to the security incident. @@ -113,8 +113,10 @@ properties: type: string description: The rule name for Swimlane connectors. severity: - type: string - description: The severity of the incident for ServiceNow ITSM and Swimlane connectors. + type: integer + description: > + The severity of the incident for ServiceNow ITSM, Swimlane, and TheHive connectors. + In TheHive connectors, the severity value ranges from 1 (low) to 4 (critical) with a default value of 2 (medium). short_description: type: string description: > @@ -139,12 +141,19 @@ properties: type: array items: type: string - description: A list of tags for Webhook - Case Management connectors. + description: A list of tags for TheHive and Webhook - Case Management connectors. title: type: string description: > - A title for the incident for Jira and Webhook - Case Management connectors. + A title for the incident for Jira, TheHive, and Webhook - Case Management connectors. It is used for searching the contents of the knowledge base. + tlp: + type: integer + minimum: 0 + maximum: 4 + default: 2 + description: > + The traffic light protocol designation for the incident in TheHive connectors. Valid values include: 0 (clear), 1 (green), 2 (amber), 3 (amber and strict), and 4 (red). urgency: type: string description: The urgency of the incident for ServiceNow ITSM connectors. diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/thehive_config.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/thehive_config.yaml new file mode 100644 index 0000000000000..d317e3af92f2a --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/thehive_config.yaml @@ -0,0 +1,16 @@ +title: Connector request properties for a TheHive connector +description: Defines configuration properties for connectors when type is `.thehive`. +type: object +required: + - url +properties: + organisation: + type: string + description: > + The organisation in TheHive that will contain the alerts or cases. + By default, the connector uses the default organisation of the user account that created the API key. + url: + type: string + description: > + The instance URL in TheHive. + If you are using the `xpack.actions.allowedHosts` setting, add the hostname to the allowed hosts. \ No newline at end of file diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/thehive_secrets.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/thehive_secrets.yaml new file mode 100644 index 0000000000000..595af60710b12 --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/thehive_secrets.yaml @@ -0,0 +1,9 @@ +title: Connector secrets properties for a TheHive connector +description: Defines secrets for connectors when type is `.thehive`. +required: + - apiKey +type: object +properties: + apiKey: + type: string + description: The API key for authentication in TheHive. From 1e96c81e95364bd99f1721bb22460b751a462728 Mon Sep 17 00:00:00 2001 From: Kris Gross <57641133+k-g-elastic@users.noreply.github.com> Date: Wed, 11 Sep 2024 21:01:49 -0400 Subject: [PATCH 44/52] Make Quality Gate Pipelines Non-Preemptible (#190534) ## Summary [Issue Request](https://github.com/elastic/security-team/issues/9484) --------- Co-authored-by: Elastic Machine --- .../mki_periodic_defend_workflows.yml | 5 ++++ .../mki_periodic_detection_engine.yml | 8 ----- .../mki_periodic_entity_analytics.yml | 4 --- .../mki_periodic/mki_periodic_explore.yml | 4 --- .../mki_periodic/mki_periodic_gen_ai.yml | 4 --- .../mki_periodic_investigations.yml | 4 --- .../mki_periodic_rule_management.yml | 8 ----- .../mki_quality_gate_detection_engine.yml | 24 --------------- .../mki_quality_gate_entity_analytics.yml | 7 ----- .../mki_quality_gate_explore.yml | 9 ------ .../mki_quality_gate_gen_ai.yml | 7 ----- .../mki_quality_gate_investigations.yml | 7 ----- .../mki_quality_gate_rule_management.yml | 29 ------------------- 13 files changed, 5 insertions(+), 115 deletions(-) diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_defend_workflows.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_defend_workflows.yml index 72af06600ada7..5795c8f61f30f 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_defend_workflows.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_defend_workflows.yml @@ -13,6 +13,7 @@ steps: localSsds: 1 localSsdInterface: nvme machineType: n2-standard-4 + preemptible: true timeout_in_minutes: 300 parallelism: 5 retry: @@ -102,6 +103,7 @@ steps: localSsds: 1 localSsdInterface: nvme machineType: n2-standard-4 + preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -119,6 +121,7 @@ steps: localSsds: 1 localSsdInterface: nvme machineType: n2-standard-4 + preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -136,6 +139,7 @@ steps: localSsds: 1 localSsdInterface: nvme machineType: n2-standard-4 + preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -156,6 +160,7 @@ steps: localSsds: 1 localSsdInterface: nvme machineType: n2-standard-4 + preemptible: true timeout_in_minutes: 300 parallelism: 3 retry: diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_detection_engine.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_detection_engine.yml index da5aa911a6c29..e25c6dfef0e4b 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_detection_engine.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_detection_engine.yml @@ -16,10 +16,6 @@ steps: # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 8 - retry: - automatic: - - exit_status: "-1" - limit: 1 - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:detection_engine:exceptions label: "Cypress MKI - Detection Engine - Exceptions" @@ -35,10 +31,6 @@ steps: # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 6 - retry: - automatic: - - exit_status: "-1" - limit: 1 - group: "API MKI - Detection Engine - " key: api_test_detections_engine diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_entity_analytics.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_entity_analytics.yml index f993986aefbb1..2f3f1082476ef 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_entity_analytics.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_entity_analytics.yml @@ -13,10 +13,6 @@ steps: # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 2 - retry: - automatic: - - exit_status: '-1' - limit: 1 - group: "API MKI - Entity Analytics" key: api_test_entity_analytics diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_explore.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_explore.yml index 7697da4b3edaf..29e838e962a55 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_explore.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_explore.yml @@ -13,10 +13,6 @@ steps: # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 4 - retry: - automatic: - - exit_status: '-1' - limit: 1 - group: "API MKI - Explore" key: api_test_explore diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_gen_ai.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_gen_ai.yml index c9c80c823b227..901425ec57ff4 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_gen_ai.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_gen_ai.yml @@ -13,10 +13,6 @@ steps: # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: "-1" - limit: 1 - group: "API MKI - GenAI" key: api_test_ai_assistant diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_investigations.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_investigations.yml index 0988bf6ecf6b8..9539643ad12c3 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_investigations.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_investigations.yml @@ -13,10 +13,6 @@ steps: # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 8 - retry: - automatic: - - exit_status: '-1' - limit: 1 - group: "API MKI - Investigations" key: api_test_investigations diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_rule_management.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_rule_management.yml index 7f08247a91b86..05613941d7b5e 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_rule_management.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_rule_management.yml @@ -16,10 +16,6 @@ steps: # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 8 - retry: - automatic: - - exit_status: "-1" - limit: 1 - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:rule_management:prebuilt_rules label: "Cypress MKI - Rule Management - Prebuilt Rules" @@ -35,10 +31,6 @@ steps: # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 4 - retry: - automatic: - - exit_status: "-1" - limit: 1 - group: "API MKI - Rule Management" key: api_test_rule_management diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_detection_engine.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_detection_engine.yml index f73ecc6225dcf..90c90ae8a3a36 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_detection_engine.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_detection_engine.yml @@ -12,14 +12,9 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: "-1" - limit: 1 - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:detection_engine:exceptions label: "Cypress MKI - Detection Engine - Exceptions" @@ -31,14 +26,9 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: "-1" - limit: 1 - group: "API MKI - Detection Engine" key: api_test_detections_engine @@ -51,7 +41,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -66,7 +55,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -81,7 +69,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -96,7 +83,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -111,7 +97,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -126,7 +111,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -141,7 +125,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -156,7 +139,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -171,7 +153,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -186,7 +167,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -201,7 +181,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -216,7 +195,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -231,7 +209,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -246,7 +223,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_entity_analytics.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_entity_analytics.yml index 16f2ec688bde4..da32bc4efc44f 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_entity_analytics.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_entity_analytics.yml @@ -9,14 +9,9 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: '-1' - limit: 1 - group: "API MKI - Entity Analytics" key: api_test_entity_analytics @@ -29,7 +24,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -44,7 +38,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_explore.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_explore.yml index 2c518fa24efab..efcc5ccf113f5 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_explore.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_explore.yml @@ -9,14 +9,9 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: '-1' - limit: 1 - group: "API MKI - Explore" key: api_test_explore @@ -29,7 +24,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -44,7 +38,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -59,7 +52,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -74,7 +66,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_gen_ai.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_gen_ai.yml index 677a5c62f4cc0..660d36183fe2f 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_gen_ai.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_gen_ai.yml @@ -9,14 +9,9 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: "-1" - limit: 1 - group: "API MKI - GenAI" key: api_test_ai_assistant @@ -29,7 +24,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -44,7 +38,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_investigations.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_investigations.yml index d3f57e40ec2cb..7f262340cfa5e 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_investigations.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_investigations.yml @@ -9,14 +9,9 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: '-1' - limit: 1 - group: "API MKI - Investigations" key: api_test_investigations @@ -29,7 +24,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -44,7 +38,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_rule_management.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_rule_management.yml index affdaca9cb539..b01094d742226 100644 --- a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_rule_management.yml +++ b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_rule_management.yml @@ -12,14 +12,9 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: "-1" - limit: 1 - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:rule_management:prebuilt_rules label: "Cypress MKI - Rule Management - Prebuilt Rules" @@ -31,14 +26,9 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. timeout_in_minutes: 300 parallelism: 1 - retry: - automatic: - - exit_status: "-1" - limit: 1 - group: "API MKI - Rule Management" key: api_test_rule_management @@ -51,7 +41,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -66,7 +55,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -81,7 +69,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -96,7 +83,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -111,7 +97,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -126,7 +111,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -141,7 +125,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -156,7 +139,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -171,7 +153,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -186,7 +167,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -201,7 +181,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -216,7 +195,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -231,7 +209,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -246,7 +223,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -261,7 +237,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -276,7 +251,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -291,7 +265,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -306,7 +279,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: @@ -321,7 +293,6 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: n2-standard-4 - preemptible: true timeout_in_minutes: 120 retry: automatic: From 771faf19c9f8dff63f19aa0967a8c50b8a028eaa Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Wed, 11 Sep 2024 21:46:48 -0400 Subject: [PATCH 45/52] [Synthetics] Unskip `TestMonitorDetailFlyout` (#192592) ## Summary Unskips this e2e suite. --- .../e2e/synthetics/journeys/detail_flyout.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/detail_flyout.ts b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/detail_flyout.ts index e51dd40bd840b..5159792f9217a 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/detail_flyout.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/detail_flyout.ts @@ -8,14 +8,10 @@ import { expect, journey, step } from '@elastic/synthetics'; import { syntheticsAppPageProvider } from '../page_objects/synthetics_app'; -const journeySkip = - (...params: Parameters) => - () => - journey(...params); -// TODO: skipped because failing on main and need to unblock CI -journeySkip('TestMonitorDetailFlyout', async ({ page, params }) => { +journey('TestMonitorDetailFlyout', async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl, params }); const monitorName = 'test-flyout-http-monitor'; + const locationId = 'us_central'; step('Go to monitor-management', async () => { await syntheticsApp.navigateToAddMonitor(); @@ -40,7 +36,7 @@ journeySkip('TestMonitorDetailFlyout', async ({ page, params }) => { step('open overview flyout', async () => { await syntheticsApp.navigateToOverview(); await syntheticsApp.assertText({ text: monitorName }); - await page.click(`[data-test-subj="${monitorName}-metric-item"]`); + await page.click(`[data-test-subj="${monitorName}-${locationId}-metric-item"]`); const flyoutHeader = await page.waitForSelector('.euiFlyoutHeader'); expect(await flyoutHeader.innerText()).toContain(monitorName); }); From 9373d388aeff70817a5d72e6db50c17436259179 Mon Sep 17 00:00:00 2001 From: Bharat Pasupula <123897612+bhapas@users.noreply.github.com> Date: Thu, 12 Sep 2024 05:31:19 +0200 Subject: [PATCH 46/52] [Automatic Import] Add validation and error graphs for structured logs header(KVGraph) (#192578) --- .../__jest__/fixtures/kv.ts | 1 + .../scripts/draw_graphs_script.ts | 3 ++ .../server/graphs/kv/constants.ts | 5 +++ .../server/graphs/kv/error.ts | 24 ++++++++++- .../server/graphs/kv/graph.ts | 26 ++++++++++-- .../server/graphs/kv/header.test.ts | 4 +- .../server/graphs/kv/header.ts | 25 +---------- .../server/graphs/kv/kv.ts | 2 +- .../server/graphs/kv/prompts.ts | 41 +++++++++++++++++++ .../server/graphs/kv/validate.ts | 37 ++++++++++++++++- .../graphs/log_type_detection/prompts.ts | 1 + .../integration_assistant/server/types.ts | 1 + .../server/util/processors.ts | 4 +- 13 files changed, 141 insertions(+), 33 deletions(-) diff --git a/x-pack/plugins/integration_assistant/__jest__/fixtures/kv.ts b/x-pack/plugins/integration_assistant/__jest__/fixtures/kv.ts index bd519410155fe..587d8987c0960 100644 --- a/x-pack/plugins/integration_assistant/__jest__/fixtures/kv.ts +++ b/x-pack/plugins/integration_assistant/__jest__/fixtures/kv.ts @@ -21,4 +21,5 @@ export const kvState = { ecsVersion: 'testVersion', errors: { test: 'testerror' }, additionalProcessors: [{ kv: { field: 'test', target_field: 'newtest' } }], + grokPattern: 'testPattern', }; diff --git a/x-pack/plugins/integration_assistant/scripts/draw_graphs_script.ts b/x-pack/plugins/integration_assistant/scripts/draw_graphs_script.ts index d7ac7478dcc66..12a37f71b184a 100644 --- a/x-pack/plugins/integration_assistant/scripts/draw_graphs_script.ts +++ b/x-pack/plugins/integration_assistant/scripts/draw_graphs_script.ts @@ -19,6 +19,7 @@ import { getCategorizationGraph } from '../server/graphs/categorization/graph'; import { getEcsGraph, getEcsSubGraph } from '../server/graphs/ecs/graph'; import { getLogFormatDetectionGraph } from '../server/graphs/log_type_detection/graph'; import { getRelatedGraph } from '../server/graphs/related/graph'; +import { getKVGraph } from '../server/graphs/kv/graph'; // Some mock elements just to get the graph to compile const model = new FakeLLM({ @@ -50,9 +51,11 @@ export async function drawGraphs() { const categorizationGraph = (await getCategorizationGraph({ client, model })).getGraph(); const ecsSubGraph = (await getEcsSubGraph({ model })).getGraph(); const ecsGraph = (await getEcsGraph({ model })).getGraph(); + const kvGraph = (await getKVGraph({ client, model })).getGraph(); drawGraph(relatedGraph, 'related_graph'); drawGraph(logFormatDetectionGraph, 'log_detection_graph'); drawGraph(categorizationGraph, 'categorization_graph'); drawGraph(ecsSubGraph, 'ecs_subgraph'); drawGraph(ecsGraph, 'ecs_graph'); + drawGraph(kvGraph, 'kv_graph'); } diff --git a/x-pack/plugins/integration_assistant/server/graphs/kv/constants.ts b/x-pack/plugins/integration_assistant/server/graphs/kv/constants.ts index 6ddb6974a5b9e..92cc55841bb98 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/kv/constants.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/kv/constants.ts @@ -20,6 +20,11 @@ export const KV_HEADER_EXAMPLE_ANSWER = { grok_pattern: '%{WORD:key1}:%{WORD:value1};%{WORD:key2}:%{WORD:value2}:%{GREEDYDATA:message}', }; +export const KV_HEADER_ERROR_EXAMPLE_ANSWER = { + grok_pattern: + '%{TIMESTAMP:timestamp}:%{WORD:value1};%{WORD:key2}:%{WORD:value2}:%{GREEDYDATA:message}', +}; + export const onFailure = { append: { field: 'error.message', diff --git a/x-pack/plugins/integration_assistant/server/graphs/kv/error.ts b/x-pack/plugins/integration_assistant/server/graphs/kv/error.ts index 303c60d21be79..b6d64ee4f615d 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/kv/error.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/kv/error.ts @@ -8,8 +8,8 @@ import { JsonOutputParser } from '@langchain/core/output_parsers'; import type { KVState } from '../../types'; import type { HandleKVNodeParams } from './types'; -import { KV_ERROR_PROMPT } from './prompts'; -import { COMMON_ERRORS, KV_EXAMPLE_ANSWER } from './constants'; +import { KV_ERROR_PROMPT, KV_HEADER_ERROR_PROMPT } from './prompts'; +import { COMMON_ERRORS, KV_EXAMPLE_ANSWER, KV_HEADER_ERROR_EXAMPLE_ANSWER } from './constants'; import { createKVProcessor } from '../../util/processors'; import { KVProcessor } from '../../processor_types'; @@ -36,3 +36,23 @@ export async function handleKVError({ lastExecutedChain: 'kv_error', }; } + +export async function handleHeaderError({ + state, + model, +}: HandleKVNodeParams): Promise> { + const outputParser = new JsonOutputParser(); + const kvHeaderErrorGraph = KV_HEADER_ERROR_PROMPT.pipe(model).pipe(outputParser); + const currentPattern = state.grokPattern; + + const pattern = await kvHeaderErrorGraph.invoke({ + current_pattern: JSON.stringify(currentPattern, null, 2), + errors: JSON.stringify(state.errors, null, 2), + ex_answer: JSON.stringify(KV_HEADER_ERROR_EXAMPLE_ANSWER, null, 2), + }); + + return { + grokPattern: pattern.grok_pattern, + lastExecutedChain: 'kv_header_error', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/kv/graph.ts b/x-pack/plugins/integration_assistant/server/graphs/kv/graph.ts index 07f829c51f689..6f7b43ba40f22 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/kv/graph.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/kv/graph.ts @@ -12,8 +12,8 @@ import type { KVState } from '../../types'; import { handleKV } from './kv'; import type { KVGraphParams, KVBaseNodeParams } from './types'; import { handleHeader } from './header'; -import { handleKVError } from './error'; -import { handleKVValidate } from './validate'; +import { handleHeaderError, handleKVError } from './error'; +import { handleHeaderValidate, handleKVValidate } from './validate'; const graphState: StateGraphArgs['channels'] = { lastExecutedChain: { @@ -56,6 +56,10 @@ const graphState: StateGraphArgs['channels'] = { value: (x: ESProcessorItem, y?: ESProcessorItem) => y ?? x, default: () => ({ kv: {} }), }, + grokPattern: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, additionalProcessors: { value: (x: object[], y?: object[]) => y ?? x, default: () => [], @@ -95,6 +99,13 @@ function kvRouter({ state }: KVBaseNodeParams): string { return 'handleKVError'; } +function kvHeaderRouter({ state }: KVBaseNodeParams): string { + if (Object.keys(state.errors).length === 0) { + return 'handleKV'; + } + return 'handleHeaderError'; +} + export async function getKVGraph({ model, client }: KVGraphParams) { const workflow = new StateGraph({ channels: graphState, @@ -103,14 +114,23 @@ export async function getKVGraph({ model, client }: KVGraphParams) { .addNode('modelOutput', (state: KVState) => modelOutput({ state })) .addNode('handleHeader', (state: KVState) => handleHeader({ state, model, client })) .addNode('handleKVError', (state: KVState) => handleKVError({ state, model, client })) + .addNode('handleHeaderError', (state: KVState) => handleHeaderError({ state, model, client })) .addNode('handleKV', (state: KVState) => handleKV({ state, model, client })) .addNode('handleKVValidate', (state: KVState) => handleKVValidate({ state, model, client })) + .addNode('handleHeaderValidate', (state: KVState) => + handleHeaderValidate({ state, model, client }) + ) .addEdge(START, 'modelInput') .addConditionalEdges('modelInput', (state: KVState) => headerRouter({ state }), { header: 'handleHeader', noHeader: 'handleKV', }) - .addEdge('handleHeader', 'handleKV') + .addEdge('handleHeader', 'handleHeaderValidate') + .addConditionalEdges('handleHeaderValidate', (state: KVState) => kvHeaderRouter({ state }), { + handleHeaderError: 'handleHeaderError', + handleKV: 'handleKV', + }) + .addEdge('handleHeaderError', 'handleHeaderValidate') .addEdge('handleKVError', 'handleKVValidate') .addEdge('handleKV', 'handleKVValidate') .addConditionalEdges('handleKVValidate', (state: KVState) => kvRouter({ state }), { diff --git a/x-pack/plugins/integration_assistant/server/graphs/kv/header.test.ts b/x-pack/plugins/integration_assistant/server/graphs/kv/header.test.ts index 2c4300aefb15a..7991484024713 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/kv/header.test.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/kv/header.test.ts @@ -40,7 +40,9 @@ describe('Testing kv header', () => { } as unknown as IScopedClusterClient; it('handleHeader()', async () => { const response = await handleHeader({ state, model, client }); - expect(response.kvLogMessages).toStrictEqual(['dummy=data']); + expect(response.grokPattern).toStrictEqual( + '<%{NUMBER:priority}>%{NUMBER:version} %{GREEDYDATA:message}' + ); expect(response.lastExecutedChain).toBe('kv_header'); }); }); diff --git a/x-pack/plugins/integration_assistant/server/graphs/kv/header.ts b/x-pack/plugins/integration_assistant/server/graphs/kv/header.ts index 2ffba636639a2..473eae1516112 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/kv/header.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/kv/header.ts @@ -9,14 +9,7 @@ import { JsonOutputParser } from '@langchain/core/output_parsers'; import type { KVState } from '../../types'; import type { HandleKVNodeParams } from './types'; import { KV_HEADER_PROMPT } from './prompts'; -import { KV_HEADER_EXAMPLE_ANSWER, onFailure } from './constants'; -import { createGrokProcessor } from '../../util/processors'; -import { testPipeline } from '../../util'; - -interface GrokResult { - [key: string]: unknown; - message: string; -} +import { KV_HEADER_EXAMPLE_ANSWER } from './constants'; export async function handleHeader({ state, @@ -31,22 +24,8 @@ export async function handleHeader({ ex_answer: JSON.stringify(KV_HEADER_EXAMPLE_ANSWER, null, 2), }); - const grokProcessors = createGrokProcessor(pattern.grok_pattern); - const pipeline = { processors: grokProcessors, on_failure: [onFailure] }; - - const { pipelineResults } = (await testPipeline(state.logSamples, pipeline, client)) as { - pipelineResults: GrokResult[]; - errors: object[]; - }; - - const additionalProcessors = state.additionalProcessors; - additionalProcessors.push(grokProcessors[0]); - - const kvLogMessages: string[] = pipelineResults.map((entry) => entry.message); - return { - kvLogMessages, - additionalProcessors, + grokPattern: pattern.grok_pattern, lastExecutedChain: 'kv_header', }; } diff --git a/x-pack/plugins/integration_assistant/server/graphs/kv/kv.ts b/x-pack/plugins/integration_assistant/server/graphs/kv/kv.ts index 2f81d11839243..46820778e5a7d 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/kv/kv.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/kv/kv.ts @@ -27,7 +27,7 @@ export async function handleKV({ const kvMainGraph = KV_MAIN_PROMPT.pipe(model).pipe(new JsonOutputParser()); // Pick logSamples if there was no header detected. - const samples = state.kvLogMessages.length > 0 ? state.kvLogMessages : state.logSamples; + const samples = state.header ? state.kvLogMessages : state.logSamples; const kvInput = (await kvMainGraph.invoke({ samples: samples[0], diff --git a/x-pack/plugins/integration_assistant/server/graphs/kv/prompts.ts b/x-pack/plugins/integration_assistant/server/graphs/kv/prompts.ts index e44f164adf75c..0fd7f1262c251 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/kv/prompts.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/kv/prompts.ts @@ -38,6 +38,7 @@ export const KV_MAIN_PROMPT = ChatPromptTemplate.fromMessages([ - Do not create any other processors. - Do not add any prefix to the processor. - Do not use the special characters like \`\s\` or \`\\s+\` in the \`field_split\` or \`value_split\` regular expressions. + - Always use single backslash (\\) for escaping special characters in \`field_split\` or \`value_split\` regular expressions. - Do not add brackets (), <>, [] as well as single or double quotes in \`trim_value\`. - Make sure to trim whitespaces in \`trim_key\`. - Do not respond with anything except the processor as a JSON object enclosed with 3 backticks (\`), see example response below. Use strict JSON response format. @@ -91,6 +92,45 @@ You then have to create a grok pattern using the regex pattern. ['ai', 'Please find the JSON object below:'], ]); +export const KV_HEADER_ERROR_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are an expert in Syslogs and identifying the headers and structured body in syslog messages. Here is some context for you to reference for your task, read it carefully as you will get questions about it later: + + +{current_pattern} + +`, + ], + [ + 'human', + `Please go through each error below, carefully review the provided current grok pattern, and resolve the most likely cause to the supplied error by returning an updated version of the current_pattern. + + +{errors} + + + You ALWAYS follow these guidelines when writing your response: + + - Identify any mismatches, incorrect syntax, or logical errors in the pattern. + - If the message part contains any unstructured data , make sure to add this in grok pattern. + - Do not parse the message part in the regex. Just the header part should be in regex nad grok_pattern. + - Make sure to map the remaining message part to \'message\' in grok pattern. + - Do not respond with anything except the processor as a JSON object enclosed with 3 backticks (\`), see example response above. Use strict JSON response format. + + + You are required to provide the output in the following example response format: + + + A: Please find the JSON object below: + \`\`\`json + {ex_answer} + \`\`\` + `, + ], + ['ai', 'Please find the JSON object below:'], +]); + export const KV_ERROR_PROMPT = ChatPromptTemplate.fromMessages([ [ 'system', @@ -126,6 +166,7 @@ Follow these steps to help resolve the current ingest pipeline issues: You ALWAYS follow these guidelines when writing your response: - Do not use the special characters like \`\s\` or \`\\s+\` in the \`field_split\` or \`value_split\` regular expressions. +- Always use single backslash (\\) for escaping characters in \`field_split\` or \`value_split\` regular expressions. - Do not add brackets (), <>, [] as well as single or double quotes in \`trim_value\`. - Do not add multiple delimeters in the \`value_split\` regular expression. - Make sure to trim whitespaces in \`trim_key\`. diff --git a/x-pack/plugins/integration_assistant/server/graphs/kv/validate.ts b/x-pack/plugins/integration_assistant/server/graphs/kv/validate.ts index adb60ae6ed955..0bca2ac3fd5e4 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/kv/validate.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/kv/validate.ts @@ -11,11 +11,17 @@ import type { KVState } from '../../types'; import type { HandleKVNodeParams } from './types'; import { testPipeline } from '../../util'; import { onFailure } from './constants'; +import { createGrokProcessor } from '../../util/processors'; interface KVResult { [packageName: string]: { [dataStreamName: string]: unknown }; } +interface GrokResult { + [key: string]: unknown; + message: string; +} + export async function handleKVValidate({ state, client, @@ -25,7 +31,7 @@ export async function handleKVValidate({ const dataStreamName = state.dataStreamName; // Pick logSamples if there was no header detected. - const samples = state.kvLogMessages.length > 0 ? state.kvLogMessages : state.logSamples; + const samples = state.header ? state.kvLogMessages : state.logSamples; const { pipelineResults: kvOutputSamples, errors } = (await createJSONInput( kvProcessor, @@ -54,6 +60,35 @@ export async function handleKVValidate({ }; } +export async function handleHeaderValidate({ + state, + client, +}: HandleKVNodeParams): Promise> { + const grokPattern = state.grokPattern; + const grokProcessor = createGrokProcessor(grokPattern); + const pipeline = { processors: grokProcessor, on_failure: [onFailure] }; + + const { pipelineResults, errors } = (await testPipeline(state.logSamples, pipeline, client)) as { + pipelineResults: GrokResult[]; + errors: object[]; + }; + + if (errors.length > 0) { + return { errors, lastExecutedChain: 'kv_header_validate' }; + } + + const kvLogMessages: string[] = pipelineResults.map((entry) => entry.message); + const additionalProcessors = state.additionalProcessors; + additionalProcessors.push(grokProcessor[0]); + + return { + kvLogMessages, + additionalProcessors, + errors: [], + lastExecutedChain: 'kv_header_validate', + }; +} + async function createJSONInput( kvProcessor: ESProcessorItem, formattedSamples: string[], diff --git a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts index 7bbc01d6cc10a..2ed547de00132 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts @@ -22,6 +22,7 @@ Here is some context for you to reference for your task, read it carefully as yo `Looking at the log samples , our goal is to identify the syslog type based on the guidelines below. - Go through each log sample and identify the log format type. +- If the samples have a timestamp , loglevel in the beginning information then set "header: true". - If the samples have a syslog header then set "header: true" , else set "header: false". If you are unable to determine the syslog header presence then set "header: false". - If the syslog samples have structured body then classify it as "log_type: structured". - If the syslog samples have unstructured body then classify it as "log_type: unstructured". diff --git a/x-pack/plugins/integration_assistant/server/types.ts b/x-pack/plugins/integration_assistant/server/types.ts index b657ae8f0f110..0fb68b4e04572 100644 --- a/x-pack/plugins/integration_assistant/server/types.ts +++ b/x-pack/plugins/integration_assistant/server/types.ts @@ -111,6 +111,7 @@ export interface KVState { packageName: string; dataStreamName: string; kvProcessor: ESProcessorItem; + grokPattern: string; logSamples: string[]; kvLogMessages: string[]; jsonSamples: string[]; diff --git a/x-pack/plugins/integration_assistant/server/util/processors.ts b/x-pack/plugins/integration_assistant/server/util/processors.ts index dc0c862282bc7..12200f9d32db9 100644 --- a/x-pack/plugins/integration_assistant/server/util/processors.ts +++ b/x-pack/plugins/integration_assistant/server/util/processors.ts @@ -61,8 +61,8 @@ export function createGrokProcessor(grokPattern: string): ESProcessorItem { return grokProcessor; } -// The kv graph returns a simplified grok processor for header -// This function takes in the grok pattern string and creates the grok processor +// The kv graph returns a simplified kv processor for structured body +// This function takes in the kvInput string and creates the kv processor export function createKVProcessor(kvInput: KVProcessor, state: KVState): ESProcessorItem { const templatesPath = joinPath(__dirname, '../templates/processors'); const env = new Environment(new FileSystemLoader(templatesPath), { From 29381c0a34615c26e5e15f620e6d5c297a735c78 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:56:23 +1000 Subject: [PATCH 47/52] [api-docs] 2024-09-12 Daily api_docs build (#192656) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/828 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 4 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.devdocs.json | 30 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- .../kbn_cloud_security_posture_common.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ent_management_content_insights_public.mdx | 2 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.devdocs.json | 655 ++++++++++++++++++ api_docs/kbn_discover_utils.mdx | 4 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.devdocs.json | 54 ++ api_docs/kbn_elastic_assistant.mdx | 4 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.devdocs.json | 6 +- api_docs/kbn_esql_utils.mdx | 2 +- ..._esql_validation_autocomplete.devdocs.json | 6 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- .../kbn_investigation_shared.devdocs.json | 241 ++++++- api_docs/kbn_investigation_shared.mdx | 4 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- api_docs/kbn_security_solution_common.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- ...curitysolution_list_constants.devdocs.json | 8 - .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.devdocs.json | 361 +--------- api_docs/kbn_unified_data_table.mdx | 4 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 12 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 739 files changed, 1716 insertions(+), 1127 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 24855090cad83..f26e18b79daa6 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index a6a842c64b459..d1ab8f09fc24c 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 033db7fdcec51..49feebdf3064c 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 89550b4c8ce8f..4be290a4b0350 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 5005bd9f53069..3b3bf070e8725 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 5a98871616c80..ff44ebc89c563 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 62074dfd57176..4529ffebc0589 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 51053380bb20a..6007013860907 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 3267f7aae0b59..aa85dab6f4179 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index f5cf31954e28e..e20ad07430692 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index c52a9eaa37fcf..6c6d7b5283e94 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index b08b5a41d0929..3a9329a80cd37 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 7b3fcbf4b0e3c..2f596d74f9713 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 0c4c8df2deb7a..04111fdf284c9 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index 2855653f79e0d..4111bd08ada52 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index e156dca38d884..41a8a711787f9 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index df489ccf8223f..98d3bb5bb12de 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 7675ecd3720c5..4babdeb1fd925 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index cd6fefca7b175..f74bf6a890f5b 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 5843e8b140100..a3de9267c2ea9 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 599b9ec9af532..ff8561c17d0a6 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 47162fe5df7ed..96749ea82be05 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 721256871c9ad..83de1f1f96ae7 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 16bf6bf005afd..f33d1518dc3ea 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 1117c8a78a606..8dcc192c1d0f4 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 8ab5184aae2c8..37a18308d3c05 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index d3530e1801a04..ab98ffb3c164b 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index b483828f435f4..b547f93b1ce7a 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 288d97df56d98..33f32b0f10618 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 93f20037624ba..0af1bdfe5b06f 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 8fb18dc942759..0aecee2286681 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index e58edf14936f1..22b7a3d142335 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 3a447009bbeb0..2e7f699cc9f13 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index fb69a5617dbfb..443e85b35c6a4 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index a21c354950469..d6f19212cda88 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1396,7 +1396,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID)+ 8 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION) | - | -| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklist_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID)+ 8 more | - | +| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID)+ 6 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION) | - | | | [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index f9eaae88d42de..770d31cda8721 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 40c5a4fa80dd1..e4136f3b169ba 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 189d6f6fd1e2c..2bfdd365f546a 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 12037a475cdda..a985639df6fde 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index df18c266a8bc6..f49e7880c15e5 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index f4e73bc9eb4bc..bb2587171689f 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 1ef34b685c47f..e0135ae758e75 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index ffe539cb3cb1a..6228a6124468f 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index e80f0ec89335b..155ff68b70ab6 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 75b081c73e7fc..3d9ac789b0006 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 686c9e6b8fe2f..be6d316bc7fbb 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 45943b46ee136..22da2dca8f213 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 0f1a0b7a92995..19c3045c592fc 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index d0a63797083bc..e09c2026f081d 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 7f07821475fd7..8fa63247fcb68 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 5c8f86abd6a6c..e0e2dbc9a6edc 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index f5ff93cb65784..92a2d552b3ef2 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index a870085e0efaa..34c3650abcefb 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 683162dc055d8..da65f8196de6a 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 23750a173be15..3fab783b37dbd 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 321c79ede411d..4c0286a8e8998 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 03c332ba4e12e..a1527f2cafdf7 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 05d2610986b27..d6c8a86af1b4e 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 7bd90a695906a..1c5d4bc2eb3d2 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 0f191f8528808..383a5e44f71a4 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index b0f617faea5b2..1cdd87e63a433 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 63f01dde86187..3001f21977eb8 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 3f788fb742614..aad01dcd0afc5 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index a12fe79110feb..2a7e3cc982a29 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index c0b17def4bda0..0b2d0283e5baf 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 7e213af22d8be..4f16e7c7fedf1 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index c75fb012b1879..570b8fb1a5dc3 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index b34ea2b8ba3e7..14044d5d6be84 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index f0db4e5fb7076..bc8a66e9d0ff7 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 99f4356034507..c6c438f827241 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 95f4cd1420e47..c222e8472c8c7 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 3660d11b560cb..e6db42319725c 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 008f13c234732..54fd2b2dd5b96 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index a7996dec4f4db..1397848a1bf75 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 3b02d6f477b2c..395f058987650 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index f5feff40fa517..54477df63fd03 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index ebed9e4741aa1..0cabaeabb093c 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 7f3ec5061a455..1d66156ab0329 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index d9f1ef02cf86f..471174d4540fd 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 36f0ac8f8ad32..1125311a71bd5 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index dd094dbec0ff0..c35034fd3e984 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index e83ef6ac1b988..9fa4299c61149 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index 86a6c02292b78..3ecd64bfb15f6 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 3873f0ce6a6d1..a6997041c88d6 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index b6d5aad68bf49..c912f7550fb06 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index e7ed8d3d0db40..cff653a40e160 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 6349cd9f80fa8..c8df612f655df 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 01e6d23b4188a..49674b82c0cbc 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 4bdb9c86aa722..ce1da6e30f0fb 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.devdocs.json b/api_docs/investigate_app.devdocs.json index 932cba12f7bab..6cf89a952705f 100644 --- a/api_docs/investigate_app.devdocs.json +++ b/api_docs/investigate_app.devdocs.json @@ -194,9 +194,15 @@ "UnionC", "<[", "LiteralC", - "<\"ongoing\">, ", + "<\"triage\">, ", "LiteralC", - "<\"closed\">]>; params: ", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", + "LiteralC", + "<\"resolved\">, ", + "LiteralC", + "<\"cancelled\">]>; params: ", "TypeC", "<{ timeRange: ", "TypeC", @@ -204,9 +210,13 @@ "NumberC", "; to: ", "NumberC", - "; }>; }>; }>; }> | undefined; handler: ({}: ", + "; }>; }>; tags: ", + "ArrayC", + "<", + "StringC", + ">; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { path: { investigationId: string; }; body: { title?: string | undefined; status?: \"closed\" | \"ongoing\" | undefined; params?: { timeRange: { from: number; to: number; }; } | undefined; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }>; } & ", + " & { params: { path: { investigationId: string; }; body: { title?: string | undefined; status?: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\" | undefined; params?: { timeRange: { from: number; to: number; }; } | undefined; tags?: string[] | undefined; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; \"GET /api/observability/investigations/{investigationId} 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{investigationId} 2023-10-31\"; params?: ", "TypeC", @@ -216,7 +226,7 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { path: { investigationId: string; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }>; } & ", + " & { params: { path: { investigationId: string; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; \"GET /api/observability/investigations 2023-10-31\": { endpoint: \"GET /api/observability/investigations 2023-10-31\"; params?: ", "PartialC", @@ -230,7 +240,7 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params?: { query?: { alertId?: string | undefined; page?: string | undefined; perPage?: string | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }[]; }>; } & ", + " & { params?: { query?: { alertId?: string | undefined; page?: string | undefined; perPage?: string | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; \"POST /api/observability/investigations 2023-10-31\": { endpoint: \"POST /api/observability/investigations 2023-10-31\"; params?: ", "TypeC", @@ -260,9 +270,13 @@ "TypeC", "<{ type: ", "LiteralC", - "<\"blank\">; }>]>; }>; }> | undefined; handler: ({}: ", + "<\"blank\">; }>]>; tags: ", + "ArrayC", + "<", + "StringC", + ">; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { body: { id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }>; } & ", + " & { params: { body: { id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; tags: string[]; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; }" ], diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 7faddb21ae3b6..3469feca56cce 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index c05e1087a66ce..810f590fdd2a4 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index a2dc3477c613b..ee1c39bc762d7 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 757140692ac4b..133ec1d14f45d 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 59b3541b4edf7..ae3c91213c21c 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 866543e618463..f68b41e8e00b5 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index ceff3aef43750..271d1c0248bb8 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index b9d6f19d514ce..aaf2827ea89ad 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 05cfbf43e286e..1e3c498e5b50a 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 493c68b14061f..ef19136359571 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index e0f04f331b23e..7dd8c8cb84f22 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 5a5f326fbb268..fce9fe6c540a4 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 1dff10df5472e..7d1ae3f4473b7 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 6afc06b6b0658..18499e09c00a7 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 69bf8229e117e..9b7ce89f0d67a 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index cb48088284475..5329891274ca4 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 97d45d29e05a9..02f305002e0ef 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 21976a658d557..2704c8d7808e8 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 5245d5d114552..a2b4d5991a186 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 1330ad11d1376..285fc1f19e429 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 68f277d3e4906..9af16a7a46397 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index ce50e617a8440..babcac53be1d3 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index d0896b0d29914..e5a51803793a8 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 26605c70f5830..532e7fe47e59e 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 0cd97b8adaff3..4ed222537179a 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index cd9909704ab86..3f1781a40d86d 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index c23c5429b00d2..ed3aa2d54d1bd 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 63c4ab8d31573..af28b7c950366 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 98488202a83da..50af830eadbe4 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 348c531d153d1..b62909579c12e 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 964563951c00e..7b7653c03d456 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index ebe1db5bca416..905ba01c23049 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index e8786adbdcf07..09fff2ed71f11 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index eda4dcd94a645..b73873312f123 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 06f2eedd3cdb7..147fe1b82f73d 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 961b04113cacd..343baf9a52093 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index d3ab69c4ac537..44fef4ae80cb6 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 438df658e9924..d65545aab2f84 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index a04354d7d3d0f..1fbed9a68b65e 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 45610348ea208..a179a13ee61f8 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 157b0a45ca0b5..9126a07467a98 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index eb84223c240e1..0d2df6d9e3b89 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index d207eb021e7ed..7b889ab675188 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 4f522fe4b49e7..793f75a26fb26 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index ee0f88652389a..88951101173f7 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index aa67f9fcc554e..11b2693b7ed8f 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index 905797efc9158..8b8067bb75f23 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 310573b8e8f81..93e24e3829c1f 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 080d557be8474..1caa66e3c8765 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 56412090773bc..d6ae0d9356e16 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 24bc47c3801b1..b8af32547d83f 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index e08f4e095c6bd..969b829419592 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 2553ce20eaa1c..7f246327ab1b4 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index d8bb47ff0cb33..b352540988b9d 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index e20dafb41a3a9..e30b0678c34d9 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 0606b0538921b..7c2481133a3a8 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index cf709aeae748f..73e80b3135036 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 7cabebce73535..5bcff3cf2c8b8 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 71b689be8a3dc..b88f4fb72e49e 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index d2c1c5fa3e6b5..5a73aaeee1797 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index da695c8f8a5ec..f80631443c18f 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index a3cffdf1d1ee2..bdac296f5db03 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 76c5ff8a479d2..8e1307910737c 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index 046c4b9f5cefc..ceda733fbaf67 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index cc556d673faa6..7eba058a915b6 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 4605180e455bb..b7021a6042f8a 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 7da54f78f7ad3..1f38657b27ee2 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index b0e79c60a0f65..e1c642219063d 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 390c1ee48757a..794b84511749f 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index d34a500a01e25..fc94f1469a815 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index e1c6219b24d46..f7b542adf7526 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 86e67643b307f..9d477a6dc1ba4 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 2ac5d7604d52e..c7c5be7355477 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 55570816c5e3a..d9cbc05b1f704 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 2e53ee7ed732a..82cd1866e4d8e 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index e246bc494d1aa..7a75f8664758e 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 66b2a10592a10..ca73c6af47278 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index 2a72f96e664e6..6838f9e3d0369 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 4370f71f7269e..b592c69c86d51 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index 418d8993c6441..495fc82c7c6e4 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 95d204d37aa8b..da6db9695a950 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index e583666f8717a..b91488c834ee1 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index da7922d100b21..3aa97f14c858c 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index fa80f277f039f..50f59f93b47bf 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 44fae0cc586ca..829d7c2ebfb3f 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index f4f4fe27acf84..919f119820f8f 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index c8c4b0f64f44e..d59d043962b14 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index f3f6b1eac5d95..ee0bdafc8c1d5 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index c4641e7592f27..9e7a28ec0f805 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 95171fc3dc84a..5ea1d5d6adf64 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 74c1d61a2cff6..314537efdf4ee 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index 67d62bb9da191..e5d3623068c1c 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 83e36d12c652b..5197f15497dfa 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index cc8224eb6d231..2cdb9a81656ce 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index 7097898c180ea..b841f89d9133d 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 9f18805206dd5..3652d615f634a 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 53dd9cc6369cd..5dd6358c1103f 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index b398624bfbd11..8790db9fa4377 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index 7c5e4da66fb02..787f80d344c9d 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index c1b5c69e55d08..58cf122a29b4a 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 848130cf38e6c..5b49b6398ba52 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index dc356f89e2ef7..5f518abb6fbd2 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index ca01d4a33ddf6..8cb64b4217197 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 1c84328c2c275..96b2ebb31b620 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index 80f8f5f2226d6..d6403c1780ea4 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index 5d043baabfb2f..5f5a671c644eb 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 1a4e85c515d15..514183ca34cf0 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 781e276c5dac0..307c50ba7c731 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 82df57923195d..77d00b871e755 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 1a95518ae42e3..f224f9ac216d4 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 6b1a34f9232ee..e94fa03130bb2 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index e8708bc3acd26..d3443644fec1d 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index 0f4e24986238f..c6f353d978abf 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 909cf0bacbc61..5903fbf0a1c20 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index f112828ca4c4c..f8a592c12ebbc 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index e4ce9904ed257..619dbe155b7da 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 6b2122d72f708..f1da85cde7f97 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index da0270f10bc1c..b9a01c0fadff7 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index 40ec05005f78c..90122125cc14e 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 0dd338e9b89f1..1c9a465e54f25 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index 4a295e78a9fd2..898b2d803c246 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 48e2d69cbc9fd..08cb7db283100 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 73795b0c85ff8..11f4b210b2757 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index c769027fbb6b1..eb383b96fe45e 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 760ef4bf8652b..d4ab3e504f90f 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 8879bd03d7ff1..f52ae09f69caa 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 14b0a93140f87..60c38952a6a00 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 2826bdc599ee6..e7bbff113928b 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index b1c07e3925abe..060b0daa0a6d1 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index 26451e38ad119..ec5f06d5f1711 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index a95cc54dbab5c..c3df0cbac2369 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index 3a696feb36144..142a3950a1061 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 1ca545780c94f..be105e562dacb 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index ee24b452b1125..a92bf3ec79c94 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 6c9a5c71dd214..3144b9363238e 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index d2fd5730ab5cc..0affbbb8946f9 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index fc54dcc2d1432..a67ac70edea55 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 3a54345ef1cc7..3db4fe7f736fa 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 5b0ae5b0fb06f..13bc61d2cd4a8 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 15f218b139c61..f14847239065f 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index d22d807e08be9..4c8c3854c050d 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index ec4b8db93e193..dd944a40094ff 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 17e63aa4c4706..5f773e22f6d34 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 28316c292aaea..a7bc4bf55842e 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index 55c6946163da4..8bc9766a66986 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index 5347e17a96d8f..4dcdea45b7240 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 53a5b01d69638..ec6419d7a3a09 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index 521097303f2ab..6a7305daa368a 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index 3e4c81d88fdb0..6564f9459e436 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index f3e5a56532427..7db1f0f9a9746 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index ba759295987e3..63ea325ed2f26 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 7263fa426b564..79f1ff466547c 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index a55e2e6fc9953..d83acb4ee09fb 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index c64e47544fdd3..a164ac097f93b 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 850a43717791b..01eca0a395dac 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 4a0abcc89bd34..29b40dc1c9919 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index dbb687feab20c..0c5bc5685fd17 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index d140266cd2f56..1519f41072e21 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index bba2de7e6650b..9a378cdec7d98 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 5b633624d6083..b86f5c411275a 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 6e5ca681eeaac..e166d01f4a19a 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index ca4d172c2a470..d916eff2e499a 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 3a105c218fdc0..3210d47e840d4 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index e9ccaeb7d943c..0ad3ce820b22e 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 4490c653159f4..6547159712635 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 0f228542cfaf1..c7c4bc0752658 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 4003a8a32db1b..fe231895560be 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index b2689c57b34c3..d7cdd7980c92d 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 9f30d8d7d5505..73a53f6f5aaf0 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index 377afcc802e78..fb8676d628b58 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 12dc800b1c90f..bc93cbee78b70 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 0b6294af12c29..6a95b9eae29e9 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 190d288bef963..2e909e279356f 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 8faafa1926599..334e1071454e3 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 2338b601b233f..2d4bf2ffa3375 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index 8a63edac29290..9fd68221f9c41 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 7dee816c95327..f9897785a502e 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 9fe3dba2eb0a8..f2e0f8b4f1093 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index ebe9c4fce69dd..bc0a92104d658 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index e32a3ab04ee63..0096aa0da4876 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index a30d711841126..11c7758d1f844 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index a26e579189d3d..d2a5b8df556ae 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 82ed26c2dcd65..4d8faa2c91bdf 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 93ed325abca3f..cd416ff5ca323 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index ebba4ab955d9d..b2235d97401dd 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index b919737cde1f6..eb064479cad53 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 0cf82ec4a01fc..4d512f57c9049 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index be5ff48e22240..bf55734b947ce 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 2128b18b6684e..e3ee2e6a12184 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index c405dd63bf439..ea057516a6b9d 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index a14d8b4ae3db8..1a0f1824c26ea 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 4824a03092627..acb2af118928d 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index d2341b46d7304..65327cfd9690f 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 3b36bb7af131b..6938377c9ded9 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 737396799b83f..28f40caffc29b 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 74551b6a648d9..97ac57b1c18e9 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index e5f89c1db638d..1adf7d984703e 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 746af2a397e9a..f9d13714982f8 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index b57560f587b6d..80311d49b9a41 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 19376a2e3a706..bb1b3366126ae 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index b90735973b296..d2a47ceec8803 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index 7d08088d55258..cde0b99d5b578 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 996bf5a73b3ff..b47d6502b0eb2 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index a15f7d313efe5..42cfb02c84bd2 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index b15c3b503014e..cb302f6c796b8 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 42ceb22039153..f3363b5d1fe94 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 0afddd2ee22f4..390838799788f 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 6737d23628408..323a144822ac9 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 033c5461c8764..6d95434e08d65 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 61022bcd3e2bb..e3c70446495dc 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 6f02d4b683567..e6e55402d5b6b 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 36facc4718cdb..b24c05bd8b072 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index 82f3e864d513b..572080be49cd2 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index a611d2aebe46f..22f721659df64 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index f690f8752a334..636c3e2b96d13 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index b0525a9873c15..22d61c9a8d1b1 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index fbf9b6d4d9a31..4de068bd4dd97 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 54a784df068c6..32952bdf7452a 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 5b8305db99452..e0dcd0f73c51f 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index c32699c31195d..e9c518bf11ca0 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 1fc5807f95031..0a63217349278 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index d0a41eeebd89c..dad3cc3fef705 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index a7366a3667b42..cbea3979c2e2c 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 820f1678ac60e..2ce812db4c0ec 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 8474ed5756616..00c8623a3d257 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index ac33e785c6fe6..3a265e5be908a 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index a14d96067c108..88f310b91603e 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 8a5091455fd4b..82c97d651f1ef 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 02f7434ac3384..6805551a4c50c 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index c9e388d16dab9..3ef5719d6d572 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 9a0ba12a699a3..9759347f49039 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 63e200712b82e..7e91ad92a4e27 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 50ef39571861d..657294683ac54 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 998cb58f9117d..27610073db233 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 7bbe622f6caa4..fa62ce0db8314 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index b4b5a4aee56bc..827ec4e62c3bf 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 49ac49daea755..3477714bb2b9c 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index b8a5f4a964753..51a972c28e0bf 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index d196148d77f00..67f1cf1293dde 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 5b5d5cc4f3e79..45289aebb5850 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 1fd3e0b3718e1..a6344119fa7f9 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index 1905a3053dfd9..3dca15d36ed79 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index b4bf9ff4eb075..4b2c8fb1a0caa 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 933a13423fe98..699cc9d397bfc 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index c369071ab2ef2..570e13beea747 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 94d07c81e1617..685b93fd4c713 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 500dce059c12f..5e0f60618bdf2 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 11e07557e49ff..8f8ff0eb02667 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index af2047304aed0..6499cccf63ade 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 23bc86b4f984e..10d360d99262a 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index c8e7b12c6db0f..b8b1ef9a7f087 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index b98d46a08452f..7b2b8a4bc0472 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 7d6e538038907..a1916f2b9ce3d 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index fe0c27160eca4..d1b5a0c92cd87 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index 1e985acf20643..6df54e3a0f29e 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -329,6 +329,158 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.canPrependTimeFieldColumn", + "type": "Function", + "tags": [], + "label": "canPrependTimeFieldColumn", + "description": [], + "signature": [ + "(columns: string[] | undefined, timeFieldName: string | undefined, columnsMeta: ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableColumnsMeta", + "text": "DataTableColumnsMeta" + }, + " | undefined, showTimeCol: boolean, isESQLMode: boolean) => boolean" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.canPrependTimeFieldColumn.$1", + "type": "Array", + "tags": [], + "label": "columns", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.canPrependTimeFieldColumn.$2", + "type": "string", + "tags": [], + "label": "timeFieldName", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.canPrependTimeFieldColumn.$3", + "type": "Object", + "tags": [], + "label": "columnsMeta", + "description": [], + "signature": [ + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableColumnsMeta", + "text": "DataTableColumnsMeta" + }, + " | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.canPrependTimeFieldColumn.$4", + "type": "boolean", + "tags": [], + "label": "showTimeCol", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.canPrependTimeFieldColumn.$5", + "type": "boolean", + "tags": [], + "label": "isESQLMode", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.createDegradedDocsControl", + "type": "Function", + "tags": [], + "label": "createDegradedDocsControl", + "description": [ + "\nDegraded docs control factory function." + ], + "signature": [ + "(props?: DegradedDocsControlProps | undefined) => ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlColumn", + "text": "RowControlColumn" + } + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.createDegradedDocsControl.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [ + "Optional props for the generated Control component, useful to override onClick, etc" + ], + "signature": [ + "DegradedDocsControlProps | undefined" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/degraded_docs_control.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.createLogsContextService", @@ -364,6 +516,66 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.createStacktraceControl", + "type": "Function", + "tags": [], + "label": "createStacktraceControl", + "description": [ + "\nStacktrace control factory function." + ], + "signature": [ + "(props?: Partial<", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlProps", + "text": "RowControlProps" + }, + "> | undefined) => ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlColumn", + "text": "RowControlColumn" + } + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/stacktrace_control.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.createStacktraceControl.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [ + "Optional props for the generated Control component, useful to override onClick, etc" + ], + "signature": [ + "Partial<", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlProps", + "text": "RowControlProps" + }, + "> | undefined" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/stacktrace_control.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.formatFieldValue", @@ -1375,6 +1587,83 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getVisibleColumns", + "type": "Function", + "tags": [], + "label": "getVisibleColumns", + "description": [], + "signature": [ + "(columns: string[], dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + ", shouldPrependTimeFieldColumn: boolean) => string[]" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getVisibleColumns.$1", + "type": "Array", + "tags": [], + "label": "columns", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getVisibleColumns.$2", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getVisibleColumns.$3", + "type": "boolean", + "tags": [], + "label": "shouldPrependTimeFieldColumn", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-discover-utils/src/utils/get_visible_columns.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.isLegacyTableEnabled", @@ -2239,6 +2528,293 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlColumn", + "type": "Interface", + "tags": [], + "label": "RowControlColumn", + "description": [], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlColumn.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlColumn.headerAriaLabel", + "type": "string", + "tags": [], + "label": "headerAriaLabel", + "description": [], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlColumn.headerCellRender", + "type": "CompoundType", + "tags": [], + "label": "headerCellRender", + "description": [], + "signature": [ + "React.ComponentType<{}> | undefined" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlColumn.renderControl", + "type": "Function", + "tags": [], + "label": "renderControl", + "description": [], + "signature": [ + "(Control: ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlComponent", + "text": "RowControlComponent" + }, + ", props: ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlRowProps", + "text": "RowControlRowProps" + }, + ") => React.ReactElement>" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlColumn.renderControl.$1", + "type": "Function", + "tags": [], + "label": "Control", + "description": [], + "signature": [ + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlComponent", + "text": "RowControlComponent" + } + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlColumn.renderControl.$2", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlRowProps", + "text": "RowControlRowProps" + } + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlProps", + "type": "Interface", + "tags": [], + "label": "RowControlProps", + "description": [], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlProps.datatestsubj", + "type": "string", + "tags": [], + "label": "'data-test-subj'", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlProps.color", + "type": "CompoundType", + "tags": [], + "label": "color", + "description": [], + "signature": [ + "\"text\" | \"warning\" | \"success\" | \"primary\" | \"accent\" | \"danger\" | undefined" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlProps.disabled", + "type": "CompoundType", + "tags": [], + "label": "disabled", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlProps.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlProps.iconType", + "type": "CompoundType", + "tags": [], + "label": "iconType", + "description": [], + "signature": [ + "string | React.ComponentType<{}>" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlProps.onClick", + "type": "Function", + "tags": [], + "label": "onClick", + "description": [], + "signature": [ + "((props: ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlRowProps", + "text": "RowControlRowProps" + }, + ") => void) | undefined" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlProps.tooltipContent", + "type": "CompoundType", + "tags": [], + "label": "tooltipContent", + "description": [], + "signature": [ + "boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null | undefined" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlRowProps", + "type": "Interface", + "tags": [], + "label": "RowControlRowProps", + "description": [], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlRowProps.rowIndex", + "type": "number", + "tags": [], + "label": "rowIndex", + "description": [], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlRowProps.record", + "type": "Object", + "tags": [], + "label": "record", + "description": [], + "signature": [ + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableRecord", + "text": "DataTableRecord" + } + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ], "enums": [ @@ -2313,6 +2889,31 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.DataTableColumnsMeta", + "type": "Type", + "tags": [], + "label": "DataTableColumnsMeta", + "description": [ + "\nCustom column types per column name" + ], + "signature": [ + "{ [x: string]: { type: ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumnType", + "text": "DatatableColumnType" + }, + "; esType?: string | undefined; }; }" + ], + "path": "packages/kbn-discover-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.DEFAULT_ALLOWED_LOGS_BASE_PATTERNS", @@ -2465,6 +3066,60 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlComponent", + "type": "Type", + "tags": [], + "label": "RowControlComponent", + "description": [], + "signature": [ + "React.FunctionComponent<", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlProps", + "text": "RowControlProps" + }, + ">" + ], + "path": "packages/kbn-discover-utils/src/components/custom_control_columns/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlComponent.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.RowControlComponent.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.SAMPLE_ROWS_PER_PAGE_SETTING", diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index be42a2c1059e1..2f708d4fd7e7b 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 136 | 0 | 109 | 1 | +| 172 | 0 | 138 | 1 | ## Common diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index a6c888a9dc96a..8cea73a91d997 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 78259b983d381..c77ce1eba786b 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index a4415f36afe93..796416674bb1a 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 61cfe1a25a7cd..e6fe00a9711b4 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index ef0e5af9b1c25..e9dfd14abeb66 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 0f30d082029db..dd02bca396f21 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index 3d4b510be8d61..0ee66cd790567 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -2518,6 +2518,60 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.GetAssistantMessages", + "type": "Type", + "tags": [], + "label": "GetAssistantMessages", + "description": [], + "signature": [ + "(commentArgs: { abortStream: () => void; currentConversation?: ", + { + "pluginId": "@kbn/elastic-assistant", + "scope": "public", + "docId": "kibKbnElasticAssistantPluginApi", + "section": "def-public.Conversation", + "text": "Conversation" + }, + " | undefined; isFetchingResponse: boolean; refetchCurrentConversation: ({ isStreamRefetch }: { isStreamRefetch?: boolean | undefined; }) => void; regenerateMessage: (conversationId: string) => void; showAnonymizedValues: boolean; currentUserAvatar?: ", + "UserAvatar", + " | undefined; setIsStreaming: (isStreaming: boolean) => void; systemPromptContent?: string | undefined; }) => ", + "EuiCommentProps", + "[]" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.GetAssistantMessages.$1", + "type": "Object", + "tags": [], + "label": "commentArgs", + "description": [], + "signature": [ + "{ abortStream: () => void; currentConversation?: ", + { + "pluginId": "@kbn/elastic-assistant", + "scope": "public", + "docId": "kibKbnElasticAssistantPluginApi", + "section": "def-public.Conversation", + "text": "Conversation" + }, + " | undefined; isFetchingResponse: boolean; refetchCurrentConversation: ({ isStreamRefetch }: { isStreamRefetch?: boolean | undefined; }) => void; regenerateMessage: (conversationId: string) => void; showAnonymizedValues: boolean; currentUserAvatar?: ", + "UserAvatar", + " | undefined; setIsStreaming: (isStreaming: boolean) => void; systemPromptContent?: string | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.KNOWLEDGE_BASE_LOCAL_STORAGE_KEY", diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index ffefa42f69035..3b99327a45085 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 156 | 0 | 130 | 9 | +| 158 | 0 | 132 | 10 | ## Client diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 77eb398b16666..e0fb88708fc17 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 1d8fed15a2613..4d500379d67ee 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 3f317ea9addbf..17903cc37d8ab 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 973dcdc341178..dcc93e243a6b4 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index f5a84a34c94fc..f04edcb361ed9 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 873a2efec19d0..19e3f6e39b027 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 32b759b160104..6319eef059fe2 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index ad71385cfad14..163c043551552 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index d4c42e035aa65..94b3d198fcb31 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.devdocs.json b/api_docs/kbn_esql_utils.devdocs.json index d66c6fa269059..762121594a804 100644 --- a/api_docs/kbn_esql_utils.devdocs.json +++ b/api_docs/kbn_esql_utils.devdocs.json @@ -1441,10 +1441,10 @@ }, { "parentPluginId": "@kbn/esql-utils", - "id": "def-common.retieveMetadataColumns", + "id": "def-common.retrieveMetadataColumns", "type": "Function", "tags": [], - "label": "retieveMetadataColumns", + "label": "retrieveMetadataColumns", "description": [], "signature": [ "(esql: string) => string[]" @@ -1455,7 +1455,7 @@ "children": [ { "parentPluginId": "@kbn/esql-utils", - "id": "def-common.retieveMetadataColumns.$1", + "id": "def-common.retrieveMetadataColumns.$1", "type": "string", "tags": [], "label": "esql", diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 9235e57ac58dc..8a19aaf50e67f 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 15ba63572e521..bee047bed7c0e 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -39,7 +39,7 @@ }, ", parameterDefinition: { name: string; type: ", "FunctionParameterType", - "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }, references: ", + "; optional?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }, references: ", "ReferenceMaps", ", parentCommand: string | undefined) => boolean | undefined" ], @@ -78,7 +78,7 @@ "signature": [ "{ name: string; type: ", "FunctionParameterType", - "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }" + "; optional?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }" ], "path": "packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts", "deprecated": false, @@ -3401,7 +3401,7 @@ "signature": [ "{ params: { name: string; type: ", "FunctionParameterType", - "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }[]; minParams?: number | undefined; returnType: ", + "; optional?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; acceptedValues?: string[] | undefined; literalSuggestions?: string[] | undefined; }[]; minParams?: number | undefined; returnType: ", "FunctionReturnType", "; }[]" ], diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 53b8ab6a3832c..6fc704788627c 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 7663b09dc4c92..5927fd60186c2 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index d0b12e11ee223..ecc68b836d7c3 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index e43a65dfc0e54..bfd59a003354a 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 9f1e371419bb6..61af095ef3204 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 9d37e58b67e9a..9483897e3220e 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index b6630e9b0808e..f2d5e559f7968 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 96d3ef084ac0c..8a677a0ac15e4 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index eef41fd9ea38d..23d86a192ca5d 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 0e951af619be6..24e371825aca7 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index ab901a2dccce6..1289b3681fc68 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index 2487a72cea7e0..15758953e17de 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index e6b5a3b1f8539..9e831cd03d1e0 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index da5cc88b2c90b..c5c334cb91ce7 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 9339bd996a93d..9cc512188db15 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 9f94765c920ac..cae7b44885dcc 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 59e33dfaf3433..c51dcbb0eee64 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 5e5de1534ca47..5534e54967c53 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 1c1c66089188c..f8e9b0d27ae43 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 860bb1429be8b..0a9adf4ed161f 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index feabb8071438c..9fe08c87f6736 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index bbccde50f61ce..b058b73eaaa95 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 6d95d65e4de73..5c86f99486dad 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index fd12670855f12..3a722927db133 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index 97f999e06d3e3..726012399b44d 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index e0cc97c599200..99ddbd640c0b7 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 6d2dcbc4394ca..76bee719d4cf9 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 5aa7aa0f00f34..76895e247cb92 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.devdocs.json b/api_docs/kbn_investigation_shared.devdocs.json index e9444469952dd..67a6cc8c0b64e 100644 --- a/api_docs/kbn_investigation_shared.devdocs.json +++ b/api_docs/kbn_investigation_shared.devdocs.json @@ -90,7 +90,7 @@ "label": "CreateInvestigationParams", "description": [], "signature": [ - "{ id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }" + "{ id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; tags: string[]; }" ], "path": "packages/kbn-investigation-shared/src/rest_specs/create.ts", "deprecated": false, @@ -105,7 +105,7 @@ "label": "CreateInvestigationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }" + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }" ], "path": "packages/kbn-investigation-shared/src/rest_specs/create.ts", "deprecated": false, @@ -180,7 +180,7 @@ "label": "FindInvestigationsResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }[]; }" + "{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }[]; }" ], "path": "packages/kbn-investigation-shared/src/rest_specs/find.ts", "deprecated": false, @@ -240,7 +240,7 @@ "label": "GetInvestigationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }" + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }" ], "path": "packages/kbn-investigation-shared/src/rest_specs/get.ts", "deprecated": false, @@ -292,6 +292,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.InvestigationResponse", + "type": "Type", + "tags": [], + "label": "InvestigationResponse", + "description": [], + "signature": [ + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/investigation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/investigation-shared", "id": "def-common.Item", @@ -375,7 +390,7 @@ "label": "UpdateInvestigationParams", "description": [], "signature": [ - "{ title?: string | undefined; status?: \"closed\" | \"ongoing\" | undefined; params?: { timeRange: { from: number; to: number; }; } | undefined; }" + "{ title?: string | undefined; status?: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\" | undefined; params?: { timeRange: { from: number; to: number; }; } | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-investigation-shared/src/rest_specs/update.ts", "deprecated": false, @@ -390,7 +405,7 @@ "label": "UpdateInvestigationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }" + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"active\" | \"triage\" | \"mitigated\" | \"resolved\" | \"cancelled\"; tags: string[]; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; items: ({ id: string; createdAt: number; createdBy: string; } & { title: string; type: string; params: { [x: string]: any; }; })[]; }" ], "path": "packages/kbn-investigation-shared/src/rest_specs/update.ts", "deprecated": false, @@ -588,7 +603,11 @@ "TypeC", "<{ type: ", "LiteralC", - "<\"blank\">; }>]>; }>; }>" + "<\"blank\">; }>]>; tags: ", + "ArrayC", + "<", + "StringC", + ">; }>; }>" ], "path": "packages/kbn-investigation-shared/src/rest_specs/create.ts", "deprecated": false, @@ -636,9 +655,19 @@ "UnionC", "<[", "LiteralC", - "<\"ongoing\">, ", + "<\"triage\">, ", "LiteralC", - "<\"closed\">]>; notes: ", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", + "LiteralC", + "<\"resolved\">, ", + "LiteralC", + "<\"cancelled\">]>; tags: ", + "ArrayC", + "<", + "StringC", + ">; notes: ", "ArrayC", "<", "TypeC", @@ -820,9 +849,19 @@ "UnionC", "<[", "LiteralC", - "<\"ongoing\">, ", + "<\"triage\">, ", + "LiteralC", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", "LiteralC", - "<\"closed\">]>; notes: ", + "<\"resolved\">, ", + "LiteralC", + "<\"cancelled\">]>; tags: ", + "ArrayC", + "<", + "StringC", + ">; notes: ", "ArrayC", "<", "TypeC", @@ -1030,9 +1069,19 @@ "UnionC", "<[", "LiteralC", - "<\"ongoing\">, ", + "<\"triage\">, ", + "LiteralC", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", + "LiteralC", + "<\"resolved\">, ", "LiteralC", - "<\"closed\">]>; notes: ", + "<\"cancelled\">]>; tags: ", + "ArrayC", + "<", + "StringC", + ">; notes: ", "ArrayC", "<", "TypeC", @@ -1195,6 +1244,102 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.investigationResponseSchema", + "type": "Object", + "tags": [], + "label": "investigationResponseSchema", + "description": [], + "signature": [ + "TypeC", + "<{ id: ", + "StringC", + "; title: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; params: ", + "TypeC", + "<{ timeRange: ", + "TypeC", + "<{ from: ", + "NumberC", + "; to: ", + "NumberC", + "; }>; }>; origin: ", + "UnionC", + "<[", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"alert\">; id: ", + "StringC", + "; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"blank\">; }>]>; status: ", + "UnionC", + "<[", + "LiteralC", + "<\"triage\">, ", + "LiteralC", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", + "LiteralC", + "<\"resolved\">, ", + "LiteralC", + "<\"cancelled\">]>; tags: ", + "ArrayC", + "<", + "StringC", + ">; notes: ", + "ArrayC", + "<", + "TypeC", + "<{ id: ", + "StringC", + "; content: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>>; items: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>, ", + "TypeC", + "<{ title: ", + "StringC", + "; type: ", + "StringC", + "; params: ", + "RecordC", + "<", + "StringC", + ", ", + "AnyC", + ">; }>]>>; }>" + ], + "path": "packages/kbn-investigation-shared/src/rest_specs/investigation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/investigation-shared", "id": "def-common.investigationSchema", @@ -1236,9 +1381,19 @@ "UnionC", "<[", "LiteralC", - "<\"ongoing\">, ", + "<\"triage\">, ", + "LiteralC", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", "LiteralC", - "<\"closed\">]>; notes: ", + "<\"resolved\">, ", + "LiteralC", + "<\"cancelled\">]>; tags: ", + "ArrayC", + "<", + "StringC", + ">; notes: ", "ArrayC", "<", "TypeC", @@ -1307,6 +1462,32 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.statusSchema", + "type": "Object", + "tags": [], + "label": "statusSchema", + "description": [], + "signature": [ + "UnionC", + "<[", + "LiteralC", + "<\"triage\">, ", + "LiteralC", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", + "LiteralC", + "<\"resolved\">, ", + "LiteralC", + "<\"cancelled\">]>" + ], + "path": "packages/kbn-investigation-shared/src/schema/investigation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/investigation-shared", "id": "def-common.updateInvestigationItemParamsSchema", @@ -1448,9 +1629,15 @@ "UnionC", "<[", "LiteralC", - "<\"ongoing\">, ", + "<\"triage\">, ", + "LiteralC", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", "LiteralC", - "<\"closed\">]>; params: ", + "<\"resolved\">, ", + "LiteralC", + "<\"cancelled\">]>; params: ", "TypeC", "<{ timeRange: ", "TypeC", @@ -1458,7 +1645,11 @@ "NumberC", "; to: ", "NumberC", - "; }>; }>; }>; }>" + "; }>; }>; tags: ", + "ArrayC", + "<", + "StringC", + ">; }>; }>" ], "path": "packages/kbn-investigation-shared/src/rest_specs/update.ts", "deprecated": false, @@ -1506,9 +1697,19 @@ "UnionC", "<[", "LiteralC", - "<\"ongoing\">, ", + "<\"triage\">, ", + "LiteralC", + "<\"active\">, ", + "LiteralC", + "<\"mitigated\">, ", "LiteralC", - "<\"closed\">]>; notes: ", + "<\"resolved\">, ", + "LiteralC", + "<\"cancelled\">]>; tags: ", + "ArrayC", + "<", + "StringC", + ">; notes: ", "ArrayC", "<", "TypeC", diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index f96e289249798..4a44634edaa53 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 56 | 0 | 56 | 0 | +| 59 | 0 | 59 | 0 | ## Common diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index ae081fd14b869..8649b473e5ad6 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 038dd7142d69b..4c76421a21a09 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 27773267cc643..b57b7151e36b6 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 0c69697afa2b5..8c2ed6cae163d 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index e8fa5427988b2..2ad52dcda9e05 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index f75d8390d940c..9a19501822b36 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index bb0d2053f97c7..3c874afeeb740 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 1850c89a59daf..093210d3ebebb 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 78e5d00152573..dc5ebb989d714 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 2cf2390b71b4d..71698be9ac2b1 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 4f8b64560b5f0..0cb5854bcd708 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 2aa22c95fab44..45ad903c8b9cb 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 39ae47cb4393c..e62c3151a2ef1 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 0439dce056875..9a1a7d8c7e593 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 2964cc2236af2..345a7442e114b 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 22077564eb635..0d1033c4138df 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index a9b233746f131..d8f136554b2c6 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index d6ba4384023e6..3ed47da5252ef 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 22d995149baf7..b929c217c2004 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index dda0eec1760d8..7bf8eac3ba242 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 2b68e8edd9b31..4dd3407c0ce62 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index ae6d387a4e6b9..cdacdfcc9c851 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 6f347712c52ea..1e89e5062d84e 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index af43360b3beb4..fe00b8e69d266 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 3f12e45898be5..f0bf7b1aa8e73 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index c41b26dfcf725..0ade647e477d6 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 7a4762a80c458..2970a2be80de1 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index 709a87329a8ee..d9a2f37e4a775 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index f677bbbb79129..ba9a09c5ccefb 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index bc14dbbb0c9d1..1de14e278b1b3 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index e57aa0c4230e6..90f8f10556587 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index fef57aae5a7c9..494097051844b 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index d23fd567ead92..c176726f765be 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 79417b27985cf..3424781a53a16 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index b73235ed97274..4c2f8464c3766 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index a306d295a0d00..5c9e331e39856 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 613f529b12d9f..79f296e32a7a0 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index b70e3edc81afa..dcd7aecc4a030 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 1d6f45efe239f..924948fe85092 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 3528210d2495f..1f038f017c43c 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index cbfc23205a869..1fa52f47b1a4e 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 2ae5dbbe63de8..e6890d74ada79 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index ea816b8fc1872..f0a21f361e3d6 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 4a3d9c4bb6445..b110330976534 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index 0e75c085f1425..8f05ae2918623 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 71f72b07dcd22..d868da4b3f3ab 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 45f6603a41bef..1b14dfdf8c8d0 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index fce7edf186061..b282f05c2c018 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index b0846ca2cf432..81ffb5854f756 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index cb9258ef222bb..af8cea4284167 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index c244e94a619e3..064ecda5c689d 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 98ea0204ca7c0..2e4874453dca1 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 29dc2c3d6c536..e59349e2e6b8b 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index dba766d4690c5..cf7be5278d822 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index a7f478d07ba1b..ec7612d35215b 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index ddd1de6314117..747ac180d36ac 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 46035ffd315f5..9327171468bf2 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 823dd351fa205..5b0a240dd4b26 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 2ec12f7f34f21..01d95c102f1df 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index f9ba239c2cba6..46b4b819d2a28 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index e3808a9f149ff..d1183d99b391f 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 3b682b017ab6d..f3934cc6bc719 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 015a14e231fe1..e1a0f6f51b229 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 0fb1cde3bd873..ab455f5b1d9a1 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index e1b97b070e053..b57615cf47f02 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 8ce2fdecda378..db8d39a184be5 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 691d987cadd0a..a852cd1fcbcde 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 282a9de6f268d..890b76781f8cc 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 72bccadff94a0..dbb203f815070 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 5f4efe9277750..c54c2e8ebc27b 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 911bb33a53568..c09f7a19d1ec0 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index eeca08987c373..e9cecd61c6b4f 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 96ef346167f9e..4078334da7ecc 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 58f78ea73efb1..cb28e1bcf81b1 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index a2923217c2d74..317ac77c681b4 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index e985a7545c790..9dae66767dc87 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 48dc483b1704e..9a704c1a4fcb4 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index a791bd8b2eb89..c0a0fbc6a815e 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index f0e97adb1db0a..89173edf598f6 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index b5be6c6439abe..68ffaf26ea2f8 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 1956d8a324342..3d384d2041e2c 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 491afe6174136..1d169b61a0220 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index a1d41b00b2570..57d366f649bdb 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 3c4117a306bcf..c211556ad89f3 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 552afa33c3f79..537faf09f6b29 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 29b68b3130743..4e7f2a36a3926 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 13281b90b02fe..2e27ac4e364e8 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index ef6c27bab755e..87b827605252d 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 0f1548b13a686..f9b58b3533f5b 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 18ed2ec867542..1d6208a48f8d2 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index adbb03892ab9d..5994767baf49a 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index dc7e863c32b83..532f6241be691 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 70119876e3f96..7ebae6958568c 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 44a92bfec8ea6..3922bf00f4dc7 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index e12b3126d4cb6..db3861381cabe 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index ae2d17b1f3c42..77603c5203ac7 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index d381b955bd7d8..05970802c8d0c 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index bc5f5bfcb2076..5de2a7d450f68 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index db924d7c23b8b..fd8118a0121e2 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index d6e183d318411..db00c4a450202 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 7f5cd761aa23e..5aa6ffc5091c9 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 6da263108cb67..a4150f190c2f6 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 1649e19e0f9e2..903160a6cb48e 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 7bc8133a3692d..47a6d0249bb1e 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index fc9f07b486cef..6bc39846dee52 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index a1234177ed7fb..712d15137e40f 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 7db91bf4aa269..c45ec62a7e65d 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 9b9132ca53dc1..a5b66ff01202d 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index a432e4ee0a5a4..ddabd62d23b8b 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index 0a7dc3a7fcb34..e33abd89c4225 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index fce8cb9728aee..4b1e72f94de0a 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 894ccf68c036b..3c1dfe6784b70 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 6496bb726f6ed..c953d71db6903 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 0bd3342251fc2..8f07257e636fd 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 0d78251da8635..2831c1c9b15d6 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 05689d95c66f9..1a46aa53f9e38 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 59631ee8eb734..dbc390139996c 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index a09396c23b6d9..cea86de591268 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 21c53ff7e5db7..ce1183050458f 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 90a1de0b828df..f24da174b8473 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index b9e1931a3b7de..5c6dfcdcb8d7e 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index d8cb7a016b322..e1a046f1bd179 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 3bb0976421b6e..8cf0290fbd3c5 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index d307440e04e0e..dd88bcc1c105f 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_common.mdx b/api_docs/kbn_security_solution_common.mdx index 9bc2e092f4a59..6880ee5389aec 100644 --- a/api_docs/kbn_security_solution_common.mdx +++ b/api_docs/kbn_security_solution_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-common title: "@kbn/security-solution-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-common plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-common'] --- import kbnSecuritySolutionCommonObj from './kbn_security_solution_common.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 489cfd1fa02b9..aca397afe03bb 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 080a524bbc9dd..fedfad0619c0a 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 2e471eac37a7e..bafd6a9288004 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index c4f5bd19ab9c6..7bfa4702ba6e2 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index b21fa523bf8e7..85b3a97ed2a15 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index a9c515db7212f..aa29604f5a142 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 8464aff0fd63f..72f25220f6664 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 28c96dfad9133..4d75bdd4447f2 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index aefe5052bcb99..a4938a3a10bef 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 3f719bce0c4c5..f991b8b509b35 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 1ecdfe7612534..3713686ffd4f4 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index bf37c598ad9dd..a6a963e817230 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 9581088b7a95a..11b109ec18b27 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 54744d48c4535..ce70b5d7cd08c 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 8ef4342a6228a..4c93c1796ad66 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 45393712d7f94..9eafd1ee62c8c 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index fcb4c917e7731..ed7bac8bb58d6 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.devdocs.json b/api_docs/kbn_securitysolution_list_constants.devdocs.json index f4fe485c20c72..e1069bb51c152 100644 --- a/api_docs/kbn_securitysolution_list_constants.devdocs.json +++ b/api_docs/kbn_securitysolution_list_constants.devdocs.json @@ -103,14 +103,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts" diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index b742c65091e90..e45f17b96bb09 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 0f10f8a5586b4..9603cb87bf9ec 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 8786185fc46be..a81b1e2bcaec9 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 896a62b87bf93..5f35000109001 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 5e84835ae87f9..aa2ef54ea08af 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index deee7dea73f95..9a45bfcd88d1f 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index b9cabedba5191..16dd29c2b9e57 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index 31332cb549070..4883ce98760b0 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 5c8fd9630cc2e..417a42afa47a4 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 2fa23575ff8bc..e209836e6169e 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 7af875ae2299e..40b3ecaaca8f6 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index e9d602c995112..aae486f9d8f31 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 41c0b61e7e03d..82fa54d5728e5 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 611ec5c5d2019..09886f41af3df 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index a3bb80aed4b99..1a1f377723b44 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 417952b7d798c..36a76df293f72 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 2806d928ca5b7..b2544eefc5980 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index d50b87a0b4e34..f991c5e446a05 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 63cf1e71fe1ef..5d0a53c217777 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index dd54f6a54f0fb..9d1ecf3950a8e 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 8ce28c355c15f..1fe749a3236ba 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 777c0a36c1d5c..fc29a015ff046 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 650761322474f..35d69080ebefe 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index c328873757c0d..34ba65ee31d91 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index a4428537457bd..d08f3ce8e9db6 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index bc04f6bfd0674..de1a8e2e52e30 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index 51bc5ac01916c..686b02b500488 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index c7ad3e3fc656e..f0f58029b8a95 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index e159ec69ec07b..668f7cd410591 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 4ad1db3ca3ff4..3944b79d92945 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 184ffd0a1a14e..b1432aa184e45 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 5fb61c3694b90..97f839b7b9597 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index af59e7fa57e51..dfeb9a0468271 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index ff3d76a21c2cf..b02a276233da4 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 616da46698b8c..3851137a644cd 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index d845e8a56aaf0..f6721c08096aa 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index e8239908e460a..09a7323ab12ad 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index cdb2de320bb1a..748f6b6e5d5d3 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 6e38f236b6811..79ba2d4cfba75 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 0fb26d5008678..c1626acde5b2b 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index d431956f6a96d..90d73fdf8dce6 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index 3a33ec0e69e17..eb2ef52910afc 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 7ade0c73fbeb6..24a95a892240f 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 13d73882e7abe..406b2d539ddea 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index 8cb3925a8a8c0..c39dc8e7502ba 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index f7fd2d502e3db..6e9a944c2c4ff 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index ca28e0353eb3c..7cc5ae7dbc021 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 5427894535a89..171e5d3b5b9dc 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index b421e8ba965d5..022180e735f23 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 81908e7da178d..d48c8381d0f24 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 24d46844fc74c..c782fadfa6743 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 86e817bbfbe56..0f0ca084da0fd 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 3a8a8bc414685..1b61ac3895dc1 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 5bc9c91fde8a3..0590d5a9521b4 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 13732826c2690..7486622be57ed 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 05799817a7d6e..436735729616b 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 7e436f97fb2d2..a8e6d7838e65d 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 6241acafca71f..12405690f642f 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index f7a6b00c04fd5..92e69328979f6 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 9e76ad93a1248..cb808b1387280 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 8f7d523e36139..6de5a059fb6b7 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 5fcdcb4b414db..0fa13655914f5 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 6cf7e3b53ec33..b417da91fefe7 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 899346c757531..149b884384a51 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 20b5b596a9fca..ae62651691ff5 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 33aad56446b3b..55db2ff0778ce 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 34e1ba73dabaa..5265d324fd2b0 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 71427d385baa4..c58fe56b628f3 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index d526d5d11962e..7b9b2a9f5322a 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 18d316ac27571..6b56ef97a113e 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 0f4de353c7a49..f46641851828c 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index d26191ebd6af4..afdc8d5317162 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 0b97495313ad2..522cb19ac69ba 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index aa913ce110823..374db8f341624 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 7d46d12a4a75e..f7b1b31057678 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 4d83b67ec28e6..7628ac237c90d 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 200f93a00b2f1..c8ba81976ca63 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index c621110228276..cc2989fde1c08 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index e47b5375287d0..233357c689a4c 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 430f34f7c1393..2ae9c74102ecf 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index 6ed6026730b6d..bf0686fb24c6c 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -638,279 +638,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlColumn", - "type": "Interface", - "tags": [], - "label": "RowControlColumn", - "description": [], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlColumn.id", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlColumn.headerAriaLabel", - "type": "string", - "tags": [], - "label": "headerAriaLabel", - "description": [], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlColumn.headerCellRender", - "type": "CompoundType", - "tags": [], - "label": "headerCellRender", - "description": [], - "signature": [ - "React.ComponentType<{}> | undefined" - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlColumn.renderControl", - "type": "Function", - "tags": [], - "label": "renderControl", - "description": [], - "signature": [ - "(Control: ", - { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.RowControlComponent", - "text": "RowControlComponent" - }, - ", props: ", - { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.RowControlRowProps", - "text": "RowControlRowProps" - }, - ") => React.ReactElement>" - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlColumn.renderControl.$1", - "type": "Function", - "tags": [], - "label": "Control", - "description": [], - "signature": [ - { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.RowControlComponent", - "text": "RowControlComponent" - } - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlColumn.renderControl.$2", - "type": "Object", - "tags": [], - "label": "props", - "description": [], - "signature": [ - { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.RowControlRowProps", - "text": "RowControlRowProps" - } - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlProps", - "type": "Interface", - "tags": [], - "label": "RowControlProps", - "description": [], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlProps.datatestsubj", - "type": "string", - "tags": [], - "label": "'data-test-subj'", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlProps.color", - "type": "CompoundType", - "tags": [], - "label": "color", - "description": [], - "signature": [ - "\"text\" | \"warning\" | \"success\" | \"primary\" | \"accent\" | \"danger\" | undefined" - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlProps.disabled", - "type": "CompoundType", - "tags": [], - "label": "disabled", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlProps.label", - "type": "string", - "tags": [], - "label": "label", - "description": [], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlProps.iconType", - "type": "CompoundType", - "tags": [], - "label": "iconType", - "description": [], - "signature": [ - "string | React.ComponentType<{}>" - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlProps.onClick", - "type": "Function", - "tags": [], - "label": "onClick", - "description": [], - "signature": [ - "((props: ", - { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.RowControlRowProps", - "text": "RowControlRowProps" - }, - ") => void) | undefined" - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlRowProps", - "type": "Interface", - "tags": [], - "label": "RowControlRowProps", - "description": [], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlRowProps.rowIndex", - "type": "number", - "tags": [], - "label": "rowIndex", - "description": [], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlRowProps.record", - "type": "Object", - "tags": [], - "label": "record", - "description": [], - "signature": [ - { - "pluginId": "@kbn/discover-utils", - "scope": "common", - "docId": "kibKbnDiscoverUtilsPluginApi", - "section": "def-common.DataTableRecord", - "text": "DataTableRecord" - } - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.RowHeightSettingsProps", @@ -1143,10 +870,10 @@ ], "signature": [ { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.DataTableColumnsMeta", + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableColumnsMeta", "text": "DataTableColumnsMeta" }, " | undefined" @@ -2085,10 +1812,10 @@ }, "[], displayedColumns: string[], columnsMeta?: ", { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.DataTableColumnsMeta", + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableColumnsMeta", "text": "DataTableColumnsMeta" }, " | undefined) => JSX.Element | undefined) | undefined" @@ -2164,10 +1891,10 @@ "description": [], "signature": [ { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.DataTableColumnsMeta", + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableColumnsMeta", "text": "DataTableColumnsMeta" }, " | undefined" @@ -2267,10 +1994,10 @@ ], "signature": [ { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.RowControlColumn", + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.RowControlColumn", "text": "RowControlColumn" }, "[] | undefined" @@ -3188,7 +2915,7 @@ }, "; esType?: string | undefined; }; }" ], - "path": "packages/kbn-unified-data-table/src/types.ts", + "path": "packages/kbn-discover-utils/src/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3208,60 +2935,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlComponent", - "type": "Type", - "tags": [], - "label": "RowControlComponent", - "description": [], - "signature": [ - "React.FunctionComponent<", - { - "pluginId": "@kbn/unified-data-table", - "scope": "public", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-public.RowControlProps", - "text": "RowControlProps" - }, - ">" - ], - "path": "packages/kbn-unified-data-table/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlComponent.$1", - "type": "CompoundType", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P & { children?: React.ReactNode; }" - ], - "path": "node_modules/@types/react/index.d.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.RowControlComponent.$2", - "type": "Any", - "tags": [], - "label": "context", - "description": [], - "signature": [ - "any" - ], - "path": "node_modules/@types/react/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.SELECT_ROW", diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index b6578e62569fc..0282cb3699e0a 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 185 | 0 | 108 | 2 | +| 165 | 0 | 90 | 2 | ## Client diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index da49379ca0be9..bcb0ae9f0be86 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 37557e68222b2..f3a042d298466 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 618116e5c0d10..3a19ac34ce723 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index a75e7efe0d4f3..adc7104e069dd 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 44a8c50274697..bba318204f197 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 3bd0f0deba37d..a33771faf2ddd 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 30d39c49d5a25..90a800dc1dc7b 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 5165fafc988a4..2d39df34efd67 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index a4a2967db31ef..4f112bfef1619 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 4943db59bc738..c2adbb1c120fb 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 76718e830f6c1..611a73dadd2aa 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 5d6c443d1e719..72fade11e0007 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 4a8139866dd9a..7572c6703cd07 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index dc16e9b75a4b1..409e5a534db4f 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 6330ed61cb349..eb4370017a066 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index a310296f28b33..9decf727da62f 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 4cf448ef4bc6e..3c4b66e6c1ae5 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 195b25bbfcca1..7e866d40f21e0 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index c6d748369529d..6c97bbacd633e 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 3dde96349f44b..fe6fd0381d650 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 977f5c45e847b..e3be629a22288 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index e2b6eae045304..13a447bd406ca 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 221e8fc450bdb..669abae624030 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index b3cee3e93a749..73f8ea16e50e6 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 82fd0431114ac..5fb65d799cf99 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index bd16ead1ae389..b1aab67d92064 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index a0fd0267f436d..7b79a902413a3 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 52f533bbfe79f..c8b8ccc43eded 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 99a1280dc24e4..bc81438ea7e47 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index f821801774168..027e9f7fe776e 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 960751376af7c..e2d844a09bdef 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 6ade551ac4d55..401e4d9c01a16 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 589f9d22b722b..67f2818ca53f9 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 5bb2841050b9a..efa0ba8a13fc9 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index a5bf1bab65b09..67186612c4654 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index ae51ca5280ca5..d79630bb0bc06 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 0b576e0e5b4c1..ba75cc4885903 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index a881bda121f87..f38b8240a584b 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index dc4c9dc75313c..3c9743d308c20 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index cc36a9e0e7bbf..8f9d30b33fdf2 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 4a3d1ad08b86d..dfdc54ebbc7f8 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index a19da5dc686ba..58413d2c993ac 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 8ef621f7a6043..eef6f5e2c760f 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index c20a710e83e08..e6c72b2560049 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index c5acbb6094b50..ee9ffadbe6f04 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index f3e55d70ba077..9614fb7c0f111 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 43d40f724c334..325efa79d5b09 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 98421078aa309..f4090f9454693 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 78754d1bdca27..cc3b4cf261d13 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 3b5e6d607bd88..2f197f4d93ada 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 53013 | 245 | 39835 | 1965 | +| 53034 | 245 | 39851 | 1966 | ## Plugin Directory @@ -493,14 +493,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 102 | 0 | 86 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 15 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 38 | 2 | 33 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 136 | 0 | 109 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 172 | 0 | 138 | 1 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 78 | 0 | 78 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 57 | 0 | 30 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 37 | 0 | 28 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 16 | 0 | 8 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 156 | 0 | 130 | 9 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 158 | 0 | 132 | 10 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 390 | 0 | 363 | 0 | | | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 41 | 0 | 41 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 55 | 0 | 40 | 7 | @@ -539,7 +539,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 7 | 1 | 7 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 12 | 43 | 0 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 56 | 0 | 56 | 0 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 59 | 0 | 59 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 60 | 0 | 60 | 4 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 44 | 0 | 44 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 0 | 13 | 0 | @@ -762,7 +762,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 42 | 0 | 28 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 59 | 0 | 50 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 9 | 0 | 8 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 185 | 0 | 108 | 2 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 165 | 0 | 90 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 0 | 17 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 314 | 0 | 285 | 8 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 13 | 0 | 9 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index a75ecc24ec756..979b2f5236904 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 65223ee0973d9..d04f1f0ca2292 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index a5c3f9d17fd42..3a3bb4d3875fc 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 0357563af7f5e..50b4fd4aa8da7 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 060d02308196b..77ba5f4a5d9cc 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index acc336379cd73..ce1f08e87801d 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index d6cde975bc87b..abc4bdaa7cea2 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 8b6634ccfbfdd..df817b699a82b 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 099da73adad76..056ac9ca2e194 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 4a87b09502f6c..5ac9fa4815e10 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 60707427cf376..e6406e1cbf060 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index b39a5d35540b1..dacfd6117e7c8 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index b0e13874c1b2d..67d7bac8ccb4b 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 6cd20526b61af..6c57cd3516bde 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 58ab596206bb8..fbbf12ab3f0f7 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 5d03d531f5e4e..24966afbc1bdc 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index df42f01f8175c..e61d9bdb7add9 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 038258398cf5a..fc95933a37da4 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 68b88ec6f2e99..11d3278f9ac66 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 292f35fb2895a..b7fa958a2b335 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index 01d372947a819..feb738da1bcaf 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index f6adf0f8dd5a3..4cd93b4cfa1a2 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index ea8442a4bd730..4d72b57968549 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index a064aad4c6002..20ef83e34fb45 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 0c9e86a95d9ae..74bc73869d614 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index f7e4a4445e58e..9a79b9eff24f7 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index d76c33c121667..940a09b78b33c 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index fcdb4b9e154fa..e0eefa0249f2c 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 4d188e1af276f..21dea7c62efed 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 3891c93146e08..4a0f815ea2a09 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index c19ec032fc1e2..4ef4e9d54821b 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index b9865907cf9cf..d72c283a103cc 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 7f0bdcc780338..2fd739072ba03 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 65a249e219ba8..9548dc61a0eca 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 00ed75a24caad..882360bad1660 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 6d55bbfd83848..4ac993cafb897 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 1e0c99affa251..28a13999a0a5c 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index b86e17f4f1540..105945cc478ff 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 8926aebc6e3bf..28e826844e697 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index bc0a5d326a3d6..4a5d405bc5a15 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index f93bf8f51822e..5681d2361bbf7 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index 51c205d192a0e..6f09f281c1ec8 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 151b507300bfa..027c92743f6e5 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 8bf8f27f4da19..50d2c1a97d6f6 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 0d131f580cd67..c66a56ce72a82 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index e70f970fe0795..b285c42f78b94 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index f078badc7e833..9fa2e5f7b20f4 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 4b7e5d5c06ad3..db222e5007ba1 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index a3b3fb63d0911..6fb14992fc137 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 001cb1e06c140..8dc80c9e76d8b 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index fff7ae6a994ee..41451610d42e7 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 82c652ce2a9fb..b16bc08ca3259 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 40473f8a61274..650e5e98c9115 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index ba9d623e17738..20b52d62d93d0 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 8488e1d36d6b2..fa6d6bad367f8 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 73101f9e7c8a1..18cba02be9c32 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index d9f54a1a5f8c1..befe236980235 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 65a7d82579030..bfb639371659a 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 6e19252494a5e..4fbb582a74b51 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 535c84e59cf8c..b7c3256a13ffb 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 40ce04132477a..5e0b5e426d022 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 3b5695680c145..8b75ca07d7880 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 7eaeb4c56bb2a..07e1cb2a4e51e 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 017d1a77ff354..6bd1dfebd3902 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index bfd2b767b8d90..f3b2154fc53a3 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index c2cb00fea7202..e609656066986 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 536bac1b89442..3b59fc3b7d289 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index fb7084188e519..576c8183258dd 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-09-11 +date: 2024-09-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From de454fee9cc5c7f959cb853322522014f5de77f8 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Thu, 12 Sep 2024 08:28:24 +0200 Subject: [PATCH 48/52] [Otel Onboarding] Replace setcap with running with sudo (#192585) Replace `setcap` with running the collector with `sudo` on Linux as it follows best practices. Later on, this can be replaced by instructions to install the collector instead. --- .../public/application/quickstart_flows/otel_logs/index.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/otel_logs/index.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/otel_logs/index.tsx index d5101790a164a..57c92ea7ebc8d 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/otel_logs/index.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/otel_logs/index.tsx @@ -548,10 +548,8 @@ spec: curl --output elastic-distro-${agentVersion}-linux-$arch.tar.gz --url https://${AGENT_CDN_BASE_URL}/elastic-agent-${agentVersion}-linux-$arch.tar.gz --proto '=https' --tlsv1.2 -fOL && mkdir -p elastic-distro-${agentVersion}-linux-$arch && tar -xvf elastic-distro-${agentVersion}-linux-$arch.tar.gz -C "elastic-distro-${agentVersion}-linux-$arch" --strip-components=1 && cd elastic-distro-${agentVersion}-linux-$arch -sudo setcap 'cap_dac_read_search=ep' ./data/elastic-agent-*/elastic-agent - rm ./otel.yml && cp ./otel_samples/platformlogs_hostmetrics.yml ./otel.yml && mkdir -p ./data/otelcol && sed -i 's#\\\${env:STORAGE_DIR}#'"$PWD"/data/otelcol'#g' ./otel.yml && sed -i 's#\\\${env:ELASTIC_ENDPOINT}#${setup?.elasticsearchUrl}#g' ./otel.yml && sed -i 's/\\\${env:ELASTIC_API_KEY}/${apiKeyData?.apiKeyEncoded}/g' ./otel.yml`, - start: './otelcol --config otel.yml', + start: 'sudo ./otelcol --config otel.yml', type: 'copy', }, { From 3a68f8b3ae639b3c40ad6392298f22f435d1f7e1 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Thu, 12 Sep 2024 00:23:10 -0700 Subject: [PATCH 49/52] [http] api_integration tests handle internal route restriction (#192407) fix https://github.com/elastic/kibana/issues/192052 ## Summary Internal APIs will be [restricted](https://github.com/elastic/kibana/issues/163654) from public access as of 9.0.0. In non-serverless environments, this breaking change will result in a 400 error if an external request is made to an internal Kibana API (route `access` option as `"internal"` or `"public"`). This PR allows API owners of non-xpack plugins to run their `ftr` API integration tests against the restriction and adds examples of how to handle it. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios Note to reviewers: The header needed to allow access to internal apis shouldn't change your test output, with or without the restriction enabled. ### How to test the changes work: #### Non x-pack: 1. Set `server.restrictInternalApis: true` in `test/common/config.js` 2. Ensure your tests pass #### x-pack: 1. Set `server.restrictInternalApis: true` in `x-pack/test/api_integration/apis/security/config.ts` 2. Ensure the spaces tests pass --------- Co-authored-by: Elastic Machine --- .../__snapshots__/http_config.test.ts.snap | 1 + .../src/http_config.test.ts | 18 +++--- .../src/http_config.ts | 1 + .../http/core-http-server/src/router/route.ts | 2 +- test/analytics/config.ts | 1 + test/analytics/services/kibana_ebt.ts | 4 ++ .../tests/analytics_from_the_server.ts | 3 + .../apis/console/autocomplete_entities.ts | 6 +- .../api_integration/apis/console/es_config.ts | 2 + .../apis/console/proxy_route.ts | 4 +- .../api_integration/apis/core/capabilities.ts | 2 + .../apis/custom_integration/integrations.ts | 3 + .../data_view_field_editor/field_preview.ts | 12 +++- .../deprecations/scripted_fields.ts | 46 ++++++++------- .../existing_indices_route/params.ts | 11 +++- .../existing_indices_route/response.ts | 7 ++- .../fields_for_wildcard_route/conflicts.ts | 6 +- .../fields_for_wildcard_route/filter.ts | 6 +- .../fields_for_wildcard_route/params.ts | 17 +++++- .../fields_for_wildcard_route/response.ts | 13 ++++- .../apis/data_views/fields_route/cache.ts | 56 ++++++++++++------- .../apis/data_views/fields_route/conflicts.ts | 2 + .../apis/data_views/fields_route/params.ts | 13 +++++ .../apis/data_views/fields_route/response.ts | 11 ++++ .../has_user_index_pattern.ts | 16 ++++-- .../data_views/resolve_index/resolve_index.ts | 11 +++- .../event_annotations/event_annotations.ts | 21 ++++++- .../apis/guided_onboarding/get_config.ts | 6 +- .../apis/guided_onboarding/get_guides.ts | 11 +++- .../apis/guided_onboarding/get_state.ts | 31 ++++++++-- .../apis/guided_onboarding/put_state.ts | 7 +++ test/api_integration/apis/home/sample_data.ts | 38 +++++++++++-- .../apis/kql_telemetry/kql_telemetry.ts | 10 +++- .../apis/saved_objects/bulk_create.ts | 3 + .../apis/saved_objects/bulk_delete.ts | 4 ++ .../apis/saved_objects/bulk_get.ts | 4 ++ .../apis/saved_objects/bulk_update.ts | 5 ++ .../apis/saved_objects/create.ts | 3 + .../apis/saved_objects/delete.ts | 3 + .../saved_objects/delete_unknown_types.ts | 2 + .../apis/saved_objects/find.ts | 27 +++++++++ .../api_integration/apis/saved_objects/get.ts | 9 ++- .../apis/saved_objects/resolve.ts | 4 ++ .../apis/saved_objects/update.ts | 10 ++++ .../saved_objects_management/bulk_delete.ts | 4 ++ .../apis/saved_objects_management/bulk_get.ts | 4 ++ .../apis/saved_objects_management/find.ts | 14 +++++ .../saved_objects_management/relationships.ts | 27 ++++++++- .../saved_objects_management/scroll_count.ts | 6 ++ .../apis/saved_queries/saved_queries.ts | 24 ++++++-- .../api_integration/apis/scripts/languages.js | 7 ++- test/api_integration/apis/search/bsearch.ts | 20 ++++++- test/api_integration/apis/search/search.ts | 17 +++++- .../api_integration/apis/search/sql_search.ts | 12 +++- .../apis/suggestions/suggestions.js | 17 +++++- .../apis/ui_counters/ui_counters.ts | 3 + .../apis/ui_metric/ui_metric.ts | 4 ++ test/functional/config.base.js | 3 +- .../server_integration/http/platform/cache.ts | 8 ++- .../http/platform/status.ts | 2 + .../apis/spaces/get_active_space.ts | 5 ++ .../apis/spaces/get_content_summary.ts | 7 +++ .../apis/spaces/saved_objects.ts | 6 ++ .../apis/spaces/space_attributes.ts | 4 ++ .../ftr_apis/security_and_spaces/config.ts | 2 + x-pack/test/functional/config.base.js | 2 + 66 files changed, 572 insertions(+), 98 deletions(-) diff --git a/packages/core/http/core-http-server-internal/src/__snapshots__/http_config.test.ts.snap b/packages/core/http/core-http-server-internal/src/__snapshots__/http_config.test.ts.snap index 34cdcd15db7df..6cad6f9686a6d 100644 --- a/packages/core/http/core-http-server-internal/src/__snapshots__/http_config.test.ts.snap +++ b/packages/core/http/core-http-server-internal/src/__snapshots__/http_config.test.ts.snap @@ -88,6 +88,7 @@ Object { "allowFromAnyIp": false, "ipAllowlist": Array [], }, + "restrictInternalApis": false, "rewriteBasePath": false, "securityResponseHeaders": Object { "crossOriginOpenerPolicy": "same-origin", diff --git a/packages/core/http/core-http-server-internal/src/http_config.test.ts b/packages/core/http/core-http-server-internal/src/http_config.test.ts index 70002994445f6..bf9ea2fe53875 100644 --- a/packages/core/http/core-http-server-internal/src/http_config.test.ts +++ b/packages/core/http/core-http-server-internal/src/http_config.test.ts @@ -525,23 +525,27 @@ describe('versioned', () => { }); describe('restrictInternalApis', () => { - it('is only allowed on serverless', () => { - expect(() => config.schema.validate({ restrictInternalApis: false }, {})).toThrow( - /a value wasn't expected/ - ); - expect(() => config.schema.validate({ restrictInternalApis: true }, {})).toThrow( - /a value wasn't expected/ - ); + it('is allowed on serverless and traditional', () => { + expect(() => config.schema.validate({ restrictInternalApis: false }, {})).not.toThrow(); + expect(() => config.schema.validate({ restrictInternalApis: true }, {})).not.toThrow(); expect( config.schema.validate({ restrictInternalApis: true }, { serverless: true }) ).toMatchObject({ restrictInternalApis: true, }); + expect( + config.schema.validate({ restrictInternalApis: true }, { traditional: true }) + ).toMatchObject({ + restrictInternalApis: true, + }); }); it('defaults to false', () => { expect( config.schema.validate({ restrictInternalApis: undefined }, { serverless: true }) ).toMatchObject({ restrictInternalApis: false }); + expect( + config.schema.validate({ restrictInternalApis: undefined }, { traditional: true }) + ).toMatchObject({ restrictInternalApis: false }); }); }); diff --git a/packages/core/http/core-http-server-internal/src/http_config.ts b/packages/core/http/core-http-server-internal/src/http_config.ts index 05f88bf8fb34f..d4560febb6f26 100644 --- a/packages/core/http/core-http-server-internal/src/http_config.ts +++ b/packages/core/http/core-http-server-internal/src/http_config.ts @@ -208,6 +208,7 @@ const configSchema = schema.object( // allow access to internal routes by default to prevent breaking changes in current offerings restrictInternalApis: offeringBasedSchema({ serverless: schema.boolean({ defaultValue: false }), + traditional: schema.boolean({ defaultValue: false }), }), versioned: schema.object({ diff --git a/packages/core/http/core-http-server/src/router/route.ts b/packages/core/http/core-http-server/src/router/route.ts index f313d14a7710a..85eef993adcc0 100644 --- a/packages/core/http/core-http-server/src/router/route.ts +++ b/packages/core/http/core-http-server/src/router/route.ts @@ -107,7 +107,7 @@ export interface RouteConfigOptionsBody { * Public routes are stable and intended for external access and are subject to * stricter change management and have long term maintenance windows. * - * @remark On serverless access to internal routes is restricted. + * @remark as of 9.0, access to internal routes is restricted by default. See https://github.com/elastic/kibana/issues/163654. */ export type RouteAccess = 'public' | 'internal'; diff --git a/test/analytics/config.ts b/test/analytics/config.ts index cc162b0a96d4b..aae2458c3ad6f 100644 --- a/test/analytics/config.ts +++ b/test/analytics/config.ts @@ -36,6 +36,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { serverArgs: [ ...functionalConfig.get('kbnTestServer.serverArgs'), '--telemetry.optIn=true', + '--server.restrictInternalApis=false', `--plugin-path=${path.resolve(__dirname, './plugins/analytics_plugin_a')}`, `--plugin-path=${path.resolve(__dirname, './plugins/analytics_ftr_helpers')}`, ], diff --git a/test/analytics/services/kibana_ebt.ts b/test/analytics/services/kibana_ebt.ts index e82196d028fd4..f2b635dcbdbbe 100644 --- a/test/analytics/services/kibana_ebt.ts +++ b/test/analytics/services/kibana_ebt.ts @@ -9,6 +9,7 @@ import '@kbn/analytics-ftr-helpers-plugin/public/types'; import type { EBTHelpersContract } from '@kbn/analytics-ftr-helpers-plugin/common/types'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../functional/ftr_provider_context'; export function KibanaEBTServerProvider({ getService }: FtrProviderContext): EBTHelpersContract { @@ -18,6 +19,7 @@ export function KibanaEBTServerProvider({ getService }: FtrProviderContext): EBT await supertest .post(`/internal/analytics_ftr_helpers/opt_in`) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ consent: optIn }) .expect(200); }; @@ -38,6 +40,7 @@ export function KibanaEBTServerProvider({ getService }: FtrProviderContext): EBT fromTimestamp, }) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); return resp.body; @@ -48,6 +51,7 @@ export function KibanaEBTServerProvider({ getService }: FtrProviderContext): EBT .get(`/internal/analytics_ftr_helpers/count_events`) .query({ eventTypes: JSON.stringify(eventTypes), withTimeoutMs, fromTimestamp }) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); return resp.body.count; diff --git a/test/analytics/tests/analytics_from_the_server.ts b/test/analytics/tests/analytics_from_the_server.ts index a1b75db9985b3..af15d083419a3 100644 --- a/test/analytics/tests/analytics_from_the_server.ts +++ b/test/analytics/tests/analytics_from_the_server.ts @@ -10,6 +10,7 @@ import expect from '@kbn/expect'; import type { Event, TelemetryCounter } from '@kbn/core/server'; import type { Action } from '@kbn/analytics-plugin-a-plugin/server/custom_shipper'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../services'; export default function ({ getService }: FtrProviderContext) { @@ -23,6 +24,7 @@ export default function ({ getService }: FtrProviderContext) { .get(`/internal/analytics_plugin_a/stats`) .query({ takeNumberOfCounters, eventType: 'test-plugin-lifecycle' }) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); return resp.body; @@ -32,6 +34,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .get(`/internal/analytics_plugin_a/actions`) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); return resp.body; diff --git a/test/api_integration/apis/console/autocomplete_entities.ts b/test/api_integration/apis/console/autocomplete_entities.ts index 6cd0f6df35401..2a19f2c9f7f45 100644 --- a/test/api_integration/apis/console/autocomplete_entities.ts +++ b/test/api_integration/apis/console/autocomplete_entities.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default ({ getService }: FtrProviderContext) => { @@ -15,7 +16,10 @@ export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertest'); const sendRequest = (query: object) => - supertest.get('/api/console/autocomplete_entities').query(query); + supertest + .get('/api/console/autocomplete_entities') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .query(query); describe('/api/console/autocomplete_entities', function () { const indexName = 'test-index-1'; diff --git a/test/api_integration/apis/console/es_config.ts b/test/api_integration/apis/console/es_config.ts index cea71fefb0142..190e35d1f3827 100644 --- a/test/api_integration/apis/console/es_config.ts +++ b/test/api_integration/apis/console/es_config.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -18,6 +19,7 @@ export default function ({ getService }: FtrProviderContext) { const { body } = await supertest .get('/api/console/es_config') .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(body.host).to.be.ok(); }); diff --git a/test/api_integration/apis/console/proxy_route.ts b/test/api_integration/apis/console/proxy_route.ts index bc02a4863eb99..3cc40f318d97b 100644 --- a/test/api_integration/apis/console/proxy_route.ts +++ b/test/api_integration/apis/console/proxy_route.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -19,6 +20,7 @@ export default function ({ getService }: FtrProviderContext) { return await supertest .post('/api/console/proxy?method=GET&path=/.kibana/_settings') .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .then((response) => { expect(response.header).to.have.property('warning'); const { warning } = response.header as { warning: string }; @@ -28,12 +30,12 @@ export default function ({ getService }: FtrProviderContext) { }); it('does not forward x-elastic-product-origin', async () => { - // If we pass the header and we still get the warning back, we assume that the header was not forwarded. return await supertest .post('/api/console/proxy?method=GET&path=/.kibana/_settings') .set('kbn-xsrf', 'true') .set('x-elastic-product-origin', 'kibana') .then((response) => { + expect(response.header).to.have.property('connection', 'close'); expect(response.header).to.have.property('warning'); const { warning } = response.header as { warning: string }; expect(warning.startsWith('299')).to.be(true); diff --git a/test/api_integration/apis/core/capabilities.ts b/test/api_integration/apis/core/capabilities.ts index d99c47213fb04..6816090d36c37 100644 --- a/test/api_integration/apis/core/capabilities.ts +++ b/test/api_integration/apis/core/capabilities.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -17,6 +18,7 @@ export default function ({ getService }: FtrProviderContext) { it(`returns a 400 when an invalid app id is provided`, async () => { const { body } = await supertest .post('/api/core/capabilities') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ applications: ['dashboard', 'discover', 'bad%app'], }) diff --git a/test/api_integration/apis/custom_integration/integrations.ts b/test/api_integration/apis/custom_integration/integrations.ts index ecb53f6200780..a3d50533010f1 100644 --- a/test/api_integration/apis/custom_integration/integrations.ts +++ b/test/api_integration/apis/custom_integration/integrations.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -19,6 +20,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .get(`/internal/customIntegrations/appendCustomIntegrations`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body).to.be.an('array'); @@ -37,6 +39,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .get(`/internal/customIntegrations/replacementCustomIntegrations`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body).to.be.an('array'); diff --git a/test/api_integration/apis/data_view_field_editor/field_preview.ts b/test/api_integration/apis/data_view_field_editor/field_preview.ts index 5190ebde33953..24762ea2242e4 100644 --- a/test/api_integration/apis/data_view_field_editor/field_preview.ts +++ b/test/api_integration/apis/data_view_field_editor/field_preview.ts @@ -9,7 +9,10 @@ import expect from '@kbn/expect'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { getErrorCodeFromErrorReason } from '@kbn/data-view-field-editor-plugin/public/lib/runtime_field_validation'; import { FIELD_PREVIEW_PATH, @@ -92,6 +95,7 @@ export default function ({ getService }: FtrProviderContext) { .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION) .send(payload) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(response.values).eql([test.expected]); @@ -109,6 +113,7 @@ export default function ({ getService }: FtrProviderContext) { index: INDEX_NAME, }) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(400); }); @@ -121,6 +126,7 @@ export default function ({ getService }: FtrProviderContext) { index: INDEX_NAME, }) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(400); }); @@ -133,6 +139,7 @@ export default function ({ getService }: FtrProviderContext) { context: 'keyword_field', }) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(400); }); }); @@ -150,7 +157,8 @@ export default function ({ getService }: FtrProviderContext) { context: 'keyword_field', index: INDEX_NAME, }) - .set('kbn-xsrf', 'xxx'); + .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); const errorCode = getErrorCodeFromErrorReason(response.error?.caused_by?.reason); diff --git a/test/api_integration/apis/data_views/deprecations/scripted_fields.ts b/test/api_integration/apis/data_views/deprecations/scripted_fields.ts index 7fcfd432d0782..083fabada4ec7 100644 --- a/test/api_integration/apis/data_views/deprecations/scripted_fields.ts +++ b/test/api_integration/apis/data_views/deprecations/scripted_fields.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import type { DeprecationsGetResponse } from '@kbn/core/server'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -28,7 +29,9 @@ export default function ({ getService }: FtrProviderContext) { }); it('no scripted fields deprecations', async () => { - const { body } = await supertest.get('/api/deprecations/'); + const { body } = await supertest + .get('/api/deprecations/') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); const { deprecations } = body as DeprecationsGetResponse; const dataPluginDeprecations = deprecations.filter( @@ -40,27 +43,32 @@ export default function ({ getService }: FtrProviderContext) { it('scripted field deprecation', async () => { const title = `basic_index`; - await supertest.post('/api/index_patterns/index_pattern').send({ - index_pattern: { - title, - fields: { - foo: { - name: 'foo', - type: 'string', - scripted: true, - script: "doc['field_name'].value", - }, - bar: { - name: 'bar', - type: 'number', - scripted: true, - script: "doc['field_name'].value", + await supertest + .post('/api/index_patterns/index_pattern') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send({ + index_pattern: { + title, + fields: { + foo: { + name: 'foo', + type: 'string', + scripted: true, + script: "doc['field_name'].value", + }, + bar: { + name: 'bar', + type: 'number', + scripted: true, + script: "doc['field_name'].value", + }, }, }, - }, - }); + }); - const { body } = await supertest.get('/api/deprecations/'); + const { body } = await supertest + .get('/api/deprecations/') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); const { deprecations } = body as DeprecationsGetResponse; const dataPluginDeprecations = deprecations.filter( ({ domainId }) => domainId === 'dataViews' diff --git a/test/api_integration/apis/data_views/existing_indices_route/params.ts b/test/api_integration/apis/data_views/existing_indices_route/params.ts index 4bebcca337260..8e1e4bab0cbdd 100644 --- a/test/api_integration/apis/data_views/existing_indices_route/params.ts +++ b/test/api_integration/apis/data_views/existing_indices_route/params.ts @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { EXISTING_INDICES_PATH } from '@kbn/data-views-plugin/common/constants'; import { FtrProviderContext } from '../../../ftr_provider_context'; @@ -29,6 +32,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(EXISTING_INDICES_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({}) .expect(400)); @@ -36,6 +40,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(EXISTING_INDICES_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ indices: 'filebeat-*', }) @@ -45,6 +50,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(EXISTING_INDICES_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ indices: ['filebeat-*'], }) @@ -54,6 +60,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(EXISTING_INDICES_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ indices: ['filebeat-*', 'packetbeat-*'], }) @@ -63,6 +70,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(EXISTING_INDICES_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ [randomness.word()]: randomness.word(), }) @@ -72,6 +80,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(EXISTING_INDICES_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ indices: 'filebeat-*,packetbeat-*', }) diff --git a/test/api_integration/apis/data_views/existing_indices_route/response.ts b/test/api_integration/apis/data_views/existing_indices_route/response.ts index 8ccc723eff9d9..7959945081219 100644 --- a/test/api_integration/apis/data_views/existing_indices_route/response.ts +++ b/test/api_integration/apis/data_views/existing_indices_route/response.ts @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { EXISTING_INDICES_PATH } from '@kbn/data-views-plugin/common/constants'; import { FtrProviderContext } from '../../../ftr_provider_context'; @@ -28,6 +31,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(EXISTING_INDICES_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ indices: ['basic_index', 'bad_index'], }) @@ -38,6 +42,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(EXISTING_INDICES_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ indices: ['bad_index'], }) diff --git a/test/api_integration/apis/data_views/fields_for_wildcard_route/conflicts.ts b/test/api_integration/apis/data_views/fields_for_wildcard_route/conflicts.ts index 19fdbeedaa9f2..852ea100ae051 100644 --- a/test/api_integration/apis/data_views/fields_for_wildcard_route/conflicts.ts +++ b/test/api_integration/apis/data_views/fields_for_wildcard_route/conflicts.ts @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { FIELDS_FOR_WILDCARD_PATH } from '@kbn/data-views-plugin/common/constants'; import expect from '@kbn/expect'; @@ -29,6 +32,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'logs-*' }) .expect(200) .then((resp) => { diff --git a/test/api_integration/apis/data_views/fields_for_wildcard_route/filter.ts b/test/api_integration/apis/data_views/fields_for_wildcard_route/filter.ts index 0d66365907aec..04574801a16c8 100644 --- a/test/api_integration/apis/data_views/fields_for_wildcard_route/filter.ts +++ b/test/api_integration/apis/data_views/fields_for_wildcard_route/filter.ts @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { FIELDS_FOR_WILDCARD_PATH } from '@kbn/data-views-plugin/common/constants'; import expect from '@kbn/expect'; @@ -38,6 +41,7 @@ export default function ({ getService }: FtrProviderContext) { const a = await supertest .put(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'helloworld*' }) .send({ index_filter: { exists: { field: 'bye' } } }); diff --git a/test/api_integration/apis/data_views/fields_for_wildcard_route/params.ts b/test/api_integration/apis/data_views/fields_for_wildcard_route/params.ts index 8b42c645f913a..04aaaa2adc331 100644 --- a/test/api_integration/apis/data_views/fields_for_wildcard_route/params.ts +++ b/test/api_integration/apis/data_views/fields_for_wildcard_route/params.ts @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { FIELDS_FOR_WILDCARD_PATH } from '@kbn/data-views-plugin/common/constants'; import { FtrProviderContext } from '../../../ftr_provider_context'; @@ -29,6 +32,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({}) .expect(400)); @@ -36,6 +40,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', include_unmapped: true, @@ -46,6 +51,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: randomness.word(), [randomness.word()]: randomness.word(), @@ -57,6 +63,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: JSON.stringify(['baz']), @@ -67,6 +74,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: ['baz', 'foo'], @@ -77,6 +85,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: ['baz'], @@ -87,6 +96,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: 'baz', @@ -97,6 +107,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: 'foo,bar', @@ -109,6 +120,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', meta_fields: JSON.stringify(['meta']), @@ -119,6 +131,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', meta_fields: ['_id', 'meta'], @@ -129,6 +142,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', meta_fields: ['_id'], @@ -139,6 +153,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', meta_fields: 'foo,bar', diff --git a/test/api_integration/apis/data_views/fields_for_wildcard_route/response.ts b/test/api_integration/apis/data_views/fields_for_wildcard_route/response.ts index d818e0f85eac2..2b0fa0dab4424 100644 --- a/test/api_integration/apis/data_views/fields_for_wildcard_route/response.ts +++ b/test/api_integration/apis/data_views/fields_for_wildcard_route/response.ts @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { FIELDS_FOR_WILDCARD_PATH } from '@kbn/data-views-plugin/common/constants'; import expect from '@kbn/expect'; @@ -89,6 +92,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index' }) .expect(200, { fields: testFields, @@ -101,6 +105,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index', fields: JSON.stringify(['bar']) }) .expect(200, { fields: [testFields[0]], @@ -112,6 +117,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index', meta_fields: JSON.stringify(['_id', '_source', 'crazy_meta_field']), @@ -205,6 +211,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'bad_index,basic_index' }) .expect(200, { fields: testFields, @@ -216,6 +223,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'bad_index,bad_index_2' }) .expect(404); }); @@ -224,6 +232,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'bad_index', }) @@ -238,6 +247,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index' }) .expect(200, { fields: [], @@ -251,6 +261,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_FOR_WILDCARD_PATH) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'fields-for-wildcard-000001', meta_fields: ['_id', '_index'], diff --git a/test/api_integration/apis/data_views/fields_route/cache.ts b/test/api_integration/apis/data_views/fields_route/cache.ts index a9ca10d3400ee..e906b34336f40 100644 --- a/test/api_integration/apis/data_views/fields_route/cache.ts +++ b/test/api_integration/apis/data_views/fields_route/cache.ts @@ -10,6 +10,7 @@ import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { FIELDS_PATH } from '@kbn/data-views-plugin/common/constants'; import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -26,11 +27,14 @@ export default function ({ getService }: FtrProviderContext) { ); it('are present', async () => { - const response = await supertest.get(FIELDS_PATH).query({ - pattern: '*', - include_unmapped: true, - apiVersion: INITIAL_REST_VERSION_INTERNAL, - }); + const response = await supertest + .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .query({ + pattern: '*', + include_unmapped: true, + apiVersion: INITIAL_REST_VERSION_INTERNAL, + }); const cacheControlHeader = response.get('cache-control'); @@ -44,11 +48,14 @@ export default function ({ getService }: FtrProviderContext) { it('no-cache when data_views:cache_max_age set to zero', async () => { await kibanaServer.uiSettings.update({ 'data_views:cache_max_age': 0 }); - const response = await supertest.get(FIELDS_PATH).query({ - pattern: 'b*', - include_unmapped: true, - apiVersion: INITIAL_REST_VERSION_INTERNAL, - }); + const response = await supertest + .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .query({ + pattern: 'b*', + include_unmapped: true, + apiVersion: INITIAL_REST_VERSION_INTERNAL, + }); const cacheControlHeader = response.get('cache-control'); @@ -63,15 +70,19 @@ export default function ({ getService }: FtrProviderContext) { }); it('returns 304 on matching etag', async () => { - const response = await supertest.get(FIELDS_PATH).query({ - pattern: '*', - include_unmapped: true, - apiVersion: INITIAL_REST_VERSION_INTERNAL, - }); + const response = await supertest + .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .query({ + pattern: '*', + include_unmapped: true, + apiVersion: INITIAL_REST_VERSION_INTERNAL, + }); await supertest .get(FIELDS_PATH) .set('If-None-Match', response.get('etag')!) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', include_unmapped: true, @@ -81,12 +92,15 @@ export default function ({ getService }: FtrProviderContext) { }); it('handles empty field lists', async () => { - const response = await supertest.get(FIELDS_PATH).query({ - pattern: 'xyz', - include_unmapped: true, - apiVersion: INITIAL_REST_VERSION_INTERNAL, - allow_no_index: true, - }); + const response = await supertest + .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .query({ + pattern: 'xyz', + include_unmapped: true, + apiVersion: INITIAL_REST_VERSION_INTERNAL, + allow_no_index: true, + }); expect(response.body.fields).to.be.empty(); }); diff --git a/test/api_integration/apis/data_views/fields_route/conflicts.ts b/test/api_integration/apis/data_views/fields_route/conflicts.ts index 18bbe689c9937..681512af62e7f 100644 --- a/test/api_integration/apis/data_views/fields_route/conflicts.ts +++ b/test/api_integration/apis/data_views/fields_route/conflicts.ts @@ -10,6 +10,7 @@ import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { FIELDS_PATH } from '@kbn/data-views-plugin/common/constants'; import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -27,6 +28,7 @@ export default function ({ getService }: FtrProviderContext) { it('flags fields with mismatched types as conflicting', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'logs-*', apiVersion: INITIAL_REST_VERSION_INTERNAL }) .expect(200) .then((resp) => { diff --git a/test/api_integration/apis/data_views/fields_route/params.ts b/test/api_integration/apis/data_views/fields_route/params.ts index 3d6dcef506aa5..bdd99b78e670b 100644 --- a/test/api_integration/apis/data_views/fields_route/params.ts +++ b/test/api_integration/apis/data_views/fields_route/params.ts @@ -9,6 +9,7 @@ import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/constants'; import { FIELDS_PATH } from '@kbn/data-views-plugin/common/constants'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -27,6 +28,7 @@ export default function ({ getService }: FtrProviderContext) { it('requires a pattern query param', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ apiVersion: INITIAL_REST_VERSION_INTERNAL, }) @@ -35,6 +37,7 @@ export default function ({ getService }: FtrProviderContext) { it('accepts include_unmapped param', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', include_unmapped: true, @@ -45,6 +48,7 @@ export default function ({ getService }: FtrProviderContext) { it('rejects unexpected query params', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: randomness.word(), [randomness.word()]: randomness.word(), @@ -56,6 +60,7 @@ export default function ({ getService }: FtrProviderContext) { it('accepts a JSON formatted fields query param', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: JSON.stringify(['baz']), @@ -66,6 +71,7 @@ export default function ({ getService }: FtrProviderContext) { it('accepts meta_fields query param in string array', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: ['baz', 'foo'], @@ -76,6 +82,7 @@ export default function ({ getService }: FtrProviderContext) { it('accepts single array fields query param', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: ['baz'], @@ -86,6 +93,7 @@ export default function ({ getService }: FtrProviderContext) { it('accepts single fields query param', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: 'baz', @@ -96,6 +104,7 @@ export default function ({ getService }: FtrProviderContext) { it('rejects a comma-separated list of fields', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', fields: 'foo,bar', @@ -108,6 +117,7 @@ export default function ({ getService }: FtrProviderContext) { it('accepts a JSON formatted meta_fields query param', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', meta_fields: JSON.stringify(['meta']), @@ -118,6 +128,7 @@ export default function ({ getService }: FtrProviderContext) { it('accepts meta_fields query param in string array', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', meta_fields: ['_id', 'meta'], @@ -128,6 +139,7 @@ export default function ({ getService }: FtrProviderContext) { it('accepts single meta_fields query param', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', meta_fields: ['_id'], @@ -138,6 +150,7 @@ export default function ({ getService }: FtrProviderContext) { it('rejects a comma-separated list of meta_fields', () => supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: '*', meta_fields: 'foo,bar', diff --git a/test/api_integration/apis/data_views/fields_route/response.ts b/test/api_integration/apis/data_views/fields_route/response.ts index 149ebf4d5ce4a..541434b872eb2 100644 --- a/test/api_integration/apis/data_views/fields_route/response.ts +++ b/test/api_integration/apis/data_views/fields_route/response.ts @@ -11,6 +11,7 @@ import { INITIAL_REST_VERSION_INTERNAL } from '@kbn/data-views-plugin/server/con import { FIELDS_PATH } from '@kbn/data-views-plugin/common/constants'; import expect from '@kbn/expect'; import { sortBy } from 'lodash'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -87,6 +88,7 @@ export default function ({ getService }: FtrProviderContext) { it('returns a flattened version of the fields in es', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index', apiVersion: INITIAL_REST_VERSION_INTERNAL }) .expect(200, { fields: testFields, @@ -98,6 +100,7 @@ export default function ({ getService }: FtrProviderContext) { it('returns a single field as requested', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index', fields: ['bar'], @@ -112,6 +115,7 @@ export default function ({ getService }: FtrProviderContext) { it('returns a single field as requested with json encoding', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index', fields: JSON.stringify(['bar']), @@ -126,6 +130,7 @@ export default function ({ getService }: FtrProviderContext) { it('always returns a field for all passed meta fields', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index', meta_fields: ['_id', '_source', 'crazy_meta_field'], @@ -219,6 +224,7 @@ export default function ({ getService }: FtrProviderContext) { it('can request fields by type', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index', field_types: 'boolean', @@ -233,6 +239,7 @@ export default function ({ getService }: FtrProviderContext) { it('can request fields by multiple types', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'basic_index', field_types: ['boolean', 'text'], @@ -247,6 +254,7 @@ export default function ({ getService }: FtrProviderContext) { it('returns fields when one pattern exists and the other does not', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'bad_index,basic_index', apiVersion: INITIAL_REST_VERSION_INTERNAL }) .expect(200, { fields: testFields, @@ -257,6 +265,7 @@ export default function ({ getService }: FtrProviderContext) { it('returns 404 when neither exists', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'bad_index,bad_index_2', apiVersion: INITIAL_REST_VERSION_INTERNAL }) .expect(404); }); @@ -264,6 +273,7 @@ export default function ({ getService }: FtrProviderContext) { it('returns 404 when no patterns exist', async () => { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'bad_index', apiVersion: INITIAL_REST_VERSION_INTERNAL, @@ -276,6 +286,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(FIELDS_PATH) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ pattern: 'fields-route-000001', meta_fields: ['_id', '_index'], diff --git a/test/api_integration/apis/data_views/has_user_index_pattern/has_user_index_pattern.ts b/test/api_integration/apis/data_views/has_user_index_pattern/has_user_index_pattern.ts index 0193040dcef2c..f781704bb5af3 100644 --- a/test/api_integration/apis/data_views/has_user_index_pattern/has_user_index_pattern.ts +++ b/test/api_integration/apis/data_views/has_user_index_pattern/has_user_index_pattern.ts @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { INITIAL_REST_VERSION, INITIAL_REST_VERSION_INTERNAL, @@ -42,7 +45,8 @@ export default function ({ getService }: FtrProviderContext) { await esArchiver.emptyKibanaIndex(); const response = await supertest .get(servicePath) - .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL); + .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); expect(response.status).to.be(200); expect(response.body.result).to.be(false); }); @@ -54,6 +58,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post(config.path) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ override: true, [config.serviceKey]: { @@ -63,7 +68,8 @@ export default function ({ getService }: FtrProviderContext) { const response = await supertest .get(servicePath) - .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL); + .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); expect(response.status).to.be(200); expect(response.body.result).to.be(true); @@ -76,6 +82,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post(config.path) .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ override: true, [config.serviceKey]: { @@ -86,7 +93,8 @@ export default function ({ getService }: FtrProviderContext) { const response = await supertest .get(servicePath) - .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL); + .set(ELASTIC_HTTP_VERSION_HEADER, INITIAL_REST_VERSION_INTERNAL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); expect(response.status).to.be(200); expect(response.body.result).to.be(true); }); diff --git a/test/api_integration/apis/data_views/resolve_index/resolve_index.ts b/test/api_integration/apis/data_views/resolve_index/resolve_index.ts index 2cf3f6702cddf..cd13d23e80c1e 100644 --- a/test/api_integration/apis/data_views/resolve_index/resolve_index.ts +++ b/test/api_integration/apis/data_views/resolve_index/resolve_index.ts @@ -7,6 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../../ftr_provider_context'; // node scripts/functional_tests --config test/api_integration/config.js --grep="Resolve index API" @@ -16,9 +17,15 @@ export default function ({ getService }: FtrProviderContext) { describe('Resolve index API', function () { it('should return 200 for a search for indices with wildcard', () => - supertest.get(`/internal/index-pattern-management/resolve_index/test*`).expect(200)); + supertest + .get(`/internal/index-pattern-management/resolve_index/test*`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200)); it('should return 404 for an exact match index', () => - supertest.get(`/internal/index-pattern-management/resolve_index/test`).expect(404)); + supertest + .get(`/internal/index-pattern-management/resolve_index/test`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(404)); }); } diff --git a/test/api_integration/apis/event_annotations/event_annotations.ts b/test/api_integration/apis/event_annotations/event_annotations.ts index 1232bc5d69adb..c6df9b16d3c6c 100644 --- a/test/api_integration/apis/event_annotations/event_annotations.ts +++ b/test/api_integration/apis/event_annotations/event_annotations.ts @@ -22,6 +22,7 @@ import type { } from '@kbn/event-annotation-plugin/common'; import { CONTENT_ID } from '@kbn/event-annotation-plugin/common'; import { EVENT_ANNOTATION_GROUP_TYPE } from '@kbn/event-annotation-common'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; const CONTENT_ENDPOINT = '/api/content_management/rpc'; @@ -94,6 +95,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`${CONTENT_ENDPOINT}/get`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(payload) .expect(200); @@ -138,6 +140,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`${CONTENT_ENDPOINT}/get`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(payload) .expect(404); @@ -151,7 +154,11 @@ export default function ({ getService }: FtrProviderContext) { describe('search', () => { const performSearch = (payload: EventAnnotationGroupSearchIn) => - supertest.post(`${CONTENT_ENDPOINT}/search`).set('kbn-xsrf', 'kibana').send(payload); + supertest + .post(`${CONTENT_ENDPOINT}/search`) + .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send(payload); it(`should retrieve existing groups`, async () => { const payload: EventAnnotationGroupSearchIn = { @@ -277,6 +284,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`${CONTENT_ENDPOINT}/create`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(payload) .expect(200); @@ -325,6 +333,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`${CONTENT_ENDPOINT}/create`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(payload) .expect(400); @@ -345,6 +354,7 @@ export default function ({ getService }: FtrProviderContext) { return supertest .post(`${CONTENT_ENDPOINT}/create`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(payload); }; @@ -380,6 +390,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`${CONTENT_ENDPOINT}/update`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(payload) .expect(200); @@ -431,6 +442,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`${CONTENT_ENDPOINT}/update`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(payload) .expect(400); @@ -453,6 +465,7 @@ export default function ({ getService }: FtrProviderContext) { return supertest .post(`${CONTENT_ENDPOINT}/update`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(payload); }; const errorResp = await updateWithDataViewSpec(undefined).expect(400); @@ -477,7 +490,11 @@ export default function ({ getService }: FtrProviderContext) { version: API_VERSION, }; - return supertest.post(`${CONTENT_ENDPOINT}/delete`).set('kbn-xsrf', 'kibana').send(payload); + return supertest + .post(`${CONTENT_ENDPOINT}/delete`) + .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send(payload); }; it(`should delete a group`, async () => { diff --git a/test/api_integration/apis/guided_onboarding/get_config.ts b/test/api_integration/apis/guided_onboarding/get_config.ts index 3331a08f33c3b..6ab2095e594b8 100644 --- a/test/api_integration/apis/guided_onboarding/get_config.ts +++ b/test/api_integration/apis/guided_onboarding/get_config.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import { API_BASE_PATH } from '@kbn/guided-onboarding-plugin/common'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; const getConfigsPath = `${API_BASE_PATH}/configs`; @@ -19,7 +20,10 @@ export default function testGetGuideConfig({ getService }: FtrProviderContext) { // check that production guides are present ['siem', 'appSearch', 'websiteSearch', 'databaseSearch', 'kubernetes'].map((guideId) => { it(`returns config for ${guideId}`, async () => { - const response = await supertest.get(`${getConfigsPath}/${guideId}`).expect(200); + const response = await supertest + .get(`${getConfigsPath}/${guideId}`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body).not.to.be.empty(); const { config } = response.body; expect(config).to.not.be.empty(); diff --git a/test/api_integration/apis/guided_onboarding/get_guides.ts b/test/api_integration/apis/guided_onboarding/get_guides.ts index bc4a4628317dc..029a4b2eb33b7 100644 --- a/test/api_integration/apis/guided_onboarding/get_guides.ts +++ b/test/api_integration/apis/guided_onboarding/get_guides.ts @@ -15,6 +15,7 @@ import { } from '@kbn/guided-onboarding-plugin/server/saved_objects/guided_setup'; import { appSearchGuideId } from '@kbn/enterprise-search-plugin/common/guided_onboarding/search_guide_config'; import { API_BASE_PATH } from '@kbn/guided-onboarding-plugin/common'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; import { createGuides } from './helpers'; @@ -32,7 +33,10 @@ export default function testGetGuidesState({ getService }: FtrProviderContext) { }); it('returns an empty array if no guides', async () => { - const response = await supertest.get(getGuidesPath).expect(200); + const response = await supertest + .get(getGuidesPath) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body).not.to.be.empty(); expect(response.body.state).to.be.empty(); }); @@ -42,7 +46,10 @@ export default function testGetGuidesState({ getService }: FtrProviderContext) { testGuideStep1ActiveState, { ...testGuideStep1ActiveState, guideId: appSearchGuideId }, ]); - const response = await supertest.get(getGuidesPath).expect(200); + const response = await supertest + .get(getGuidesPath) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body).not.to.be.empty(); expect(response.body.state).to.eql([ testGuideStep1ActiveState, diff --git a/test/api_integration/apis/guided_onboarding/get_state.ts b/test/api_integration/apis/guided_onboarding/get_state.ts index 54118d993d139..68e291b75dc5e 100644 --- a/test/api_integration/apis/guided_onboarding/get_state.ts +++ b/test/api_integration/apis/guided_onboarding/get_state.ts @@ -19,6 +19,7 @@ import { pluginStateSavedObjectsType, } from '@kbn/guided-onboarding-plugin/server/saved_objects/guided_setup'; import { API_BASE_PATH } from '@kbn/guided-onboarding-plugin/common'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; import { createPluginState, createGuides } from './helpers'; @@ -42,7 +43,10 @@ export default function testGetState({ getService }: FtrProviderContext) { }); it('returns the default plugin state if no saved objects', async () => { - const response = await supertest.get(getStatePath).expect(200); + const response = await supertest + .get(getStatePath) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body.pluginState).not.to.be.empty(); expect(response.body).to.eql({ pluginState: mockPluginStateNotStarted, @@ -59,7 +63,10 @@ export default function testGetState({ getService }: FtrProviderContext) { creationDate: new Date().toISOString(), }); - const response = await supertest.get(getStatePath).expect(200); + const response = await supertest + .get(getStatePath) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body.pluginState).not.to.be.empty(); expect(response.body).to.eql({ pluginState: { @@ -80,7 +87,10 @@ export default function testGetState({ getService }: FtrProviderContext) { creationDate: new Date().toISOString(), }); - const response = await supertest.get(getStatePath).expect(200); + const response = await supertest + .get(getStatePath) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body.pluginState).not.to.be.empty(); expect(response.body).to.eql({ pluginState: { @@ -97,7 +107,10 @@ export default function testGetState({ getService }: FtrProviderContext) { creationDate: getDateXDaysAgo(40), }); - const response = await supertest.get(getStatePath).expect(200); + const response = await supertest + .get(getStatePath) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body.pluginState).not.to.be.empty(); expect(response.body.pluginState.isActivePeriod).to.eql(false); }); @@ -109,7 +122,10 @@ export default function testGetState({ getService }: FtrProviderContext) { creationDate: getDateXDaysAgo(20), }); - const response = await supertest.get(getStatePath).expect(200); + const response = await supertest + .get(getStatePath) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body.pluginState).not.to.be.empty(); expect(response.body.pluginState.isActivePeriod).to.eql(true); }); @@ -124,7 +140,10 @@ export default function testGetState({ getService }: FtrProviderContext) { creationDate: new Date().toISOString(), }); - const response = await supertest.get(getStatePath).expect(200); + const response = await supertest + .get(getStatePath) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(response.body.pluginState.activeGuide.params).to.eql(testGuideParams); }); }); diff --git a/test/api_integration/apis/guided_onboarding/put_state.ts b/test/api_integration/apis/guided_onboarding/put_state.ts index cf3b7b7bfbc3a..c6682be76d528 100644 --- a/test/api_integration/apis/guided_onboarding/put_state.ts +++ b/test/api_integration/apis/guided_onboarding/put_state.ts @@ -23,6 +23,7 @@ import { import { testGuideId } from '@kbn/guided-onboarding'; import { appSearchGuideId } from '@kbn/enterprise-search-plugin/common/guided_onboarding/search_guide_config'; import { API_BASE_PATH } from '@kbn/guided-onboarding-plugin/common'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; import { createGuides, createPluginState } from './helpers'; @@ -43,6 +44,7 @@ export default function testPutState({ getService }: FtrProviderContext) { const response = await supertest .put(putStatePath) .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ status: 'in_progress', }) @@ -72,6 +74,7 @@ export default function testPutState({ getService }: FtrProviderContext) { const response = await supertest .put(putStatePath) .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ status: 'in_progress', }) @@ -96,6 +99,7 @@ export default function testPutState({ getService }: FtrProviderContext) { await supertest .put(putStatePath) .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ guide: testGuideStep1ActiveState, }) @@ -115,6 +119,7 @@ export default function testPutState({ getService }: FtrProviderContext) { await supertest .put(putStatePath) .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ guide: testGuideNotActiveState, }) @@ -139,6 +144,7 @@ export default function testPutState({ getService }: FtrProviderContext) { await supertest .put(putStatePath) .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ guide: { ...testGuideStep1ActiveState, @@ -175,6 +181,7 @@ export default function testPutState({ getService }: FtrProviderContext) { await supertest .put(putStatePath) .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ guide: { ...testGuideStep2ActiveState, diff --git a/test/api_integration/apis/home/sample_data.ts b/test/api_integration/apis/home/sample_data.ts index 4778acc6f4d7a..d290f772fdec5 100644 --- a/test/api_integration/apis/home/sample_data.ts +++ b/test/api_integration/apis/home/sample_data.ts @@ -10,6 +10,7 @@ import expect from '@kbn/expect'; import type { Response } from 'superagent'; import differenceInMilliseconds from 'date-fns/differenceInMilliseconds'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -43,7 +44,11 @@ export default function ({ getService }: FtrProviderContext) { describe(`list in the ${space} space (before install)`, () => { it('should return list of sample data sets with installed status', async () => { - const resp = await supertest.get(apiPath).set('kbn-xsrf', 'kibana').expect(200); + const resp = await supertest + .get(apiPath) + .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); const flightsData = findFlightsData(resp); expect(flightsData.status).to.be('not_installed'); @@ -58,13 +63,18 @@ export default function ({ getService }: FtrProviderContext) { describe(`install in the ${space} space`, () => { it('should return 404 if id does not match any sample data sets', async () => { - await supertest.post(`${apiPath}/xxxx`).set('kbn-xsrf', 'kibana').expect(404); + await supertest + .post(`${apiPath}/xxxx`) + .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(404); }); it('should return 200 if success', async () => { const resp = await supertest .post(`${apiPath}/flights`) .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body).to.eql({ @@ -97,7 +107,10 @@ export default function ({ getService }: FtrProviderContext) { it('should load elasticsearch index containing sample data with dates relative to now parameter', async () => { const nowString = `2000-01-01T00:00:00`; - await supertest.post(`${apiPath}/flights?now=${nowString}`).set('kbn-xsrf', 'kibana'); + await supertest + .post(`${apiPath}/flights?now=${nowString}`) + .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); const resp = await es.search<{ timestamp: string }>({ index: 'kibana_sample_data_flights', @@ -115,7 +128,11 @@ export default function ({ getService }: FtrProviderContext) { describe(`list in the ${space} space (after install)`, () => { it('should return list of sample data sets with installed status', async () => { - const resp = await supertest.get(apiPath).set('kbn-xsrf', 'kibana').expect(200); + const resp = await supertest + .get(apiPath) + .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); const flightsData = findFlightsData(resp); expect(flightsData.status).to.be('installed'); @@ -143,7 +160,12 @@ export default function ({ getService }: FtrProviderContext) { describe(`uninstall in the ${space} space`, () => { it('should uninstall sample data', async () => { // Note: the second time this happens, the index has already been removed, but the uninstall works anyway - await supertest.delete(`${apiPath}/flights`).set('kbn-xsrf', 'kibana').expect(204); + await supertest + .delete(`${apiPath}/flights`) + .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(204); }); it('should remove elasticsearch index containing sample data', async () => { @@ -156,7 +178,11 @@ export default function ({ getService }: FtrProviderContext) { describe(`list in the ${space} space (after uninstall)`, () => { it('should return list of sample data sets with installed status', async () => { - const resp = await supertest.get(apiPath).set('kbn-xsrf', 'kibana').expect(200); + const resp = await supertest + .get(apiPath) + .set('kbn-xsrf', 'kibana') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); const flightsData = findFlightsData(resp); expect(flightsData.status).to.be('not_installed'); diff --git a/test/api_integration/apis/kql_telemetry/kql_telemetry.ts b/test/api_integration/apis/kql_telemetry/kql_telemetry.ts index c3e0d20d276b4..7d3224c0306a5 100644 --- a/test/api_integration/apis/kql_telemetry/kql_telemetry.ts +++ b/test/api_integration/apis/kql_telemetry/kql_telemetry.ts @@ -11,7 +11,10 @@ import expect from '@kbn/expect'; import { get } from 'lodash'; import { ANALYTICS_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import { KQL_TELEMETRY_ROUTE_LATEST_VERSION } from '@kbn/data-plugin/common'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -36,6 +39,7 @@ export default function ({ getService }: FtrProviderContext) { .post('/internal/kql_opt_in_stats') .set('content-type', 'application/json') .set(ELASTIC_HTTP_VERSION_HEADER, KQL_TELEMETRY_ROUTE_LATEST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ opt_in: true }) .expect(200); @@ -55,6 +59,7 @@ export default function ({ getService }: FtrProviderContext) { .post('/internal/kql_opt_in_stats') .set('content-type', 'application/json') .set(ELASTIC_HTTP_VERSION_HEADER, KQL_TELEMETRY_ROUTE_LATEST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ opt_in: false }) .expect(200); @@ -74,6 +79,7 @@ export default function ({ getService }: FtrProviderContext) { .post('/internal/kql_opt_in_stats') .set('content-type', 'application/json') .set(ELASTIC_HTTP_VERSION_HEADER, KQL_TELEMETRY_ROUTE_LATEST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ opt_in: true }) .expect('Content-Type', /json/) .expect(200) @@ -87,6 +93,7 @@ export default function ({ getService }: FtrProviderContext) { .post('/internal/kql_opt_in_stats') .set('content-type', 'application/json') .set(ELASTIC_HTTP_VERSION_HEADER, KQL_TELEMETRY_ROUTE_LATEST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ opt_in: false }) .expect('Content-Type', /json/) .expect(200) @@ -101,6 +108,7 @@ export default function ({ getService }: FtrProviderContext) { .post('/internal/kql_opt_in_stats') .set('content-type', 'application/json') .set(ELASTIC_HTTP_VERSION_HEADER, KQL_TELEMETRY_ROUTE_LATEST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ opt_in: 'notabool' }) .expect(400), supertest diff --git a/test/api_integration/apis/saved_objects/bulk_create.ts b/test/api_integration/apis/saved_objects/bulk_create.ts index 80dbbc14e3b50..3e1ad63e3b6ed 100644 --- a/test/api_integration/apis/saved_objects/bulk_create.ts +++ b/test/api_integration/apis/saved_objects/bulk_create.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -47,6 +48,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with individual responses', async () => await supertest .post(`/s/${SPACE_ID}/api/saved_objects/_bulk_create`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(BULK_REQUESTS) .expect(200) .then((resp) => { @@ -87,6 +89,7 @@ export default function ({ getService }: FtrProviderContext) { it('should not return raw id when object id is unspecified', async () => await supertest .post(`/s/${SPACE_ID}/api/saved_objects/_bulk_create`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(BULK_REQUESTS.map(({ id, ...rest }) => rest)) .expect(200) .then((resp) => { diff --git a/test/api_integration/apis/saved_objects/bulk_delete.ts b/test/api_integration/apis/saved_objects/bulk_delete.ts index f5c191e8dabe7..68b2862ff5c8b 100644 --- a/test/api_integration/apis/saved_objects/bulk_delete.ts +++ b/test/api_integration/apis/saved_objects/bulk_delete.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -29,6 +30,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with individual responses when deleting many docs', async () => await supertest .post(`/api/saved_objects/_bulk_delete`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([ { type: 'visualization', @@ -60,6 +62,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return generic 404 when deleting an unknown doc', async () => await supertest .post(`/api/saved_objects/_bulk_delete`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([{ type: 'dashboard', id: 'not-a-real-id' }]) .expect(200) .then((resp) => { @@ -82,6 +85,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return the result of deleting valid and invalid objects in the same request', async () => await supertest .post(`/api/saved_objects/_bulk_delete`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([ { type: 'visualization', id: 'not-a-real-vis-id' }, { diff --git a/test/api_integration/apis/saved_objects/bulk_get.ts b/test/api_integration/apis/saved_objects/bulk_get.ts index 37bb4f17b530d..019297455bdd0 100644 --- a/test/api_integration/apis/saved_objects/bulk_get.ts +++ b/test/api_integration/apis/saved_objects/bulk_get.ts @@ -9,6 +9,7 @@ import { MAIN_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -72,6 +73,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with individual responses', async () => await supertest .post(`/api/saved_objects/_bulk_get`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(BULK_REQUESTS) .expect(200) .then((resp) => { @@ -147,6 +149,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with individual responses that include the managed property of each object', async () => await supertest .post(`/api/saved_objects/_bulk_get`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(BULK_REQUESTS_MANAGED) .expect(200) .then((resp) => { @@ -281,6 +284,7 @@ export default function ({ getService }: FtrProviderContext) { const { body } = await supertest .post(`/api/saved_objects/_bulk_get`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([ { type: 'config', diff --git a/test/api_integration/apis/saved_objects/bulk_update.ts b/test/api_integration/apis/saved_objects/bulk_update.ts index 332cd84926922..2233dbdde641d 100644 --- a/test/api_integration/apis/saved_objects/bulk_update.ts +++ b/test/api_integration/apis/saved_objects/bulk_update.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import _ from 'lodash'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -30,6 +31,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200', async () => { const response = await supertest .put(`/api/saved_objects/_bulk_update`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([ { type: 'visualization', @@ -98,6 +100,7 @@ export default function ({ getService }: FtrProviderContext) { const response = await supertest .put(`/api/saved_objects/_bulk_update`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([ { type: 'visualization', @@ -160,6 +163,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .put(`/api/saved_objects/_bulk_update`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([ { type: 'visualization', @@ -191,6 +195,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return a generic 404', async () => { const response = await supertest .put(`/api/saved_objects/_bulk_update`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([ { type: 'visualization', diff --git a/test/api_integration/apis/saved_objects/create.ts b/test/api_integration/apis/saved_objects/create.ts index 40b1a3617f1fa..1778719fbc502 100644 --- a/test/api_integration/apis/saved_objects/create.ts +++ b/test/api_integration/apis/saved_objects/create.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -30,6 +31,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200', async () => { await supertest .post(`/api/saved_objects/visualization`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ attributes: { title: 'My favorite vis', @@ -72,6 +74,7 @@ export default function ({ getService }: FtrProviderContext) { it('result should not be updated to the latest Kibana version if there are no migrations', async () => { await supertest .post(`/api/saved_objects/visualization`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ attributes: { title: 'My favorite vis', diff --git a/test/api_integration/apis/saved_objects/delete.ts b/test/api_integration/apis/saved_objects/delete.ts index ba2b66548a558..4630943680f3b 100644 --- a/test/api_integration/apis/saved_objects/delete.ts +++ b/test/api_integration/apis/saved_objects/delete.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -29,6 +30,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 when deleting a doc', async () => await supertest .delete(`/api/saved_objects/dashboard/be3733a0-9efe-11e7-acb3-3dab96693fab`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({}); @@ -37,6 +39,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return generic 404 when deleting an unknown doc', async () => await supertest .delete(`/api/saved_objects/dashboard/not-a-real-id`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404) .then((resp) => { expect(resp.body).to.eql({ diff --git a/test/api_integration/apis/saved_objects/delete_unknown_types.ts b/test/api_integration/apis/saved_objects/delete_unknown_types.ts index e61c7d84bc580..b03f6eebc3cfb 100644 --- a/test/api_integration/apis/saved_objects/delete_unknown_types.ts +++ b/test/api_integration/apis/saved_objects/delete_unknown_types.ts @@ -12,6 +12,7 @@ import { MAIN_SAVED_OBJECT_INDEX, ANALYTICS_SAVED_OBJECT_INDEX, } from '@kbn/core-saved-objects-server'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); @@ -72,6 +73,7 @@ export default function ({ getService }: FtrProviderContext) { .post(`/internal/saved_objects/deprecations/_delete_unknown_types`) .send({}) .set('kbn-xsrf', 'true') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({ success: true }); diff --git a/test/api_integration/apis/saved_objects/find.ts b/test/api_integration/apis/saved_objects/find.ts index 4664171879813..fb100210b19ac 100644 --- a/test/api_integration/apis/saved_objects/find.ts +++ b/test/api_integration/apis/saved_objects/find.ts @@ -11,6 +11,7 @@ import { sortBy } from 'lodash'; import { MAIN_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import expect from '@kbn/expect'; import { SavedObject } from '@kbn/core/server'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -47,6 +48,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with individual responses', async () => await supertest .get(`/s/${SPACE_ID}/api/saved_objects/_find?type=visualization&fields=title`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body.saved_objects.map((so: { id: string }) => so.id)).to.eql([ @@ -68,6 +70,7 @@ export default function ({ getService }: FtrProviderContext) { const { body } = await supertest .get(`/s/${SPACE_ID}/api/saved_objects/_find?type=config`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(body.saved_objects.map((so: { id: string }) => so.id)).to.eql(['7.0.0-alpha1']); @@ -81,6 +84,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with empty response', async () => await supertest .get(`/s/${SPACE_ID}/api/saved_objects/_find?type=wigwags`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({ @@ -97,6 +101,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with empty response', async () => await supertest .get(`/s/${SPACE_ID}/api/saved_objects/_find?type=visualization&page=100&per_page=100`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({ @@ -112,6 +117,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with empty response', async () => await supertest .get(`/s/${SPACE_ID}/api/saved_objects/_find?type=url&search_fields=a`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({ @@ -127,6 +133,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with empty response', async () => await supertest .get(`/s/${SPACE_ID}/api/saved_objects/_find?type=visualization&namespaces=foo`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({ @@ -142,6 +149,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with individual responses', async () => await supertest .get(`/api/saved_objects/_find?type=visualization&fields=title&namespaces=${SPACE_ID}`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect( @@ -161,6 +169,7 @@ export default function ({ getService }: FtrProviderContext) { .get( `/api/saved_objects/_find?type=visualization&fields=title&fields=originId&namespaces=*` ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const knownDocuments = resp.body.saved_objects.filter((so: { namespaces: string[] }) => @@ -187,6 +196,7 @@ export default function ({ getService }: FtrProviderContext) { .get( `/s/${SPACE_ID}/api/saved_objects/_find?type=visualization&filter=visualization.attributes.title:"Count of requests"` ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body.saved_objects.map((so: { id: string }) => so.id)).to.eql([ @@ -199,6 +209,7 @@ export default function ({ getService }: FtrProviderContext) { .get( `/s/${SPACE_ID}/api/saved_objects/_find?type=visualization&filter=dashboard.attributes.title:foo` ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(400) .then((resp) => { expect(resp.body).to.eql({ @@ -213,6 +224,7 @@ export default function ({ getService }: FtrProviderContext) { .get( `/s/${SPACE_ID}/api/saved_objects/_find?type=dashboard&filter=dashboard.attributes.title:foo { expect(resp.body.error).to.be('Bad Request'); @@ -231,6 +243,7 @@ export default function ({ getService }: FtrProviderContext) { }) )}` ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({ @@ -255,6 +268,7 @@ export default function ({ getService }: FtrProviderContext) { }) )}` ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(400) .then((resp) => { expect(resp.body).to.eql({ @@ -279,6 +293,7 @@ export default function ({ getService }: FtrProviderContext) { }) )}` ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(400) .then((resp) => { expect(resp.body).to.eql({ @@ -311,6 +326,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'visualization', has_reference: JSON.stringify({ type: 'ref-type', id: 'ref-1' }), }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const objects = resp.body.saved_objects; @@ -332,6 +348,7 @@ export default function ({ getService }: FtrProviderContext) { ]), has_reference_operator: 'OR', }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const objects = resp.body.saved_objects; @@ -354,6 +371,7 @@ export default function ({ getService }: FtrProviderContext) { ]), has_reference_operator: 'AND', }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const objects = resp.body.saved_objects; @@ -383,6 +401,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'visualization', has_no_reference: JSON.stringify({ type: 'ref-type', id: 'ref-1' }), }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const objects = resp.body.saved_objects; @@ -405,6 +424,7 @@ export default function ({ getService }: FtrProviderContext) { ]), has_no_reference_operator: 'OR', }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const objects = resp.body.saved_objects; @@ -428,6 +448,7 @@ export default function ({ getService }: FtrProviderContext) { ]), has_no_reference_operator: 'AND', }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const objects = resp.body.saved_objects; @@ -462,6 +483,7 @@ export default function ({ getService }: FtrProviderContext) { has_reference: JSON.stringify({ type: 'ref-type', id: 'ref-1' }), has_no_reference: JSON.stringify({ type: 'ref-type', id: 'ref-2' }), }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const objects = resp.body.saved_objects; @@ -478,6 +500,7 @@ export default function ({ getService }: FtrProviderContext) { has_reference: JSON.stringify({ type: 'ref-type', id: 'ref-1' }), has_no_reference: JSON.stringify({ type: 'ref-type', id: 'ref-1' }), }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const objects = resp.body.saved_objects; @@ -509,6 +532,7 @@ export default function ({ getService }: FtrProviderContext) { search_fields: 'title', search: 'my-vis*', }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const savedObjects = resp.body.saved_objects; @@ -525,6 +549,7 @@ export default function ({ getService }: FtrProviderContext) { search_fields: 'title', search: 'my-*', }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const savedObjects = resp.body.saved_objects; @@ -541,6 +566,7 @@ export default function ({ getService }: FtrProviderContext) { search_fields: 'title', search: 'some*vi*', }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const savedObjects = resp.body.saved_objects; @@ -557,6 +583,7 @@ export default function ({ getService }: FtrProviderContext) { search_fields: 'title', search: 'visuali*', }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { const savedObjects = resp.body.saved_objects; diff --git a/test/api_integration/apis/saved_objects/get.ts b/test/api_integration/apis/saved_objects/get.ts index 2f03a8d031a1e..d745c0ea2d585 100644 --- a/test/api_integration/apis/saved_objects/get.ts +++ b/test/api_integration/apis/saved_objects/get.ts @@ -9,6 +9,7 @@ import { MAIN_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -37,6 +38,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200', async () => await supertest .get(`/api/saved_objects/visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({ @@ -74,6 +76,7 @@ export default function ({ getService }: FtrProviderContext) { it("should return an object's managed property", async () => { await supertest .get(`/api/saved_objects/dashboard/11fb046d-0e50-48a0-a410-a744b82cbffd`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { expect(resp.body).to.eql({ @@ -126,7 +129,10 @@ export default function ({ getService }: FtrProviderContext) { }, }); - const { body } = await supertest.get(`/api/saved_objects/config/7.0.0-alpha1`).expect(200); + const { body } = await supertest + .get(`/api/saved_objects/config/7.0.0-alpha1`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(body.coreMigrationVersion).to.be.ok(); expect(body.coreMigrationVersion).not.to.be('7.0.0'); @@ -138,6 +144,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return same generic error as when index does not exist', async () => await supertest .get(`/api/saved_objects/visualization/foobar`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404) .then((resp) => { expect(resp.body).to.eql({ diff --git a/test/api_integration/apis/saved_objects/resolve.ts b/test/api_integration/apis/saved_objects/resolve.ts index b538216e0ec19..6ef773b2c170f 100644 --- a/test/api_integration/apis/saved_objects/resolve.ts +++ b/test/api_integration/apis/saved_objects/resolve.ts @@ -9,6 +9,7 @@ import { MAIN_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -32,6 +33,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200', async () => await supertest .get(`/api/saved_objects/resolve/visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { resp.body.saved_object.updated_at = '2015-01-01T00:00:00.000Z'; @@ -85,6 +87,7 @@ export default function ({ getService }: FtrProviderContext) { const { body } = await supertest .get(`/api/saved_objects/resolve/config/7.0.0-alpha1`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(body.saved_object.coreMigrationVersion).to.be.ok(); @@ -97,6 +100,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return same generic error as when index does not exist', async () => await supertest .get(`/api/saved_objects/resolve/visualization/foobar`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404) .then((resp) => { expect(resp.body).to.eql({ diff --git a/test/api_integration/apis/saved_objects/update.ts b/test/api_integration/apis/saved_objects/update.ts index e04072f0bae0e..744704a7d3537 100644 --- a/test/api_integration/apis/saved_objects/update.ts +++ b/test/api_integration/apis/saved_objects/update.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -33,6 +34,7 @@ export default function ({ getService }: FtrProviderContext) { title: 'My second favorite vis', }, }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp) => { // loose uuid validation @@ -66,6 +68,7 @@ export default function ({ getService }: FtrProviderContext) { title: 'foo', }, }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body).not.to.have.property('references'); @@ -82,6 +85,7 @@ export default function ({ getService }: FtrProviderContext) { }, references, }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body).to.have.property('references'); @@ -97,6 +101,7 @@ export default function ({ getService }: FtrProviderContext) { }, references: [], }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body).to.have.property('references'); @@ -115,10 +120,12 @@ export default function ({ getService }: FtrProviderContext) { description: 'upserted description', }, }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); const { body: upserted } = await supertest .get(`/api/saved_objects/visualization/upserted-viz`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(upserted.attributes).to.eql({ @@ -137,10 +144,12 @@ export default function ({ getService }: FtrProviderContext) { version: 9000, }, }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); const { body: notUpserted } = await supertest .get(`/api/saved_objects/visualization/upserted-viz`) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(notUpserted.attributes).to.eql({ @@ -158,6 +167,7 @@ export default function ({ getService }: FtrProviderContext) { title: 'My second favorite vis', }, }) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404) .then((resp) => { expect(resp.body).eql({ diff --git a/test/api_integration/apis/saved_objects_management/bulk_delete.ts b/test/api_integration/apis/saved_objects_management/bulk_delete.ts index 5c71b982307f6..c1a862eb75b12 100644 --- a/test/api_integration/apis/saved_objects_management/bulk_delete.ts +++ b/test/api_integration/apis/saved_objects_management/bulk_delete.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import type { Response } from 'supertest'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -52,6 +53,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 for an existing object', async () => await supertest .post(endpoint) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([validObject]) .expect(200) .then((response: Response) => { @@ -62,6 +64,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return error for invalid object type', async () => await supertest .post(endpoint) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([invalidObject]) .expect(200) .then((response: Response) => { @@ -72,6 +75,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return mix of successes and errors', async () => await supertest .post(endpoint) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([validObject, invalidObject]) .expect(200) .then((response: Response) => { diff --git a/test/api_integration/apis/saved_objects_management/bulk_get.ts b/test/api_integration/apis/saved_objects_management/bulk_get.ts index 0acbb03fa7d53..01a05ff48758d 100644 --- a/test/api_integration/apis/saved_objects_management/bulk_get.ts +++ b/test/api_integration/apis/saved_objects_management/bulk_get.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import type { Response } from 'supertest'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -53,6 +54,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 for object that exists and inject metadata', async () => await supertest .post(URL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([validObject]) .expect(200) .then((response: Response) => { @@ -63,6 +65,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return error for invalid object type', async () => await supertest .post(URL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([invalidObject]) .expect(200) .then((response: Response) => { @@ -73,6 +76,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return mix of successes and errors', async () => await supertest .post(URL) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send([validObject, invalidObject]) .expect(200) .then((response: Response) => { diff --git a/test/api_integration/apis/saved_objects_management/find.ts b/test/api_integration/apis/saved_objects_management/find.ts index 539fb10c7ee09..5d5c953065eac 100644 --- a/test/api_integration/apis/saved_objects_management/find.ts +++ b/test/api_integration/apis/saved_objects_management/find.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import { Response } from 'supertest'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -39,6 +40,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with individual responses', async () => await supertest .get('/api/kibana/management/saved_objects/_find?type=visualization') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp: Response) => { expect(resp.body.saved_objects.map((so: { id: string }) => so.id)).to.eql([ @@ -50,6 +52,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 200 with empty response', async () => await supertest .get('/api/kibana/management/saved_objects/_find?type=wigwags') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp: Response) => { expect(resp.body).to.eql({ @@ -67,6 +70,7 @@ export default function ({ getService }: FtrProviderContext) { .get( '/api/kibana/management/saved_objects/_find?type=visualization&page=100&perPage=100' ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp: Response) => { expect(resp.body).to.eql({ @@ -82,6 +86,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 400 when using searchFields', async () => await supertest .get('/api/kibana/management/saved_objects/_find?type=url&searchFields=a') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(400) .then((resp: Response) => { expect(resp.body).to.eql({ @@ -107,6 +112,7 @@ export default function ({ getService }: FtrProviderContext) { it('search for a reference', async () => { await supertest .get('/api/kibana/management/saved_objects/_find') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ type: 'visualization', hasReference: JSON.stringify({ type: 'ref-type', id: 'ref-1' }), @@ -121,6 +127,7 @@ export default function ({ getService }: FtrProviderContext) { it('search for multiple references with OR operator', async () => { await supertest .get('/api/kibana/management/saved_objects/_find') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ type: 'visualization', hasReference: JSON.stringify([ @@ -143,6 +150,7 @@ export default function ({ getService }: FtrProviderContext) { it('search for multiple references with AND operator', async () => { await supertest .get('/api/kibana/management/saved_objects/_find') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ type: 'visualization', hasReference: JSON.stringify([ @@ -163,6 +171,7 @@ export default function ({ getService }: FtrProviderContext) { it('sort objects by "type" in "asc" order', async () => { await supertest .get('/api/kibana/management/saved_objects/_find') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ type: ['visualization', 'dashboard'], sortField: 'type', @@ -179,6 +188,7 @@ export default function ({ getService }: FtrProviderContext) { it('sort objects by "type" in "desc" order', async () => { await supertest .get('/api/kibana/management/saved_objects/_find') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query({ type: ['visualization', 'dashboard'], sortField: 'type', @@ -210,6 +220,7 @@ export default function ({ getService }: FtrProviderContext) { it('should inject meta attributes for searches', async () => await supertest .get('/api/kibana/management/saved_objects/_find?type=search') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp: Response) => { expect(resp.body.saved_objects).to.have.length(1); @@ -228,6 +239,7 @@ export default function ({ getService }: FtrProviderContext) { it('should inject meta attributes for dashboards', async () => await supertest .get('/api/kibana/management/saved_objects/_find?type=dashboard') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp: Response) => { expect(resp.body.saved_objects).to.have.length(1); @@ -246,6 +258,7 @@ export default function ({ getService }: FtrProviderContext) { it('should inject meta attributes for visualizations', async () => await supertest .get('/api/kibana/management/saved_objects/_find?type=visualization') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp: Response) => { expect(resp.body.saved_objects).to.have.length(2); @@ -274,6 +287,7 @@ export default function ({ getService }: FtrProviderContext) { it('should inject meta attributes for index patterns', async () => await supertest .get('/api/kibana/management/saved_objects/_find?type=index-pattern') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((resp: Response) => { expect(resp.body.saved_objects).to.have.length(1); diff --git a/test/api_integration/apis/saved_objects_management/relationships.ts b/test/api_integration/apis/saved_objects_management/relationships.ts index 9245c84674458..15b7ee51d40af 100644 --- a/test/api_integration/apis/saved_objects_management/relationships.ts +++ b/test/api_integration/apis/saved_objects_management/relationships.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import { schema } from '@kbn/config-schema'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -67,6 +68,7 @@ export default function ({ getService }: FtrProviderContext) { it('should validate search response schema', async () => { const resp = await supertest .get(relationshipsUrl('search', '960372e0-3224-11e8-a572-ffca06da1357')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(() => { @@ -77,6 +79,7 @@ export default function ({ getService }: FtrProviderContext) { it('should work for searches', async () => { const resp = await supertest .get(relationshipsUrl('search', '960372e0-3224-11e8-a572-ffca06da1357')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.relations).to.eql([ @@ -119,6 +122,7 @@ export default function ({ getService }: FtrProviderContext) { .get( relationshipsUrl('search', '960372e0-3224-11e8-a572-ffca06da1357', ['visualization']) ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.relations).to.eql([ @@ -159,6 +163,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 404 if search finds no results', async () => { await supertest .get(relationshipsUrl('search', 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404); }); }); @@ -167,6 +172,7 @@ export default function ({ getService }: FtrProviderContext) { it('should validate dashboard response schema', async () => { const resp = await supertest .get(relationshipsUrl('dashboard', 'b70c7ae0-3224-11e8-a572-ffca06da1357')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(() => { @@ -177,6 +183,7 @@ export default function ({ getService }: FtrProviderContext) { it('should work for dashboards', async () => { const resp = await supertest .get(relationshipsUrl('dashboard', 'b70c7ae0-3224-11e8-a572-ffca06da1357')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.relations).to.eql([ @@ -216,6 +223,7 @@ export default function ({ getService }: FtrProviderContext) { it('should filter based on savedObjectTypes', async () => { const resp = await supertest .get(relationshipsUrl('dashboard', 'b70c7ae0-3224-11e8-a572-ffca06da1357', ['search'])) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.relations).to.eql([ @@ -255,6 +263,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 404 if dashboard finds no results', async () => { await supertest .get(relationshipsUrl('dashboard', 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404); }); }); @@ -263,6 +272,7 @@ export default function ({ getService }: FtrProviderContext) { it('should validate visualization response schema', async () => { const resp = await supertest .get(relationshipsUrl('visualization', 'a42c0580-3224-11e8-a572-ffca06da1357')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(() => { @@ -273,6 +283,7 @@ export default function ({ getService }: FtrProviderContext) { it('should work for visualizations', async () => { const resp = await supertest .get(relationshipsUrl('visualization', 'a42c0580-3224-11e8-a572-ffca06da1357')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.relations).to.eql([ @@ -314,6 +325,7 @@ export default function ({ getService }: FtrProviderContext) { .get( relationshipsUrl('visualization', 'a42c0580-3224-11e8-a572-ffca06da1357', ['search']) ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.relations).to.eql([ @@ -338,6 +350,7 @@ export default function ({ getService }: FtrProviderContext) { it('should return 404 if visualizations finds no results', async () => { await supertest .get(relationshipsUrl('visualization', 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404); }); }); @@ -346,6 +359,7 @@ export default function ({ getService }: FtrProviderContext) { it('should validate index-pattern response schema', async () => { const resp = await supertest .get(relationshipsUrl('index-pattern', '8963ca30-3224-11e8-a572-ffca06da1357')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(() => { @@ -356,6 +370,7 @@ export default function ({ getService }: FtrProviderContext) { it('should work for index patterns', async () => { const resp = await supertest .get(relationshipsUrl('index-pattern', '8963ca30-3224-11e8-a572-ffca06da1357')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.relations).to.eql([ @@ -397,6 +412,7 @@ export default function ({ getService }: FtrProviderContext) { .get( relationshipsUrl('index-pattern', '8963ca30-3224-11e8-a572-ffca06da1357', ['search']) ) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.relations).to.eql([ @@ -421,13 +437,17 @@ export default function ({ getService }: FtrProviderContext) { it('should return 404 if index pattern finds no results', async () => { await supertest .get(relationshipsUrl('index-pattern', 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404); }); }); describe('invalid references', () => { it('should validate the response schema', async () => { - const resp = await supertest.get(relationshipsUrl('dashboard', 'invalid-refs')).expect(200); + const resp = await supertest + .get(relationshipsUrl('dashboard', 'invalid-refs')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(() => { responseSchema.validate(resp.body); @@ -435,7 +455,10 @@ export default function ({ getService }: FtrProviderContext) { }); it('should return the invalid relations', async () => { - const resp = await supertest.get(relationshipsUrl('dashboard', 'invalid-refs')).expect(200); + const resp = await supertest + .get(relationshipsUrl('dashboard', 'invalid-refs')) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(200); expect(resp.body).to.eql({ invalidRelations: [ diff --git a/test/api_integration/apis/saved_objects_management/scroll_count.ts b/test/api_integration/apis/saved_objects_management/scroll_count.ts index dcaf1fedcd071..761f2aea4184a 100644 --- a/test/api_integration/apis/saved_objects_management/scroll_count.ts +++ b/test/api_integration/apis/saved_objects_management/scroll_count.ts @@ -8,6 +8,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; const apiUrl = '/api/kibana/management/saved_objects/scroll/counts'; @@ -36,6 +37,7 @@ export default function ({ getService }: FtrProviderContext) { it('returns the count for each included types', async () => { const res = await supertest .post(apiUrl) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ typesToInclude: defaultTypes, }) @@ -52,6 +54,7 @@ export default function ({ getService }: FtrProviderContext) { it('only returns count for types to include', async () => { const res = await supertest .post(apiUrl) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ typesToInclude: ['dashboard', 'search'], }) @@ -66,6 +69,7 @@ export default function ({ getService }: FtrProviderContext) { it('filters on title when `searchString` is provided', async () => { const res = await supertest .post(apiUrl) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ typesToInclude: defaultTypes, searchString: 'Amazing', @@ -83,6 +87,7 @@ export default function ({ getService }: FtrProviderContext) { it('includes all requested types even when none match the search', async () => { const res = await supertest .post(apiUrl) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ typesToInclude: ['dashboard', 'search', 'visualization'], searchString: 'nothing-will-match', @@ -139,6 +144,7 @@ export default function ({ getService }: FtrProviderContext) { it('returns the correct count for each included types', async () => { const res = await supertest .post(apiUrl) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ typesToInclude: ['visualization'], }) diff --git a/test/api_integration/apis/saved_queries/saved_queries.ts b/test/api_integration/apis/saved_queries/saved_queries.ts index 679020430b877..f211dfc06da7f 100644 --- a/test/api_integration/apis/saved_queries/saved_queries.ts +++ b/test/api_integration/apis/saved_queries/saved_queries.ts @@ -8,7 +8,10 @@ */ import expect from '@kbn/expect'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { SavedQueryAttributes, SAVED_QUERY_BASE_URL } from '@kbn/data-plugin/common'; import { FtrProviderContext } from '../../ftr_provider_context'; @@ -33,33 +36,46 @@ export default function ({ getService }: FtrProviderContext) { supertest .post(`${SAVED_QUERY_BASE_URL}/_create`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(query); const updateQuery = (id: string, query: Partial = mockSavedQuery) => supertest .put(`${SAVED_QUERY_BASE_URL}/${id}`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(query); const deleteQuery = (id: string) => - supertest.delete(`${SAVED_QUERY_BASE_URL}/${id}`).set(ELASTIC_HTTP_VERSION_HEADER, '1'); + supertest + .delete(`${SAVED_QUERY_BASE_URL}/${id}`) + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); const getQuery = (id: string) => - supertest.get(`${SAVED_QUERY_BASE_URL}/${id}`).set(ELASTIC_HTTP_VERSION_HEADER, '1'); + supertest + .get(`${SAVED_QUERY_BASE_URL}/${id}`) + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); const findQueries = (options: { search?: string; perPage?: number; page?: number } = {}) => supertest .post(`${SAVED_QUERY_BASE_URL}/_find`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(options); const countQueries = () => - supertest.get(`${SAVED_QUERY_BASE_URL}/_count`).set(ELASTIC_HTTP_VERSION_HEADER, '1'); + supertest + .get(`${SAVED_QUERY_BASE_URL}/_count`) + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); const isDuplicateTitle = (title: string, id?: string) => supertest .post(`${SAVED_QUERY_BASE_URL}/_is_duplicate_title`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ title, id }); describe('Saved queries API', function () { diff --git a/test/api_integration/apis/scripts/languages.js b/test/api_integration/apis/scripts/languages.js index 2c85f359ce486..b77cc9c01c5ad 100644 --- a/test/api_integration/apis/scripts/languages.js +++ b/test/api_integration/apis/scripts/languages.js @@ -9,7 +9,10 @@ import expect from '@kbn/expect'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { SCRIPT_LANGUAGES_ROUTE_LATEST_VERSION } from '@kbn/data-plugin/common/constants'; export default function ({ getService }) { @@ -20,6 +23,7 @@ export default function ({ getService }) { supertest .get('/internal/scripts/languages') .set(ELASTIC_HTTP_VERSION_HEADER, SCRIPT_LANGUAGES_ROUTE_LATEST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((response) => { expect(response.body).to.be.an('array'); @@ -30,6 +34,7 @@ export default function ({ getService }) { supertest .get('/internal/scripts/languages') .set(ELASTIC_HTTP_VERSION_HEADER, SCRIPT_LANGUAGES_ROUTE_LATEST_VERSION) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((response) => { expect(response.body).to.contain('expression'); diff --git a/test/api_integration/apis/search/bsearch.ts b/test/api_integration/apis/search/bsearch.ts index ed080ee4f553c..2c4bcead1d475 100644 --- a/test/api_integration/apis/search/bsearch.ts +++ b/test/api_integration/apis/search/bsearch.ts @@ -10,7 +10,10 @@ import expect from '@kbn/expect'; import request from 'superagent'; import { inflateResponse } from '@kbn/bfetch-plugin/public/streaming'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { BFETCH_ROUTE_VERSION_LATEST } from '@kbn/bfetch-plugin/common'; import { FtrProviderContext } from '../../ftr_provider_context'; import { painlessErrReq } from './painless_err_req'; @@ -35,6 +38,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -68,6 +72,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch?compress=true`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -101,6 +106,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -144,6 +150,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -175,6 +182,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -215,6 +223,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -240,6 +249,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -274,6 +284,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -324,6 +335,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -359,6 +371,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -408,6 +421,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -436,6 +450,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -466,6 +481,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -495,6 +511,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { @@ -526,6 +543,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/bsearch`) .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ batch: [ { diff --git a/test/api_integration/apis/search/search.ts b/test/api_integration/apis/search/search.ts index c3bf86933bd1c..01609bec6f1b9 100644 --- a/test/api_integration/apis/search/search.ts +++ b/test/api_integration/apis/search/search.ts @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; import { painlessErrReq } from './painless_err_req'; @@ -31,6 +34,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/search/es`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ params: { body: { @@ -53,6 +57,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/search/es`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ params: { terminateAfter: 1, @@ -78,6 +83,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/search`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ body: { query: { @@ -94,6 +100,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/search/banana`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ body: { query: { @@ -102,9 +109,8 @@ export default function ({ getService }: FtrProviderContext) { }, }) .expect(404); - verifyErrorResponse(resp.body, 404); - expect(resp.body.message).to.contain('banana not found'); + expect(resp.body.message).to.be('Search strategy banana not found'); expect(resp.header).to.have.property(ELASTIC_HTTP_VERSION_HEADER, '1'); }); @@ -112,6 +118,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/search/es`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ params: { timeout: 1, // This should be a time range string! @@ -133,6 +140,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/search/es`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ params: { body: { @@ -150,6 +158,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/search/es`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(painlessErrReq) .expect(400); @@ -162,6 +171,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .delete(`/internal/search/es`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send() .expect(404); verifyErrorResponse(resp.body, 404); @@ -171,6 +181,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .delete(`/internal/search/es/123`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send() .expect(400); verifyErrorResponse(resp.body, 400); diff --git a/test/api_integration/apis/search/sql_search.ts b/test/api_integration/apis/search/sql_search.ts index e4d0f15e24040..374fdd263ee29 100644 --- a/test/api_integration/apis/search/sql_search.ts +++ b/test/api_integration/apis/search/sql_search.ts @@ -8,7 +8,10 @@ */ import expect from '@kbn/expect'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -31,6 +34,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await supertest .post(`/internal/search/sql`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ params: { query: sqlQuery, @@ -49,6 +53,7 @@ export default function ({ getService }: FtrProviderContext) { const resp1 = await supertest .post(`/internal/search/sql`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ params: { query: sqlQuery, @@ -61,6 +66,7 @@ export default function ({ getService }: FtrProviderContext) { const resp2 = await supertest .post(`/internal/search/sql/${id}`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({}); expect(resp2.status).to.be(200); @@ -77,6 +83,7 @@ export default function ({ getService }: FtrProviderContext) { const resp1 = await supertest .post(`/internal/search/sql`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ params: { query: sqlQuery, @@ -90,6 +97,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post(`/internal/search/sql/${id}`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({}) .expect(200); @@ -97,6 +105,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .delete(`/internal/search/sql/${id}`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send() .expect(200); @@ -104,6 +113,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post(`/internal/search/sql/${id}`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({}) .expect(404); }); diff --git a/test/api_integration/apis/suggestions/suggestions.js b/test/api_integration/apis/suggestions/suggestions.js index ad18af6689c63..97a1dbae734de 100644 --- a/test/api_integration/apis/suggestions/suggestions.js +++ b/test/api_integration/apis/suggestions/suggestions.js @@ -8,7 +8,10 @@ */ import expect from '@kbn/expect'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; export default function ({ getService }) { const esArchiver = getService('esArchiver'); @@ -37,6 +40,7 @@ export default function ({ getService }) { supertest .post('/internal/kibana/suggestions/values/basic_index') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ field: 'baz.keyword', query: '', @@ -51,6 +55,7 @@ export default function ({ getService }) { supertest .post('/internal/kibana/suggestions/values/basic_index') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ field: 'baz.keyword', method: 'terms_agg', @@ -66,6 +71,7 @@ export default function ({ getService }) { supertest .post('/internal/kibana/suggestions/values/basic_index') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ field: 'baz.keyword', method: 'terms_enum', @@ -81,6 +87,7 @@ export default function ({ getService }) { supertest .post('/internal/kibana/suggestions/values/basic_index') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ field: 'baz.keyword', query: ' { await supertest .get('/translations/en.json') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect('Cache-Control', 'public, max-age=31536000, immutable') .expect(200); }); it('allows the bootstrap bundles to be cached', async () => { - await supertest.get('/bootstrap.js').expect('Cache-Control', 'must-revalidate').expect(200); + await supertest + .get('/bootstrap.js') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect('Cache-Control', 'must-revalidate') + .expect(200); }); }); } diff --git a/test/server_integration/http/platform/status.ts b/test/server_integration/http/platform/status.ts index a00aa46ad9f23..f27a5e624de76 100644 --- a/test/server_integration/http/platform/status.ts +++ b/test/server_integration/http/platform/status.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import type { ServiceStatus, ServiceStatusLevels } from '@kbn/core/server'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../services/types'; type ServiceStatusSerialized = Omit & { level: string }; @@ -30,6 +31,7 @@ export default function ({ getService }: FtrProviderContext) { supertest .post(`/internal/status_plugin_a/status/set?level=${level}`) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); describe('status service', function () { diff --git a/x-pack/test/api_integration/apis/spaces/get_active_space.ts b/x-pack/test/api_integration/apis/spaces/get_active_space.ts index 627b0847aee35..e32f20f0268b5 100644 --- a/x-pack/test/api_integration/apis/spaces/get_active_space.ts +++ b/x-pack/test/api_integration/apis/spaces/get_active_space.ts @@ -6,6 +6,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -30,6 +31,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get('/internal/spaces/_active_space') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((response) => { const { id, name, _reserved } = response.body; @@ -45,6 +47,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get('/s/default/internal/spaces/_active_space') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((response) => { const { id, name, _reserved } = response.body; @@ -60,6 +63,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get('/s/foo-space/internal/spaces/_active_space') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200, { id: 'foo-space', name: 'Foo Space', @@ -72,6 +76,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get('/s/not-found-space/internal/spaces/_active_space') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404, { statusCode: 404, error: 'Not Found', diff --git a/x-pack/test/api_integration/apis/spaces/get_content_summary.ts b/x-pack/test/api_integration/apis/spaces/get_content_summary.ts index 39fa00ebd8ff1..07f9226dafa4c 100644 --- a/x-pack/test/api_integration/apis/spaces/get_content_summary.ts +++ b/x-pack/test/api_integration/apis/spaces/get_content_summary.ts @@ -6,6 +6,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; const sampleDashboard = { @@ -71,16 +72,19 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post(`/s/${ATestSpace}/api/content_management/rpc/create`) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(sampleDashboard); await supertest .post(`/s/${ATestSpace}/api/content_management/rpc/create`) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(sampleDashboard); await supertest .get(`/internal/spaces/${ATestSpace}/content_summary`) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((response) => { const { summary, total } = response.body; @@ -100,6 +104,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post(`/s/${BTestSpace}/api/content_management/rpc/create`) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(sampleDashboard); await supertest @@ -111,6 +116,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get(`/internal/spaces/${BTestSpace}/content_summary`) .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200) .then((response) => { const { summary, total } = response.body; @@ -137,6 +143,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get('/internal/spaces/not-found-space/content_summary') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404, { statusCode: 404, error: 'Not Found', diff --git a/x-pack/test/api_integration/apis/spaces/saved_objects.ts b/x-pack/test/api_integration/apis/spaces/saved_objects.ts index 806929e67ebbc..63bf35ce76c6d 100644 --- a/x-pack/test/api_integration/apis/spaces/saved_objects.ts +++ b/x-pack/test/api_integration/apis/spaces/saved_objects.ts @@ -6,6 +6,7 @@ */ import expect from '@kbn/expect'; +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -17,6 +18,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .get('/api/saved_objects/space/default') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send() .expect(404) .then((response: Record) => { @@ -33,6 +35,7 @@ export default function ({ getService }: FtrProviderContext) { it('should not locate any spaces', async () => { await supertest .get('/api/saved_objects/_find?type=space') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .set('kbn-xsrf', 'xxx') .send() .expect(200) @@ -51,6 +54,7 @@ export default function ({ getService }: FtrProviderContext) { it('should not allow a space to be created', async () => { await supertest .post('/api/saved_objects/space/my-space') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .set('kbn-xsrf', 'xxx') .send({ attributes: {} }) .expect(400) @@ -68,6 +72,7 @@ export default function ({ getService }: FtrProviderContext) { it('should not allow a space to be updated', async () => { await supertest .post('/api/saved_objects/space/default') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .set('kbn-xsrf', 'xxx') .send({ attributes: {} }) .expect(400) @@ -85,6 +90,7 @@ export default function ({ getService }: FtrProviderContext) { it('should not allow a space to be deleted', async () => { await supertest .delete('/api/saved_objects/space/default') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .set('kbn-xsrf', 'xxx') .send() .expect(404) diff --git a/x-pack/test/api_integration/apis/spaces/space_attributes.ts b/x-pack/test/api_integration/apis/spaces/space_attributes.ts index 65cff6e1b6876..c9e02b8142e7e 100644 --- a/x-pack/test/api_integration/apis/spaces/space_attributes.ts +++ b/x-pack/test/api_integration/apis/spaces/space_attributes.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -15,6 +16,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post('/api/spaces/space') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ id: 'api-test-space', name: 'api test space', @@ -33,6 +35,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post('/api/spaces/space') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ id: 'api-test-space2', name: 'Space with image', @@ -55,6 +58,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .post('/api/spaces/space') .set('kbn-xsrf', 'xxx') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send({ id: 'api-test-space3', name: 'Space with invalid image', diff --git a/x-pack/test/ftr_apis/security_and_spaces/config.ts b/x-pack/test/ftr_apis/security_and_spaces/config.ts index 8cfc662bb0b96..2326d768ee776 100644 --- a/x-pack/test/ftr_apis/security_and_spaces/config.ts +++ b/x-pack/test/ftr_apis/security_and_spaces/config.ts @@ -30,6 +30,8 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { serverArgs: [ ...apiIntegrationConfig.get('kbnTestServer.serverArgs'), '--server.xsrf.disableProtection=true', + // disable internal API restriction. See https://github.com/elastic/kibana/issues/163654 + '--server.restrictInternalApis=false', `--xpack.fleet.registryUrl=http://localhost:12345`, // setting to invalid registry url to prevent installing preconfigured packages ], }, diff --git a/x-pack/test/functional/config.base.js b/x-pack/test/functional/config.base.js index 4fdb988fef098..033a7faa98303 100644 --- a/x-pack/test/functional/config.base.js +++ b/x-pack/test/functional/config.base.js @@ -51,6 +51,8 @@ export default async function ({ readConfigFile }) { '--xpack.discoverEnhanced.actions.exploreDataInContextMenu.enabled=true', '--savedObjects.maxImportPayloadBytes=10485760', // for OSS test management/_import_objects, '--savedObjects.allowHttpApiAccess=false', // override default to not allow hiddenFromHttpApis saved objects access to the http APIs see https://github.com/elastic/dev/issues/2200 + // explicitly disable internal API restriction. See https://github.com/elastic/kibana/issues/163654 + '--server.restrictInternalApis=false', // disable fleet task that writes to metrics.fleet_server.* data streams, impacting functional tests `--xpack.task_manager.unsafe.exclude_task_types=${JSON.stringify(['Fleet-Metrics-Task'])}`, ], From f7dc0570bb7e7efd98f02b9e819999c863ec4cab Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Thu, 12 Sep 2024 09:27:59 +0200 Subject: [PATCH 50/52] [EEM] Add docs about how to iterate the design of a definition (#192474) --- .../entity_manager/docs/entity_definitions.md | 187 +++++++++++++++++- 1 file changed, 183 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/observability_solution/entity_manager/docs/entity_definitions.md b/x-pack/plugins/observability_solution/entity_manager/docs/entity_definitions.md index deedb12ebf390..da02bc7f69c3f 100644 --- a/x-pack/plugins/observability_solution/entity_manager/docs/entity_definitions.md +++ b/x-pack/plugins/observability_solution/entity_manager/docs/entity_definitions.md @@ -16,13 +16,192 @@ To enable the backfill transform set a value to `history.settings.backfillSyncDe History and summary transforms will output their data to indices where history writes to time-based (monthly) indices (`.entities.v1.history..`) and summary writes to a unique indice (`.entities.v1.latest.`). For convenience we create type-based aliases on top on these indices, where the type is extracted from the `entityDefinition.type` property. For a definition of `type: service`, the data can be read through the `entities-service-history` and `entities-service-latest` aliases. -**Entity definition example**: +#### Iterating on a definition -One can create a definition with a `POST kbn:/internal/entities/definition` request, or through the [entity client](../server/lib/entity_client.ts). +One can create a definition with a request to `POST kbn:/internal/entities/definition`, or through the [entity client](../server/lib/entity_client.ts). -Given the `services_from_logs` definition below, the history transform will create one entity document per service per minute (based on `@timestamp` field, granted at least one document exist for a given bucket in the source indices), with the `logRate`, `logErrorRatio` metrics and `data_stream.type`, `sourceIndex` metadata aggregated over one minute. +When creating the definition, there are 3 main pieces to consider: +1. The core entity discovery settings +2. The metadata to collect for each entity that is identified +3. The metrics to compute for each entity that is identified -Note that it is not necessary to add the `identifyFields` as metadata as these will be automatically collected in the output documents, and that it is possible to set `identityFields` as optional. +Let's look at the most basic example, one that only discovers entities. + +```json +{ + "id": "my_hosts", + "name": "Hosts from logs data", + "description": "This definition extracts host entities from log data", + "version": "1.0.0", + "type": "host", + "indexPatterns": ["logs-*"], + "identityFields": ["host.name"], + "displayNameTemplate": "{{host.name}}", + "history": { + "timestampField": "@timestamp", + "interval": "2m", + "settings": { + "frequency": "2m" + } + } +} +``` + +This definition will look inside the `logs-*` index pattern for documents that container the field `host.name` and group them based on that value to create the entities. It will run the discovery every 2 minutes. +The documents will be of type "host" so they can be queried via `entities-host-history` or `entities-host-latest`. Beyond the basic `entity` fields, each entity document will also contain all the identify fields at the root of the document, this it is easy to find your hosts by filtering by `host.name`. Note that it is not necessary to add the `identifyFields` as metadata as these will be automatically collected in the output documents, and that it is possible to set `identityFields` as optional. + +An entity document for this definition will look like below. + +History: +```json +{ + "host": { + "name": "gke-edge-oblt-edge-oblt-pool-8fc2868f-jf56" + }, + "@timestamp": "2024-09-10T12:36:00.000Z", + "event": { + "ingested": "2024-09-10T13:06:54.211210797Z" + }, + "entity": { + "lastSeenTimestamp": "2024-09-10T12:37:59.334Z", + "identityFields": [ + "host.name" + ], + "id": "X/FDBqGTvfnAAHTrv6XfzQ==", + "definitionId": "my_hosts", + "definitionVersion": "1.0.0", + "schemaVersion": "v1", + "type": "host" + } +} +``` + +Latest: +```json +{ + "event": { + "ingested": "2024-09-10T13:07:19.042735184Z" + }, + "host": { + "name": "gke-edge-oblt-edge-oblt-pool-8fc2868f-lgmr" + }, + "entity": { + "firstSeenTimestamp": "2024-09-10T12:06:00.000Z", + "lastSeenTimestamp": "2024-09-10T13:03:59.432Z", + "id": "0j+khoOmcrluI7nhYSVnCw==", + "displayName": "gke-edge-oblt-edge-oblt-pool-8fc2868f-lgmr", + "definitionId": "my_hosts", + "definitionVersion": "1.0.0", + "identityFields": [ + "host.name" + ], + "type": "host", + "schemaVersion": "v1" + } +} +``` + +Let's extend our definition by adding some metadata and a metric to compute. We can do this by issuing a request to `PATCH kbn:/internal/entities/definition/my_hosts` with the following body: + +```json +{ + "version": "1.1.0", + "metadata": [ + "cloud.provider" + ], + "metrics": [ + { + "name": "cpu_usage_avg", + "equation": "A", + "metrics": [ + { + "name": "A", + "aggregation": "avg", + "field": "system.cpu.total.norm.pct" + } + ] + } + ] +} +``` + +Once that is done, we can view how the shape of the entity documents change. + +History: +```json +{ + "cloud": { + "provider": [ + "gcp" + ] + }, + "host": { + "name": "opbeans-go-nsn-7f8749688-qfw4t" + }, + "@timestamp": "2024-09-10T12:58:00.000Z", + "event": { + "ingested": "2024-09-10T13:28:50.505448228Z" + }, + "entity": { + "lastSeenTimestamp": "2024-09-10T12:59:57.501Z", + "schemaVersion": "v1", + "definitionVersion": "1.1.0", + "identityFields": [ + "host.name" + ], + "metrics": { + "log_rate": 183 + }, + "id": "8yUkkMImEDcbgXmMIm7rkA==", + "type": "host", + "definitionId": "my_hosts" + } +} +} +``` + +Latest: +```json +{ + "cloud": { + "provider": [ + "gcp" + ] + }, + "host": { + "name": "opbeans-go-nsn-7f8749688-qfw4t" + }, + "event": { + "ingested": "2024-09-10T13:29:15.028655880Z" + }, + "entity": { + "lastSeenTimestamp": "2024-09-10T13:25:59.278Z", + "schemaVersion": "v1", + "definitionVersion": "1.1.0", + "displayName": "opbeans-go-nsn-7f8749688-qfw4t", + "identityFields": [ + "host.name" + ], + "id": "8yUkkMImEDcbgXmMIm7rkA==", + "metrics": { + "log_rate": 203 + }, + "type": "host", + "firstSeenTimestamp": "2024-09-10T12:06:00.000Z", + "definitionId": "my_hosts" + } +} +``` + +The key additions to notice are: +1. The new root field `cloud.provider` +2. The new metric field `entity.metrics.log_rate` + +Through this iterative process you can craft a definition to meet your needs, verifying along the way that the data is captured as you expect. +In case the data is not captured correctly, a common cause is due to the exact timings of the two transforms. +If the history transform is lagging behind, then the latest transform will not have any data in its lookback window to capture. + +**Entity definition examples**: __service_from_logs definition__


From cd970c6c33e16c1a5460d1fa99742ba722c0c39a Mon Sep 17 00:00:00 2001
From: Zacqary Adam Xeper 
Date: Thu, 12 Sep 2024 02:29:45 -0500
Subject: [PATCH 51/52] [Embeddables Rebuild] Move legacy viusalize embeddable
 to legacy/embeddable (#192002)

## Summary

In visualize, renames the new `react_embeddable` folder to just
`embeddable`, and moves the previous `embeddable` folder to
`legacy/embeddable`.

Keeps a few constants and interfaces that are reused in the new
embeddable in the `embeddable` folder, and imports them into
`legacy/embeddable` where needed.

---------

Co-authored-by: Marco Liberati 
---
 .../public/dynamically_add_panels_example.tsx |    2 +-
 .../public/actions/edit_in_lens_action.tsx    |    2 +-
 .../create_vis_instance.ts                    |    0
 .../get_expression_renderer_props.ts          |    2 +-
 .../get_visualize_embeddable_factory_lazy.ts} |    5 +-
 .../visualizations/public/embeddable/index.ts |    8 +-
 .../save_to_library.ts                        |    0
 .../state.test.ts                             |    0
 .../{react_embeddable => embeddable}/state.ts |    0
 .../{react_embeddable => embeddable}/types.ts |    2 +-
 .../embeddable/visualize_embeddable.tsx       | 1176 +++++++----------
 src/plugins/visualizations/public/index.ts    |   13 +-
 .../{ => legacy}/embeddable/constants.ts      |    2 +-
 .../create_vis_embeddable_from_object.ts      |    6 +-
 .../{ => legacy}/embeddable/embeddables.scss  |    0
 .../public/legacy/embeddable/index.ts         |   18 +
 .../embeddable/visualize_embeddable.tsx       |  717 ++++++++++
 .../embeddable/visualize_embeddable_async.ts  |    0
 .../visualize_embeddable_factory.test.ts      |    0
 .../visualize_embeddable_factory.tsx          |   16 +-
 src/plugins/visualizations/public/plugin.ts   |   11 +-
 .../react_embeddable/visualize_embeddable.tsx |  549 --------
 .../save_with_confirmation.ts                 |    2 +-
 .../saved_visualization_references.ts         |    2 +-
 .../public/visualize_app/types.ts             |    2 +-
 .../utils/get_visualization_instance.ts       |    2 +-
 26 files changed, 1276 insertions(+), 1261 deletions(-)
 rename src/plugins/visualizations/public/{react_embeddable => embeddable}/create_vis_instance.ts (100%)
 rename src/plugins/visualizations/public/{react_embeddable => embeddable}/get_expression_renderer_props.ts (98%)
 rename src/plugins/visualizations/public/{react_embeddable/index.ts => embeddable/get_visualize_embeddable_factory_lazy.ts} (71%)
 rename src/plugins/visualizations/public/{react_embeddable => embeddable}/save_to_library.ts (100%)
 rename src/plugins/visualizations/public/{react_embeddable => embeddable}/state.test.ts (100%)
 rename src/plugins/visualizations/public/{react_embeddable => embeddable}/state.ts (100%)
 rename src/plugins/visualizations/public/{react_embeddable => embeddable}/types.ts (98%)
 rename src/plugins/visualizations/public/{ => legacy}/embeddable/constants.ts (91%)
 rename src/plugins/visualizations/public/{ => legacy}/embeddable/create_vis_embeddable_from_object.ts (94%)
 rename src/plugins/visualizations/public/{ => legacy}/embeddable/embeddables.scss (100%)
 create mode 100644 src/plugins/visualizations/public/legacy/embeddable/index.ts
 create mode 100644 src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable.tsx
 rename src/plugins/visualizations/public/{ => legacy}/embeddable/visualize_embeddable_async.ts (100%)
 rename src/plugins/visualizations/public/{ => legacy}/embeddable/visualize_embeddable_factory.test.ts (100%)
 rename src/plugins/visualizations/public/{ => legacy}/embeddable/visualize_embeddable_factory.tsx (96%)
 delete mode 100644 src/plugins/visualizations/public/react_embeddable/visualize_embeddable.tsx

diff --git a/examples/portable_dashboards_example/public/dynamically_add_panels_example.tsx b/examples/portable_dashboards_example/public/dynamically_add_panels_example.tsx
index fad894349491b..3816beea96341 100644
--- a/examples/portable_dashboards_example/public/dynamically_add_panels_example.tsx
+++ b/examples/portable_dashboards_example/public/dynamically_add_panels_example.tsx
@@ -23,7 +23,7 @@ import {
   VisualizeEmbeddable,
   VisualizeInput,
   VisualizeOutput,
-} from '@kbn/visualizations-plugin/public/embeddable/visualize_embeddable';
+} from '@kbn/visualizations-plugin/public/legacy/embeddable/visualize_embeddable';
 
 const INPUT_KEY = 'portableDashboard:saveExample:input';
 
diff --git a/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx b/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx
index 6d3a2ce697f7b..8995b2abf7385 100644
--- a/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx
+++ b/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx
@@ -26,7 +26,7 @@ import {
 import { Action } from '@kbn/ui-actions-plugin/public';
 import React from 'react';
 import { take } from 'rxjs';
-import { apiHasVisualizeConfig, HasVisualizeConfig } from '../embeddable';
+import { apiHasVisualizeConfig, HasVisualizeConfig } from '../legacy/embeddable';
 import {
   apiHasExpressionVariables,
   HasExpressionVariables,
diff --git a/src/plugins/visualizations/public/react_embeddable/create_vis_instance.ts b/src/plugins/visualizations/public/embeddable/create_vis_instance.ts
similarity index 100%
rename from src/plugins/visualizations/public/react_embeddable/create_vis_instance.ts
rename to src/plugins/visualizations/public/embeddable/create_vis_instance.ts
diff --git a/src/plugins/visualizations/public/react_embeddable/get_expression_renderer_props.ts b/src/plugins/visualizations/public/embeddable/get_expression_renderer_props.ts
similarity index 98%
rename from src/plugins/visualizations/public/react_embeddable/get_expression_renderer_props.ts
rename to src/plugins/visualizations/public/embeddable/get_expression_renderer_props.ts
index 67d38577b54d4..69dfef84c2be0 100644
--- a/src/plugins/visualizations/public/react_embeddable/get_expression_renderer_props.ts
+++ b/src/plugins/visualizations/public/embeddable/get_expression_renderer_props.ts
@@ -10,7 +10,7 @@
 import type { KibanaExecutionContext } from '@kbn/core-execution-context-common';
 import { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query';
 import { ExpressionRendererEvent, ExpressionRendererParams } from '@kbn/expressions-plugin/public';
-import { toExpressionAst } from '../embeddable/to_ast';
+import { toExpressionAst } from './to_ast';
 import { getExecutionContext, getTimeFilter } from '../services';
 import type { VisParams } from '../types';
 import type { Vis } from '../vis';
diff --git a/src/plugins/visualizations/public/react_embeddable/index.ts b/src/plugins/visualizations/public/embeddable/get_visualize_embeddable_factory_lazy.ts
similarity index 71%
rename from src/plugins/visualizations/public/react_embeddable/index.ts
rename to src/plugins/visualizations/public/embeddable/get_visualize_embeddable_factory_lazy.ts
index 77f7ee433a996..b14d03ec5030c 100644
--- a/src/plugins/visualizations/public/react_embeddable/index.ts
+++ b/src/plugins/visualizations/public/embeddable/get_visualize_embeddable_factory_lazy.ts
@@ -7,4 +7,7 @@
  * License v3.0 only", or the "Server Side Public License, v 1".
  */
 
-export { getVisualizeEmbeddableFactory } from './visualize_embeddable';
+export const getVisualizeEmbeddableFactoryLazy = async () => {
+  const { getVisualizeEmbeddableFactory } = await import('./visualize_embeddable');
+  return getVisualizeEmbeddableFactory;
+};
diff --git a/src/plugins/visualizations/public/embeddable/index.ts b/src/plugins/visualizations/public/embeddable/index.ts
index c3855d3ab171f..6d1649771c8ef 100644
--- a/src/plugins/visualizations/public/embeddable/index.ts
+++ b/src/plugins/visualizations/public/embeddable/index.ts
@@ -7,11 +7,5 @@
  * License v3.0 only", or the "Server Side Public License, v 1".
  */
 
-export { VisualizeEmbeddableFactory } from './visualize_embeddable_factory';
-export { VISUALIZE_EMBEDDABLE_TYPE, COMMON_VISUALIZATION_GROUPING } from './constants';
+export { getVisualizeEmbeddableFactoryLazy } from './get_visualize_embeddable_factory_lazy';
 export { VIS_EVENT_TO_TRIGGER } from './events';
-export { createVisEmbeddableFromObject } from './create_vis_embeddable_from_object';
-
-export type { VisualizeEmbeddable, VisualizeInput } from './visualize_embeddable';
-
-export { type HasVisualizeConfig, apiHasVisualizeConfig } from './interfaces/has_visualize_config';
diff --git a/src/plugins/visualizations/public/react_embeddable/save_to_library.ts b/src/plugins/visualizations/public/embeddable/save_to_library.ts
similarity index 100%
rename from src/plugins/visualizations/public/react_embeddable/save_to_library.ts
rename to src/plugins/visualizations/public/embeddable/save_to_library.ts
diff --git a/src/plugins/visualizations/public/react_embeddable/state.test.ts b/src/plugins/visualizations/public/embeddable/state.test.ts
similarity index 100%
rename from src/plugins/visualizations/public/react_embeddable/state.test.ts
rename to src/plugins/visualizations/public/embeddable/state.test.ts
diff --git a/src/plugins/visualizations/public/react_embeddable/state.ts b/src/plugins/visualizations/public/embeddable/state.ts
similarity index 100%
rename from src/plugins/visualizations/public/react_embeddable/state.ts
rename to src/plugins/visualizations/public/embeddable/state.ts
diff --git a/src/plugins/visualizations/public/react_embeddable/types.ts b/src/plugins/visualizations/public/embeddable/types.ts
similarity index 98%
rename from src/plugins/visualizations/public/react_embeddable/types.ts
rename to src/plugins/visualizations/public/embeddable/types.ts
index b0c6b296112b9..2536b478debb4 100644
--- a/src/plugins/visualizations/public/react_embeddable/types.ts
+++ b/src/plugins/visualizations/public/embeddable/types.ts
@@ -22,7 +22,7 @@ import {
   SerializedTitles,
 } from '@kbn/presentation-publishing';
 import { DeepPartial } from '@kbn/utility-types';
-import { HasVisualizeConfig } from '../embeddable';
+import { HasVisualizeConfig } from '../legacy/embeddable';
 import type { Vis, VisParams, VisSavedObject } from '../types';
 import type { SerializedVis } from '../vis';
 
diff --git a/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx b/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx
index 6c684b58af888..8e1861af15a98 100644
--- a/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx
+++ b/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx
@@ -7,711 +7,543 @@
  * License v3.0 only", or the "Server Side Public License, v 1".
  */
 
-import _, { get } from 'lodash';
-import { Subscription, ReplaySubject, mergeMap } from 'rxjs';
-import { i18n } from '@kbn/i18n';
-import React from 'react';
-import { render } from 'react-dom';
-import { EuiLoadingChart } from '@elastic/eui';
-import { Filter, onlyDisabledFiltersChanged, Query, TimeRange } from '@kbn/es-query';
-import type { KibanaExecutionContext, SavedObjectAttributes } from '@kbn/core/public';
-import type { ErrorLike } from '@kbn/expressions-plugin/common';
-import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render';
-import { TimefilterContract } from '@kbn/data-plugin/public';
+import { EuiEmptyPrompt, EuiFlexGroup, EuiLoadingChart } from '@elastic/eui';
+import { isChartSizeEvent } from '@kbn/chart-expressions-common';
+import { APPLY_FILTER_TRIGGER } from '@kbn/data-plugin/public';
 import type { DataView } from '@kbn/data-views-plugin/public';
-import { Warnings } from '@kbn/charts-plugin/public';
-import { hasUnsupportedDownsampledAggregationFailure } from '@kbn/search-response-warnings';
+import { EmbeddableEnhancedPluginStart } from '@kbn/embeddable-enhanced-plugin/public';
 import {
-  Adapters,
-  AttributeService,
-  Embeddable,
-  EmbeddableInput,
-  EmbeddableOutput,
-  FilterableEmbeddable,
-  IContainer,
-  ReferenceOrValueEmbeddable,
-  SavedObjectEmbeddableInput,
+  EmbeddableStart,
+  ReactEmbeddableFactory,
+  SELECT_RANGE_TRIGGER,
 } from '@kbn/embeddable-plugin/public';
+import { ExpressionRendererParams, useExpressionRenderer } from '@kbn/expressions-plugin/public';
+import { i18n } from '@kbn/i18n';
+import { dispatchRenderComplete } from '@kbn/kibana-utils-plugin/public';
+import { apiPublishesSettings } from '@kbn/presentation-containers';
 import {
-  ExpressionAstExpression,
-  ExpressionLoader,
-  ExpressionRenderError,
-  IExpressionLoaderParams,
-} from '@kbn/expressions-plugin/public';
-import type { RenderMode } from '@kbn/expressions-plugin/common';
-import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/public';
-import { mapAndFlattenFilters } from '@kbn/data-plugin/public';
-import { isChartSizeEvent } from '@kbn/chart-expressions-common';
-import { isFallbackDataView } from '../visualize_app/utils';
-import { VisualizationMissedSavedObjectError } from '../components/visualization_missed_saved_object_error';
-import VisualizationError from '../components/visualization_error';
-import { VISUALIZE_EMBEDDABLE_TYPE } from './constants';
-import { SerializedVis, Vis } from '../vis';
-import { getApplication, getExecutionContext, getExpressions, getUiActions } from '../services';
+  apiHasAppContext,
+  apiHasDisableTriggers,
+  apiHasExecutionContext,
+  apiIsOfType,
+  apiPublishesTimeRange,
+  apiPublishesTimeslice,
+  apiPublishesUnifiedSearch,
+  apiPublishesViewMode,
+  fetch$,
+  getUnchangingComparator,
+  initializeTimeRange,
+  initializeTitles,
+  useStateFromPublishingSubject,
+} from '@kbn/presentation-publishing';
+import { apiPublishesSearchSession } from '@kbn/presentation-publishing/interfaces/fetch/publishes_search_session';
+import { get, isEmpty, isEqual, isNil, omitBy } from 'lodash';
+import React, { useEffect, useRef } from 'react';
+import { BehaviorSubject, switchMap } from 'rxjs';
+import { VISUALIZE_APP_NAME, VISUALIZE_EMBEDDABLE_TYPE } from '../../common/constants';
 import { VIS_EVENT_TO_TRIGGER } from './events';
-import { VisualizeEmbeddableFactoryDeps } from './visualize_embeddable_factory';
-import { getSavedVisualization } from '../utils/saved_visualize_utils';
-import { VisSavedObject } from '../types';
-import { toExpressionAst } from './to_ast';
-
-export interface VisualizeEmbeddableConfiguration {
-  vis: Vis;
-  indexPatterns?: DataView[];
-  editPath: string;
-  editUrl: string;
-  capabilities: { visualizeSave: boolean; dashboardSave: boolean; visualizeOpen: boolean };
-  deps: VisualizeEmbeddableFactoryDeps;
-}
-
-export interface VisualizeInput extends EmbeddableInput {
-  vis?: {
-    colors?: { [key: string]: string };
-  };
-  savedVis?: SerializedVis;
-  renderMode?: RenderMode;
-  table?: unknown;
-  query?: Query;
-  filters?: Filter[];
-  timeRange?: TimeRange;
-  timeslice?: [number, number];
-}
-
-export interface VisualizeOutput extends EmbeddableOutput {
-  editPath: string;
-  editApp: string;
-  editUrl: string;
-  indexPatterns?: DataView[];
-  visTypeName: string;
-}
-
-export type VisualizeSavedObjectAttributes = SavedObjectAttributes & {
-  title: string;
-  vis?: Vis;
-  savedVis?: VisSavedObject;
-};
-export type VisualizeByValueInput = { attributes: VisualizeSavedObjectAttributes } & VisualizeInput;
-export type VisualizeByReferenceInput = SavedObjectEmbeddableInput & VisualizeInput;
-
-/** @deprecated
- * VisualizeEmbeddable is no longer registered with the legacy embeddable system and is only
- * used within the visualize editor.
- */
-export class VisualizeEmbeddable
-  extends Embeddable
-  implements
-    ReferenceOrValueEmbeddable,
-    FilterableEmbeddable
-{
-  private handler?: ExpressionLoader;
-  private timefilter: TimefilterContract;
-  private timeRange?: TimeRange;
-  private query?: Query;
-  private filters?: Filter[];
-  private searchSessionId?: string;
-  private syncColors?: boolean;
-  private syncTooltips?: boolean;
-  private syncCursor?: boolean;
-  private embeddableTitle?: string;
-  private visCustomizations?: Pick;
-  private subscriptions: Subscription[] = [];
-  private expression?: ExpressionAstExpression;
-  private vis: Vis;
-  private domNode: any;
-  private warningDomNode: any;
-  public readonly type = VISUALIZE_EMBEDDABLE_TYPE;
-  private abortController?: AbortController;
-  private readonly deps: VisualizeEmbeddableFactoryDeps;
-  private readonly inspectorAdapters?: Adapters;
-  private attributeService?: AttributeService<
-    VisualizeSavedObjectAttributes,
-    VisualizeByValueInput,
-    VisualizeByReferenceInput
-  >;
-  private expressionVariables: Record | undefined;
-  private readonly expressionVariablesSubject = new ReplaySubject<
-    Record | undefined
-  >(1);
-
-  constructor(
-    timefilter: TimefilterContract,
-    { vis, editPath, editUrl, indexPatterns, deps, capabilities }: VisualizeEmbeddableConfiguration,
-    initialInput: VisualizeInput,
-    attributeService?: AttributeService<
-      VisualizeSavedObjectAttributes,
-      VisualizeByValueInput,
-      VisualizeByReferenceInput
-    >,
-    parent?: IContainer
-  ) {
-    super(
-      initialInput,
-      {
-        defaultTitle: vis.title,
-        defaultDescription: vis.description,
-        editPath,
-        editApp: 'visualize',
-        editUrl,
-        indexPatterns,
-        visTypeName: vis.type.name,
-      },
-      parent
-    );
-    this.deps = deps;
-    this.timefilter = timefilter;
-    this.syncColors = this.input.syncColors;
-    this.syncTooltips = this.input.syncTooltips;
-    this.syncCursor = this.input.syncCursor;
-    this.searchSessionId = this.input.searchSessionId;
-    this.query = this.input.query;
-    this.embeddableTitle = this.getTitle();
-
-    this.vis = vis;
-    this.vis.uiState.on('change', this.uiStateChangeHandler);
-    this.vis.uiState.on('reload', this.reload);
-    this.attributeService = attributeService;
-
-    if (this.attributeService) {
-      const readOnly = Boolean(vis.type.disableEdit);
-      const isByValue = !this.inputIsRefType(initialInput);
-      const editable = readOnly
-        ? false
-        : capabilities.visualizeSave ||
-          (isByValue && capabilities.dashboardSave && capabilities.visualizeOpen);
-      this.updateOutput({ ...this.getOutput(), editable });
-    }
-
-    this.subscriptions.push(
-      this.getInput$().subscribe(() => {
-        const isDirty = this.handleChanges();
+import { getCapabilities, getInspector, getUiActions, getUsageCollection } from '../services';
+import { ACTION_CONVERT_TO_LENS } from '../triggers';
+import { urlFor } from '../utils/saved_visualize_utils';
+import type { SerializedVis, Vis } from '../vis';
+import { createVisInstance } from './create_vis_instance';
+import { getExpressionRendererProps } from './get_expression_renderer_props';
+import { saveToLibrary } from './save_to_library';
+import { deserializeState, serializeState } from './state';
+import {
+  ExtraSavedObjectProperties,
+  VisualizeApi,
+  VisualizeOutputState,
+  VisualizeRuntimeState,
+  VisualizeSerializedState,
+  isVisualizeSavedObjectState,
+} from './types';
+
+export const getVisualizeEmbeddableFactory: (deps: {
+  embeddableStart: EmbeddableStart;
+  embeddableEnhancedStart?: EmbeddableEnhancedPluginStart;
+}) => ReactEmbeddableFactory = ({
+  embeddableStart,
+  embeddableEnhancedStart,
+}) => ({
+  type: VISUALIZE_EMBEDDABLE_TYPE,
+  deserializeState,
+  buildEmbeddable: async (initialState: unknown, buildApi, uuid, parentApi) => {
+    // Handle state transfer from legacy visualize editor, which uses the legacy visualize embeddable and doesn't
+    // produce a snapshot state. If buildEmbeddable is passed only a savedObjectId in the state, this means deserializeState
+    // was never run, and it needs to be invoked manually
+    const state = isVisualizeSavedObjectState(initialState)
+      ? await deserializeState({
+          rawState: initialState,
+        })
+      : (initialState as VisualizeRuntimeState);
 
-        if (isDirty && this.handler) {
-          this.updateHandler();
-        }
-      })
+    // Initialize dynamic actions
+    const dynamicActionsApi = embeddableEnhancedStart?.initializeReactEmbeddableDynamicActions(
+      uuid,
+      () => titlesApi.panelTitle.getValue(),
+      state
     );
+    // if it is provided, start the dynamic actions manager
+    const maybeStopDynamicActions = dynamicActionsApi?.startDynamicActions();
+
+    const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state);
+
+    // Count renders; mostly used for testing.
+    const renderCount$ = new BehaviorSubject(0);
+    const hasRendered$ = new BehaviorSubject(false);
+
+    // Track vis data and initialize it into a vis instance
+    const serializedVis$ = new BehaviorSubject(state.serializedVis);
+    const initialVisInstance = await createVisInstance(state.serializedVis);
+    const vis$ = new BehaviorSubject(initialVisInstance);
+
+    // Track UI state
+    const onUiStateChange = () => serializedVis$.next(vis$.getValue().serialize());
+    initialVisInstance.uiState.on('change', onUiStateChange);
+    vis$.subscribe((vis) => vis.uiState.on('change', onUiStateChange));
+
+    // When the serialized vis changes, update the vis instance
+    serializedVis$
+      .pipe(
+        switchMap(async (serializedVis) => {
+          const currentVis = vis$.getValue();
+          if (currentVis) currentVis.uiState.off('change', onUiStateChange);
+          const vis = await createVisInstance(serializedVis);
+          const { params, abortController } = await getExpressionParams();
+          return { vis, params, abortController };
+        })
+      )
+      .subscribe(({ vis, params, abortController }) => {
+        vis$.next(vis);
+        if (params) expressionParams$.next(params);
+        expressionAbortController$.next(abortController);
+      });
 
-    const inspectorAdapters = this.vis.type.inspectorAdapters;
-
-    if (inspectorAdapters) {
-      this.inspectorAdapters =
-        typeof inspectorAdapters === 'function' ? inspectorAdapters() : inspectorAdapters;
-    }
-  }
-
-  public reportsEmbeddableLoad() {
-    return true;
-  }
-
-  public getVis() {
-    return this.vis;
-  }
-
-  /**
-   * Gets the Visualize embeddable's local filters
-   * @returns Local/panel-level array of filters for Visualize embeddable
-   */
-  public getFilters() {
-    const filters = this.vis.serialize().data.searchSource?.filter ?? [];
-    // must clone the filters so that it's not read only, because mapAndFlattenFilters modifies the array
-    return mapAndFlattenFilters(_.cloneDeep(filters));
-  }
-
-  /**
-   * Gets the Visualize embeddable's local query
-   * @returns Local/panel-level query for Visualize embeddable
-   */
-  public getQuery() {
-    return this.vis.serialize().data.searchSource.query;
-  }
-
-  public getInspectorAdapters = () => {
-    if (!this.handler || (this.inspectorAdapters && !Object.keys(this.inspectorAdapters).length)) {
-      return undefined;
-    }
-    return this.handler.inspect();
-  };
-
-  public openInspector = () => {
-    if (!this.handler) return;
-
-    const adapters = this.handler.inspect();
-    if (!adapters) return;
+    // Track visualizations linked to a saved object in the library
+    const savedObjectId$ = new BehaviorSubject(
+      state.savedObjectId ?? state.serializedVis.id
+    );
+    const savedObjectProperties$ = new BehaviorSubject(
+      undefined
+    );
+    const linkedToLibrary$ = new BehaviorSubject(state.linkedToLibrary);
 
-    return this.deps.start().plugins.inspector.open(adapters, {
-      title:
-        this.getTitle() ||
-        i18n.translate('visualizations.embeddable.inspectorTitle', {
-          defaultMessage: 'Inspector',
-        }),
+    // Track the vis expression
+    const expressionParams$ = new BehaviorSubject({
+      expression: '',
     });
-  };
-
-  /**
-   * Transfers all changes in the containerState.customization into
-   * the uiState of this visualization.
-   */
-  public transferCustomizationsToUiState() {
-    // Check for changes that need to be forwarded to the uiState
-    // Since the vis has an own listener on the uiState we don't need to
-    // pass anything from here to the handler.update method
-    const visCustomizations = { vis: this.input.vis, table: this.input.table };
-    if (visCustomizations.vis || visCustomizations.table) {
-      if (!_.isEqual(visCustomizations, this.visCustomizations)) {
-        this.visCustomizations = visCustomizations;
-        // Turn this off or the uiStateChangeHandler will fire for every modification.
-        this.vis.uiState.off('change', this.uiStateChangeHandler);
-        this.vis.uiState.clearAllKeys();
-
-        Object.entries(visCustomizations).forEach(([key, value]) => {
-          if (value) {
-            this.vis.uiState.set(key, value);
-          }
-        });
-
-        this.vis.uiState.on('change', this.uiStateChangeHandler);
-      }
-    } else if (this.parent) {
-      this.vis.uiState.clearAllKeys();
-    }
-  }
 
-  private handleChanges(): boolean {
-    this.transferCustomizationsToUiState();
+    const expressionAbortController$ = new BehaviorSubject(new AbortController());
+    let getExpressionParams: () => ReturnType = async () => ({
+      params: expressionParams$.getValue(),
+      abortController: expressionAbortController$.getValue(),
+    });
 
-    let dirty = false;
+    const {
+      api: customTimeRangeApi,
+      serialize: serializeCustomTimeRange,
+      comparators: customTimeRangeComparators,
+    } = initializeTimeRange(state);
 
-    // Check if timerange has changed
-    const nextTimeRange =
-      this.input.timeslice !== undefined
-        ? {
-            from: new Date(this.input.timeslice[0]).toISOString(),
-            to: new Date(this.input.timeslice[1]).toISOString(),
-            mode: 'absolute' as 'absolute',
-          }
-        : this.input.timeRange;
-    if (!_.isEqual(nextTimeRange, this.timeRange)) {
-      this.timeRange = _.cloneDeep(nextTimeRange);
-      dirty = true;
-    }
+    const searchSessionId$ = new BehaviorSubject('');
 
-    // Check if filters has changed
-    if (!onlyDisabledFiltersChanged(this.input.filters, this.filters)) {
-      this.filters = this.input.filters;
-      dirty = true;
-    }
+    const viewMode$ = apiPublishesViewMode(parentApi)
+      ? parentApi.viewMode
+      : new BehaviorSubject('view');
 
-    // Check if query has changed
-    if (!_.isEqual(this.input.query, this.query)) {
-      this.query = this.input.query;
-      dirty = true;
-    }
+    const executionContext = apiHasExecutionContext(parentApi)
+      ? parentApi.executionContext
+      : undefined;
 
-    if (this.searchSessionId !== this.input.searchSessionId) {
-      this.searchSessionId = this.input.searchSessionId;
-      dirty = true;
-    }
+    const disableTriggers = apiHasDisableTriggers(parentApi)
+      ? parentApi.disableTriggers
+      : undefined;
 
-    if (this.syncColors !== this.input.syncColors) {
-      this.syncColors = this.input.syncColors;
-      dirty = true;
-    }
+    const parentApiContext = apiHasAppContext(parentApi) ? parentApi.getAppContext() : undefined;
 
-    if (this.syncTooltips !== this.input.syncTooltips) {
-      this.syncTooltips = this.input.syncTooltips;
-      dirty = true;
-    }
+    const inspectorAdapters$ = new BehaviorSubject>({});
 
-    if (this.syncCursor !== this.input.syncCursor) {
-      this.syncCursor = this.input.syncCursor;
-      dirty = true;
+    // Track data views
+    let initialDataViews: DataView[] | undefined = [];
+    if (initialVisInstance.data.indexPattern)
+      initialDataViews = [initialVisInstance.data.indexPattern];
+    if (initialVisInstance.type.getUsedIndexPattern) {
+      initialDataViews = await initialVisInstance.type.getUsedIndexPattern(
+        initialVisInstance.params
+      );
     }
 
-    if (this.embeddableTitle !== this.getTitle()) {
-      this.embeddableTitle = this.getTitle();
-      dirty = true;
-    }
+    const dataLoading$ = new BehaviorSubject(true);
 
-    if (this.vis.description && this.domNode) {
-      this.domNode.setAttribute('data-description', this.vis.description);
-    }
+    const defaultPanelTitle = new BehaviorSubject(initialVisInstance.title);
 
-    return dirty;
-  }
-
-  private handleWarnings() {
-    const warnings: React.ReactNode[] = [];
-    if (this.getInspectorAdapters()?.requests) {
-      this.deps
-        .start()
-        .plugins.data.search.showWarnings(this.getInspectorAdapters()!.requests!, (warning) => {
-          if (hasUnsupportedDownsampledAggregationFailure(warning)) {
-            warnings.push(
-              i18n.translate('visualizations.embeddable.tsdbRollupWarning', {
-                defaultMessage:
-                  'Visualization uses a function that is unsupported by rolled up data. Select a different function or change the time range.',
-              })
+    const api = buildApi(
+      {
+        ...customTimeRangeApi,
+        ...titlesApi,
+        ...(dynamicActionsApi?.dynamicActionsApi ?? {}),
+        defaultPanelTitle,
+        dataLoading: dataLoading$,
+        dataViews: new BehaviorSubject(initialDataViews),
+        supportedTriggers: () => [
+          ACTION_CONVERT_TO_LENS,
+          APPLY_FILTER_TRIGGER,
+          SELECT_RANGE_TRIGGER,
+        ],
+        serializeState: () => {
+          const savedObjectProperties = savedObjectProperties$.getValue();
+          return serializeState({
+            serializedVis: vis$.getValue().serialize(),
+            titles: serializeTitles(),
+            id: savedObjectId$.getValue(),
+            linkedToLibrary:
+              // In the visualize editor, linkedToLibrary should always be false to force the full state to be serialized,
+              // instead of just passing a reference to the linked saved object. Other contexts like dashboards should
+              // serialize the state with just the savedObjectId so that the current revision of the vis is always used
+              apiIsOfType(parentApi, VISUALIZE_APP_NAME) ? false : linkedToLibrary$.getValue(),
+            ...(savedObjectProperties ? { savedObjectProperties } : {}),
+            ...(dynamicActionsApi?.serializeDynamicActions?.() ?? {}),
+            ...serializeCustomTimeRange(),
+          });
+        },
+        getVis: () => vis$.getValue(),
+        getInspectorAdapters: () => inspectorAdapters$.getValue(),
+        getTypeDisplayName: () =>
+          i18n.translate('visualizations.displayName', {
+            defaultMessage: 'visualization',
+          }),
+        onEdit: async () => {
+          const stateTransferService = embeddableStart.getStateTransfer();
+          const visId = savedObjectId$.getValue();
+          const editPath = visId ? urlFor(visId) : '#/edit_by_value';
+          const parentTimeRange = apiPublishesTimeRange(parentApi)
+            ? parentApi.timeRange$.getValue()
+            : {};
+          const customTimeRange = customTimeRangeApi.timeRange$.getValue();
+
+          await stateTransferService.navigateToEditor('visualize', {
+            path: editPath,
+            state: {
+              embeddableId: uuid,
+              valueInput: {
+                savedVis: vis$.getValue().serialize(),
+                title: api.panelTitle?.getValue(),
+                description: api.panelDescription?.getValue(),
+                timeRange: customTimeRange ?? parentTimeRange,
+              },
+              originatingApp: parentApiContext?.currentAppId ?? '',
+              searchSessionId: searchSessionId$.getValue() || undefined,
+              originatingPath: parentApiContext?.getCurrentPath?.(),
+            },
+          });
+        },
+        isEditingEnabled: () => {
+          if (viewMode$.getValue() !== 'edit') return false;
+          const readOnly = Boolean(vis$.getValue().type.disableEdit);
+          if (readOnly) return false;
+          const capabilities = getCapabilities();
+          const isByValue = !savedObjectId$.getValue();
+          if (isByValue)
+            return Boolean(
+              capabilities.dashboard?.showWriteControls && capabilities.visualize?.show
             );
-            return true;
-          }
-          if (this.vis.type.suppressWarnings?.()) {
-            // if the vis type wishes to supress all warnings, return true so the default logic won't pick it up
-            return true;
+          else return Boolean(capabilities.visualize?.save);
+        },
+        updateVis: async (visUpdates) => {
+          const currentSerializedVis = vis$.getValue().serialize();
+          serializedVis$.next({
+            ...currentSerializedVis,
+            ...visUpdates,
+            params: {
+              ...currentSerializedVis.params,
+              ...visUpdates.params,
+            },
+            data: {
+              ...currentSerializedVis.data,
+              ...visUpdates.data,
+            },
+          } as SerializedVis);
+          if (visUpdates.title) {
+            titlesApi.setPanelTitle(visUpdates.title);
           }
-        });
-    }
-
-    if (this.warningDomNode) {
-      const { core } = this.deps.start();
-      render(
-        
-          
-        ,
-        this.warningDomNode
-      );
-    }
-  }
-
-  // this is a hack to make editor still work, will be removed once we clean up editor
-  // @ts-ignore
-  hasInspector = () => Boolean(this.getInspectorAdapters());
-
-  onContainerLoading = () => {
-    this.renderComplete.dispatchInProgress();
-    this.updateOutput({
-      ...this.getOutput(),
-      loading: true,
-      rendered: false,
-      error: undefined,
-    });
-  };
-
-  onContainerData = () => {
-    this.handleWarnings();
-    this.updateOutput({
-      ...this.getOutput(),
-      loading: false,
-    });
-  };
-
-  onContainerRender = () => {
-    this.renderComplete.dispatchComplete();
-    this.updateOutput({
-      ...this.getOutput(),
-      rendered: true,
-    });
-  };
-
-  onContainerError = (error: ExpressionRenderError) => {
-    if (this.abortController) {
-      this.abortController.abort();
-    }
-    this.renderComplete.dispatchError();
-
-    if (isFallbackDataView(this.vis.data.indexPattern)) {
-      error = new Error(
-        i18n.translate('visualizations.missedDataView.errorMessage', {
-          defaultMessage: `Could not find the {type}: {id}`,
-          values: {
-            id: this.vis.data.indexPattern.id ?? '-',
-            type: this.vis.data.savedSearchId
-              ? i18n.translate('visualizations.noSearch.label', {
-                  defaultMessage: 'search',
-                })
-              : i18n.translate('visualizations.noDataView.label', {
-                  defaultMessage: 'data view',
-                }),
+        },
+        openInspector: () => {
+          const adapters = inspectorAdapters$.getValue();
+          if (!adapters) return;
+          const inspector = getInspector();
+          if (!inspector.isAvailable(adapters)) return;
+          return getInspector().open(adapters, {
+            title:
+              titlesApi.panelTitle?.getValue() ||
+              i18n.translate('visualizations.embeddable.inspectorTitle', {
+                defaultMessage: 'Inspector',
+              }),
+          });
+        },
+        // Library transforms
+        saveToLibrary: (newTitle: string) => {
+          titlesApi.setPanelTitle(newTitle);
+          const { rawState, references } = serializeState({
+            serializedVis: vis$.getValue().serialize(),
+            titles: {
+              ...serializeTitles(),
+              title: newTitle,
+            },
+          });
+          return saveToLibrary({
+            uiState: vis$.getValue().uiState,
+            rawState: rawState as VisualizeOutputState,
+            references,
+          });
+        },
+        canLinkToLibrary: () => !state.linkedToLibrary,
+        canUnlinkFromLibrary: () => !!state.linkedToLibrary,
+        checkForDuplicateTitle: () => false, // Handled by saveToLibrary action
+        getByValueState: () => ({
+          savedVis: vis$.getValue().serialize(),
+          ...serializeTitles(),
+        }),
+        getByReferenceState: (libraryId) =>
+          serializeState({
+            serializedVis: vis$.getValue().serialize(),
+            titles: serializeTitles(),
+            id: libraryId,
+            linkedToLibrary: true,
+          }).rawState,
+      },
+      {
+        ...titleComparators,
+        ...customTimeRangeComparators,
+        ...(dynamicActionsApi?.dynamicActionsComparator ?? {
+          enhancements: getUnchangingComparator(),
+        }),
+        serializedVis: [
+          serializedVis$,
+          (value) => {
+            serializedVis$.next(value);
           },
-        })
-      );
-    }
-
-    this.updateOutput({
-      ...this.getOutput(),
-      rendered: true,
-      error,
-    });
-  };
-
-  /**
-   *
-   * @param {Element} domNode
-   */
-  public async render(domNode: HTMLElement) {
-    this.timeRange = _.cloneDeep(this.input.timeRange);
-
-    this.transferCustomizationsToUiState();
-
-    const div = document.createElement('div');
-    div.className = `visualize panel-content panel-content--fullWidth`;
-    domNode.appendChild(div);
-
-    const warningDiv = document.createElement('div');
-    warningDiv.className = 'visPanel__warnings';
-    domNode.appendChild(warningDiv);
-    this.warningDomNode = warningDiv;
-
-    this.domNode = div;
-    super.render(this.domNode);
-    const { core } = this.deps.start();
-
-    render(
-      
-        
- -
-
, - this.domNode + (a, b) => { + const visA = a + ? { + ...omitBy(a, isEmpty), + data: omitBy(a.data, isNil), + params: omitBy(a.params, isNil), + } + : {}; + const visB = b + ? { + ...omitBy(b, isEmpty), + data: omitBy(b.data, isNil), + params: omitBy(b.params, isNil), + } + : {}; + return isEqual(visA, visB); + }, + ], + savedObjectId: [ + savedObjectId$, + (value) => savedObjectId$.next(value), + (a, b) => { + if (!a && !b) return true; + return a === b; + }, + ], + savedObjectProperties: getUnchangingComparator(), + linkedToLibrary: [linkedToLibrary$, (value) => linkedToLibrary$.next(value)], + } ); - const expressions = getExpressions(); - this.handler = await expressions.loader(this.domNode, undefined, { - renderMode: this.input.renderMode || 'view', - onRenderError: (element: HTMLElement, error: ExpressionRenderError) => { - this.onContainerError(error); - }, - executionContext: this.getExecutionContext(), - }); - - this.subscriptions.push( - this.handler.events$ - .pipe( - mergeMap(async (event) => { - // Visualize doesn't respond to sizing events, so ignore. - if (isChartSizeEvent(event)) { - return; - } - if (!this.input.disableTriggers) { - const triggerId = get(VIS_EVENT_TO_TRIGGER, event.name, VIS_EVENT_TO_TRIGGER.filter); - let context; - - if (triggerId === VIS_EVENT_TO_TRIGGER.applyFilter) { - context = { - embeddable: this, - timeFieldName: this.vis.data.indexPattern?.timeFieldName!, - ...event.data, - }; - } else { - context = { - embeddable: this, - data: { - timeFieldName: this.vis.data.indexPattern?.timeFieldName!, - ...event.data, - }, - }; + const fetchSubscription = fetch$(api) + .pipe( + switchMap(async (data) => { + const unifiedSearch = apiPublishesUnifiedSearch(parentApi) + ? { + query: data.query, + filters: data.filters, } + : {}; + const searchSessionId = apiPublishesSearchSession(parentApi) ? data.searchSessionId : ''; + searchSessionId$.next(searchSessionId); + const settings = apiPublishesSettings(parentApi) + ? { + syncColors: parentApi.settings.syncColors$.getValue(), + syncCursor: parentApi.settings.syncCursor$.getValue(), + syncTooltips: parentApi.settings.syncTooltips$.getValue(), + } + : {}; - await getUiActions().getTrigger(triggerId).exec(context); - } - }) - ) - .subscribe() - ); - - if (this.vis.description) { - div.setAttribute('data-description', this.vis.description); - } - - div.setAttribute('data-test-subj', 'visualizationLoader'); - div.setAttribute('data-shared-item', ''); - - this.subscriptions.push(this.handler.loading$.subscribe(this.onContainerLoading)); - this.subscriptions.push(this.handler.data$.subscribe(this.onContainerData)); - this.subscriptions.push(this.handler.render$.subscribe(this.onContainerRender)); - - this.subscriptions.push( - this.getUpdated$().subscribe(() => { - const { error } = this.getOutput(); - - if (error) { - render(this.renderError(error), this.domNode); - } - }) - ); - - await this.updateHandler(); - } - - private renderError(error: ErrorLike | string) { - const { core } = this.deps.start(); - if (isFallbackDataView(this.vis.data.indexPattern)) { - return ( - - - - ); - } - - return ( - - - - ); - } + dataLoading$.next(true); - public destroy() { - super.destroy(); - this.subscriptions.forEach((s) => s.unsubscribe()); - this.vis.uiState.off('change', this.uiStateChangeHandler); - this.vis.uiState.off('reload', this.reload); + const timeslice = apiPublishesTimeslice(parentApi) + ? parentApi.timeslice$.getValue() + : undefined; - if (this.handler) { - this.handler.destroy(); - this.handler.getElement().remove(); - } - } - - public reload = async () => { - await this.handleVisUpdate(); - }; - - private getExecutionContext() { - const parentContext = this.parent?.getInput().executionContext || getExecutionContext().get(); - const child: KibanaExecutionContext = { - type: 'agg_based', - name: this.vis.type.name, - id: this.vis.id ?? 'new', - description: this.vis.title || this.input.title || this.vis.type.name, - url: this.output.editUrl, - }; + const customTimeRange = customTimeRangeApi.timeRange$.getValue(); + const parentTimeRange = apiPublishesTimeRange(parentApi) ? data.timeRange : undefined; + const timesliceTimeRange = timeslice + ? { + from: new Date(timeslice[0]).toISOString(), + to: new Date(timeslice[1]).toISOString(), + mode: 'absolute' as 'absolute', + } + : undefined; + + // Precedence should be: + // custom time range from state > + // timeslice time range > + // parent API time range from e.g. unified search + const timeRangeToRender = customTimeRange ?? timesliceTimeRange ?? parentTimeRange; + + getExpressionParams = async () => { + return await getExpressionRendererProps({ + unifiedSearch, + vis: vis$.getValue(), + settings, + disableTriggers, + searchSessionId, + parentExecutionContext: executionContext, + abortController: expressionAbortController$.getValue(), + timeRange: timeRangeToRender, + onRender: async (renderCount) => { + if (renderCount === renderCount$.getValue()) return; + renderCount$.next(renderCount); + const visInstance = vis$.getValue(); + const visTypeName = visInstance.type.name; + + let telemetryVisTypeName = visTypeName; + if (visTypeName === 'metrics') { + telemetryVisTypeName = 'legacy_metric'; + } + if (visTypeName === 'pie' && visInstance.params.isDonut) { + telemetryVisTypeName = 'donut'; + } + if ( + visTypeName === 'area' && + visInstance.params.seriesParams.some( + (seriesParams: { mode: string }) => seriesParams.mode === 'stacked' + ) + ) { + telemetryVisTypeName = 'area_stacked'; + } + + getUsageCollection().reportUiCounter( + executionContext?.type ?? '', + 'count', + `render_agg_based_${telemetryVisTypeName}` + ); + + if (hasRendered$.getValue() === true) return; + hasRendered$.next(true); + hasRendered$.complete(); + }, + onEvent: async (event) => { + // Visualize doesn't respond to sizing events, so ignore. + if (isChartSizeEvent(event)) { + return; + } + const currentVis = vis$.getValue(); + if (!disableTriggers) { + const triggerId = get( + VIS_EVENT_TO_TRIGGER, + event.name, + VIS_EVENT_TO_TRIGGER.filter + ); + let context; + + if (triggerId === VIS_EVENT_TO_TRIGGER.applyFilter) { + context = { + embeddable: api, + timeFieldName: currentVis.data.indexPattern?.timeFieldName!, + ...event.data, + }; + } else { + context = { + embeddable: api, + data: { + timeFieldName: currentVis.data.indexPattern?.timeFieldName!, + ...event.data, + }, + }; + } + await getUiActions().getTrigger(triggerId).exec(context); + } + }, + onData: (_, inspectorAdapters) => { + inspectorAdapters$.next( + typeof inspectorAdapters === 'function' ? inspectorAdapters() : inspectorAdapters + ); + dataLoading$.next(false); + }, + }); + }; + return await getExpressionParams(); + }) + ) + .subscribe(({ params, abortController }) => { + if (params) expressionParams$.next(params); + expressionAbortController$.next(abortController); + }); return { - ...parentContext, - child, - }; - } - - private async updateHandler() { - const context = this.getExecutionContext(); - - this.expressionVariables = await this.vis.type.getExpressionVariables?.( - this.vis, - this.timefilter - ); - - this.expressionVariablesSubject.next(this.expressionVariables); - - const expressionParams: IExpressionLoaderParams = { - searchContext: { - timeRange: this.timeRange, - query: this.input.query, - filters: this.input.filters, - disableWarningToasts: true, - }, - variables: { - embeddableTitle: this.getTitle(), - ...this.expressionVariables, + api, + Component: () => { + const expressionParams = useStateFromPublishingSubject(expressionParams$); + const renderCount = useStateFromPublishingSubject(renderCount$); + const hasRendered = useStateFromPublishingSubject(hasRendered$); + const domNode = useRef(null); + const { error, isLoading } = useExpressionRenderer(domNode, expressionParams); + + useEffect(() => { + return () => { + fetchSubscription.unsubscribe(); + maybeStopDynamicActions?.stopDynamicActions(); + }; + }, []); + + useEffect(() => { + if (hasRendered && domNode.current) { + dispatchRenderComplete(domNode.current); + } + }, [hasRendered]); + + return ( +
+ {/* Replicate the loading state for the expression renderer to avoid FOUC */} + + {isLoading && } + {!isLoading && error && ( + + {i18n.translate('visualizations.embeddable.errorTitle', { + defaultMessage: 'Unable to load visualization ', + })} + + } + body={ +

+ {error.name}: {error.message} +

+ } + /> + )} +
+
+ ); }, - searchSessionId: this.input.searchSessionId, - syncColors: this.input.syncColors, - syncTooltips: this.input.syncTooltips, - syncCursor: this.input.syncCursor, - uiState: this.vis.uiState, - interactive: !this.input.disableTriggers, - inspectorAdapters: this.inspectorAdapters, - executionContext: context, - }; - if (this.abortController) { - this.abortController.abort(); - } - this.abortController = new AbortController(); - const abortController = this.abortController; - - try { - this.expression = await toExpressionAst(this.vis, { - timefilter: this.timefilter, - timeRange: this.timeRange, - abortSignal: this.abortController!.signal, - }); - } catch (e) { - this.onContainerError(e); - } - - if (this.handler && !abortController.signal.aborted) { - this.handler.update(this.expression, expressionParams); - } - } - - private handleVisUpdate = async () => { - this.handleChanges(); - await this.updateHandler(); - }; - - private uiStateChangeHandler = () => { - this.updateInput({ - ...this.vis.uiState.toJSON(), - }); - }; - - public supportedTriggers(): string[] { - return this.vis.type.getSupportedTriggers?.(this.vis.params) ?? []; - } - - public getExpressionVariables$() { - return this.expressionVariablesSubject.asObservable(); - } - - public getExpressionVariables() { - return this.expressionVariables; - } - - inputIsRefType = (input: VisualizeInput): input is VisualizeByReferenceInput => { - if (!this.attributeService) { - throw new Error('AttributeService must be defined for getInputAsRefType'); - } - return this.attributeService.inputIsRefType(input as VisualizeByReferenceInput); - }; - - getInputAsValueType = async (): Promise => { - const input = { - savedVis: this.vis.serialize(), - }; - delete input.savedVis.id; - _.unset(input, 'savedVis.title'); - return new Promise((resolve) => { - resolve({ ...(input as VisualizeByValueInput) }); - }); - }; - - getInputAsRefType = async (): Promise => { - const { plugins, core } = this.deps.start(); - const { data, spaces, savedObjectsTaggingOss } = plugins; - const savedVis = await getSavedVisualization({ - search: data.search, - dataViews: data.dataViews, - spaces, - savedObjectsTagging: savedObjectsTaggingOss?.getTaggingApi(), - ...core, - }); - if (!savedVis) { - throw new Error('Error creating a saved vis object'); - } - if (!this.attributeService) { - throw new Error('AttributeService must be defined for getInputAsRefType'); - } - const saveModalTitle = this.getTitle() - ? this.getTitle() - : i18n.translate('visualizations.embeddable.placeholderTitle', { - defaultMessage: 'Placeholder Title', - }); - // @ts-ignore - const attributes: VisualizeSavedObjectAttributes = { - savedVis, - vis: this.vis, - title: this.vis.title, }; - return this.attributeService.getInputAsRefType( - { - id: this.id, - attributes, - }, - { showSaveModal: true, saveModalTitle } - ); - }; -} + }, +}); diff --git a/src/plugins/visualizations/public/index.ts b/src/plugins/visualizations/public/index.ts index 09048ba87d83b..3de1bfc01f2ef 100644 --- a/src/plugins/visualizations/public/index.ts +++ b/src/plugins/visualizations/public/index.ts @@ -10,7 +10,7 @@ import { PublicContract } from '@kbn/utility-types'; import { PluginInitializerContext } from '@kbn/core/public'; import { VisualizationsPlugin, VisualizationsSetup, VisualizationsStart } from './plugin'; -import type { VisualizeEmbeddableFactory, VisualizeEmbeddable } from './embeddable'; +import type { VisualizeEmbeddableFactory, VisualizeEmbeddable } from './legacy/embeddable'; export function plugin(initializerContext: PluginInitializerContext) { return new VisualizationsPlugin(initializerContext); @@ -18,11 +18,8 @@ export function plugin(initializerContext: PluginInitializerContext) { /** @public static code */ export { TypesService } from './vis_types/types_service'; -export { - apiHasVisualizeConfig, - VIS_EVENT_TO_TRIGGER, - COMMON_VISUALIZATION_GROUPING, -} from './embeddable'; +export { VIS_EVENT_TO_TRIGGER } from './embeddable'; +export { apiHasVisualizeConfig, COMMON_VISUALIZATION_GROUPING } from './legacy/embeddable'; export { VisualizationContainer } from './components'; export { getVisSchemas } from './vis_schemas'; @@ -38,13 +35,13 @@ export type { VisualizationClient, SerializableAttributes, } from './vis_types'; -export type { VisualizeEditorInput } from './react_embeddable/types'; +export type { VisualizeEditorInput } from './embeddable/types'; export type { Vis, SerializedVis, SerializedVisData, VisData } from './vis'; export type VisualizeEmbeddableFactoryContract = PublicContract; export type VisualizeEmbeddableContract = PublicContract; export type { SchemaConfig } from '../common/types'; export { updateOldState } from './legacy/vis_update_state'; -export type { VisualizeInput, VisualizeEmbeddable, HasVisualizeConfig } from './embeddable'; +export type { VisualizeInput, VisualizeEmbeddable, HasVisualizeConfig } from './legacy/embeddable'; export type { PersistedState } from './persisted_state'; export type { ISavedVis, diff --git a/src/plugins/visualizations/public/embeddable/constants.ts b/src/plugins/visualizations/public/legacy/embeddable/constants.ts similarity index 91% rename from src/plugins/visualizations/public/embeddable/constants.ts rename to src/plugins/visualizations/public/legacy/embeddable/constants.ts index 85c8554265541..79d87ec59b1e1 100644 --- a/src/plugins/visualizations/public/embeddable/constants.ts +++ b/src/plugins/visualizations/public/legacy/embeddable/constants.ts @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; -export { VISUALIZE_EMBEDDABLE_TYPE } from '../../common/constants'; +export { VISUALIZE_EMBEDDABLE_TYPE } from '../../../common/constants'; export const COMMON_VISUALIZATION_GROUPING = [ { diff --git a/src/plugins/visualizations/public/embeddable/create_vis_embeddable_from_object.ts b/src/plugins/visualizations/public/legacy/embeddable/create_vis_embeddable_from_object.ts similarity index 94% rename from src/plugins/visualizations/public/embeddable/create_vis_embeddable_from_object.ts rename to src/plugins/visualizations/public/legacy/embeddable/create_vis_embeddable_from_object.ts index b496be0a9e810..69ed12302f4ec 100644 --- a/src/plugins/visualizations/public/embeddable/create_vis_embeddable_from_object.ts +++ b/src/plugins/visualizations/public/legacy/embeddable/create_vis_embeddable_from_object.ts @@ -9,7 +9,7 @@ import { IContainer, ErrorEmbeddable, AttributeService } from '@kbn/embeddable-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { Vis } from '../types'; +import { Vis } from '../../types'; import type { VisualizeInput, VisualizeEmbeddable, @@ -17,8 +17,8 @@ import type { VisualizeByReferenceInput, VisualizeSavedObjectAttributes, } from './visualize_embeddable'; -import { getHttp, getTimeFilter, getCapabilities } from '../services'; -import { urlFor } from '../utils/saved_visualize_utils'; +import { getHttp, getTimeFilter, getCapabilities } from '../../services'; +import { urlFor } from '../../utils/saved_visualize_utils'; import { VisualizeEmbeddableFactoryDeps } from './visualize_embeddable_factory'; import { createVisualizeEmbeddableAsync } from './visualize_embeddable_async'; diff --git a/src/plugins/visualizations/public/embeddable/embeddables.scss b/src/plugins/visualizations/public/legacy/embeddable/embeddables.scss similarity index 100% rename from src/plugins/visualizations/public/embeddable/embeddables.scss rename to src/plugins/visualizations/public/legacy/embeddable/embeddables.scss diff --git a/src/plugins/visualizations/public/legacy/embeddable/index.ts b/src/plugins/visualizations/public/legacy/embeddable/index.ts new file mode 100644 index 0000000000000..6afee494e6f4f --- /dev/null +++ b/src/plugins/visualizations/public/legacy/embeddable/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { VisualizeEmbeddableFactory } from './visualize_embeddable_factory'; +export { VISUALIZE_EMBEDDABLE_TYPE, COMMON_VISUALIZATION_GROUPING } from './constants'; +export { createVisEmbeddableFromObject } from './create_vis_embeddable_from_object'; + +export type { VisualizeEmbeddable, VisualizeInput } from './visualize_embeddable'; +export { + type HasVisualizeConfig, + apiHasVisualizeConfig, +} from '../../embeddable/interfaces/has_visualize_config'; diff --git a/src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable.tsx b/src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable.tsx new file mode 100644 index 0000000000000..85166441a1634 --- /dev/null +++ b/src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable.tsx @@ -0,0 +1,717 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import _, { get } from 'lodash'; +import { Subscription, ReplaySubject, mergeMap } from 'rxjs'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { render } from 'react-dom'; +import { EuiLoadingChart } from '@elastic/eui'; +import { Filter, onlyDisabledFiltersChanged, Query, TimeRange } from '@kbn/es-query'; +import type { KibanaExecutionContext, SavedObjectAttributes } from '@kbn/core/public'; +import type { ErrorLike } from '@kbn/expressions-plugin/common'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; +import { TimefilterContract } from '@kbn/data-plugin/public'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { Warnings } from '@kbn/charts-plugin/public'; +import { hasUnsupportedDownsampledAggregationFailure } from '@kbn/search-response-warnings'; +import { + Adapters, + AttributeService, + Embeddable, + EmbeddableInput, + EmbeddableOutput, + FilterableEmbeddable, + IContainer, + ReferenceOrValueEmbeddable, + SavedObjectEmbeddableInput, +} from '@kbn/embeddable-plugin/public'; +import { + ExpressionAstExpression, + ExpressionLoader, + ExpressionRenderError, + IExpressionLoaderParams, +} from '@kbn/expressions-plugin/public'; +import type { RenderMode } from '@kbn/expressions-plugin/common'; +import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/public'; +import { mapAndFlattenFilters } from '@kbn/data-plugin/public'; +import { isChartSizeEvent } from '@kbn/chart-expressions-common'; +import { isFallbackDataView } from '../../visualize_app/utils'; +import { VisualizationMissedSavedObjectError } from '../../components/visualization_missed_saved_object_error'; +import VisualizationError from '../../components/visualization_error'; +import { VISUALIZE_EMBEDDABLE_TYPE } from './constants'; +import { SerializedVis, Vis } from '../../vis'; +import { getApplication, getExecutionContext, getExpressions, getUiActions } from '../../services'; +import { VIS_EVENT_TO_TRIGGER } from '../../embeddable/events'; +import { VisualizeEmbeddableFactoryDeps } from './visualize_embeddable_factory'; +import { getSavedVisualization } from '../../utils/saved_visualize_utils'; +import { VisSavedObject } from '../../types'; +import { toExpressionAst } from '../../embeddable/to_ast'; + +export interface VisualizeEmbeddableConfiguration { + vis: Vis; + indexPatterns?: DataView[]; + editPath: string; + editUrl: string; + capabilities: { visualizeSave: boolean; dashboardSave: boolean; visualizeOpen: boolean }; + deps: VisualizeEmbeddableFactoryDeps; +} + +export interface VisualizeInput extends EmbeddableInput { + vis?: { + colors?: { [key: string]: string }; + }; + savedVis?: SerializedVis; + renderMode?: RenderMode; + table?: unknown; + query?: Query; + filters?: Filter[]; + timeRange?: TimeRange; + timeslice?: [number, number]; +} + +export interface VisualizeOutput extends EmbeddableOutput { + editPath: string; + editApp: string; + editUrl: string; + indexPatterns?: DataView[]; + visTypeName: string; +} + +export type VisualizeSavedObjectAttributes = SavedObjectAttributes & { + title: string; + vis?: Vis; + savedVis?: VisSavedObject; +}; +export type VisualizeByValueInput = { attributes: VisualizeSavedObjectAttributes } & VisualizeInput; +export type VisualizeByReferenceInput = SavedObjectEmbeddableInput & VisualizeInput; + +/** @deprecated + * VisualizeEmbeddable is no longer registered with the legacy embeddable system and is only + * used within the visualize editor. + */ +export class VisualizeEmbeddable + extends Embeddable + implements + ReferenceOrValueEmbeddable, + FilterableEmbeddable +{ + private handler?: ExpressionLoader; + private timefilter: TimefilterContract; + private timeRange?: TimeRange; + private query?: Query; + private filters?: Filter[]; + private searchSessionId?: string; + private syncColors?: boolean; + private syncTooltips?: boolean; + private syncCursor?: boolean; + private embeddableTitle?: string; + private visCustomizations?: Pick; + private subscriptions: Subscription[] = []; + private expression?: ExpressionAstExpression; + private vis: Vis; + private domNode: any; + private warningDomNode: any; + public readonly type = VISUALIZE_EMBEDDABLE_TYPE; + private abortController?: AbortController; + private readonly deps: VisualizeEmbeddableFactoryDeps; + private readonly inspectorAdapters?: Adapters; + private attributeService?: AttributeService< + VisualizeSavedObjectAttributes, + VisualizeByValueInput, + VisualizeByReferenceInput + >; + private expressionVariables: Record | undefined; + private readonly expressionVariablesSubject = new ReplaySubject< + Record | undefined + >(1); + + constructor( + timefilter: TimefilterContract, + { vis, editPath, editUrl, indexPatterns, deps, capabilities }: VisualizeEmbeddableConfiguration, + initialInput: VisualizeInput, + attributeService?: AttributeService< + VisualizeSavedObjectAttributes, + VisualizeByValueInput, + VisualizeByReferenceInput + >, + parent?: IContainer + ) { + super( + initialInput, + { + defaultTitle: vis.title, + defaultDescription: vis.description, + editPath, + editApp: 'visualize', + editUrl, + indexPatterns, + visTypeName: vis.type.name, + }, + parent + ); + this.deps = deps; + this.timefilter = timefilter; + this.syncColors = this.input.syncColors; + this.syncTooltips = this.input.syncTooltips; + this.syncCursor = this.input.syncCursor; + this.searchSessionId = this.input.searchSessionId; + this.query = this.input.query; + this.embeddableTitle = this.getTitle(); + + this.vis = vis; + this.vis.uiState.on('change', this.uiStateChangeHandler); + this.vis.uiState.on('reload', this.reload); + this.attributeService = attributeService; + + if (this.attributeService) { + const readOnly = Boolean(vis.type.disableEdit); + const isByValue = !this.inputIsRefType(initialInput); + const editable = readOnly + ? false + : capabilities.visualizeSave || + (isByValue && capabilities.dashboardSave && capabilities.visualizeOpen); + this.updateOutput({ ...this.getOutput(), editable }); + } + + this.subscriptions.push( + this.getInput$().subscribe(() => { + const isDirty = this.handleChanges(); + + if (isDirty && this.handler) { + this.updateHandler(); + } + }) + ); + + const inspectorAdapters = this.vis.type.inspectorAdapters; + + if (inspectorAdapters) { + this.inspectorAdapters = + typeof inspectorAdapters === 'function' ? inspectorAdapters() : inspectorAdapters; + } + } + + public reportsEmbeddableLoad() { + return true; + } + + public getVis() { + return this.vis; + } + + /** + * Gets the Visualize embeddable's local filters + * @returns Local/panel-level array of filters for Visualize embeddable + */ + public getFilters() { + const filters = this.vis.serialize().data.searchSource?.filter ?? []; + // must clone the filters so that it's not read only, because mapAndFlattenFilters modifies the array + return mapAndFlattenFilters(_.cloneDeep(filters)); + } + + /** + * Gets the Visualize embeddable's local query + * @returns Local/panel-level query for Visualize embeddable + */ + public getQuery() { + return this.vis.serialize().data.searchSource.query; + } + + public getInspectorAdapters = () => { + if (!this.handler || (this.inspectorAdapters && !Object.keys(this.inspectorAdapters).length)) { + return undefined; + } + return this.handler.inspect(); + }; + + public openInspector = () => { + if (!this.handler) return; + + const adapters = this.handler.inspect(); + if (!adapters) return; + + return this.deps.start().plugins.inspector.open(adapters, { + title: + this.getTitle() || + i18n.translate('visualizations.embeddable.inspectorTitle', { + defaultMessage: 'Inspector', + }), + }); + }; + + /** + * Transfers all changes in the containerState.customization into + * the uiState of this visualization. + */ + public transferCustomizationsToUiState() { + // Check for changes that need to be forwarded to the uiState + // Since the vis has an own listener on the uiState we don't need to + // pass anything from here to the handler.update method + const visCustomizations = { vis: this.input.vis, table: this.input.table }; + if (visCustomizations.vis || visCustomizations.table) { + if (!_.isEqual(visCustomizations, this.visCustomizations)) { + this.visCustomizations = visCustomizations; + // Turn this off or the uiStateChangeHandler will fire for every modification. + this.vis.uiState.off('change', this.uiStateChangeHandler); + this.vis.uiState.clearAllKeys(); + + Object.entries(visCustomizations).forEach(([key, value]) => { + if (value) { + this.vis.uiState.set(key, value); + } + }); + + this.vis.uiState.on('change', this.uiStateChangeHandler); + } + } else if (this.parent) { + this.vis.uiState.clearAllKeys(); + } + } + + private handleChanges(): boolean { + this.transferCustomizationsToUiState(); + + let dirty = false; + + // Check if timerange has changed + const nextTimeRange = + this.input.timeslice !== undefined + ? { + from: new Date(this.input.timeslice[0]).toISOString(), + to: new Date(this.input.timeslice[1]).toISOString(), + mode: 'absolute' as 'absolute', + } + : this.input.timeRange; + if (!_.isEqual(nextTimeRange, this.timeRange)) { + this.timeRange = _.cloneDeep(nextTimeRange); + dirty = true; + } + + // Check if filters has changed + if (!onlyDisabledFiltersChanged(this.input.filters, this.filters)) { + this.filters = this.input.filters; + dirty = true; + } + + // Check if query has changed + if (!_.isEqual(this.input.query, this.query)) { + this.query = this.input.query; + dirty = true; + } + + if (this.searchSessionId !== this.input.searchSessionId) { + this.searchSessionId = this.input.searchSessionId; + dirty = true; + } + + if (this.syncColors !== this.input.syncColors) { + this.syncColors = this.input.syncColors; + dirty = true; + } + + if (this.syncTooltips !== this.input.syncTooltips) { + this.syncTooltips = this.input.syncTooltips; + dirty = true; + } + + if (this.syncCursor !== this.input.syncCursor) { + this.syncCursor = this.input.syncCursor; + dirty = true; + } + + if (this.embeddableTitle !== this.getTitle()) { + this.embeddableTitle = this.getTitle(); + dirty = true; + } + + if (this.vis.description && this.domNode) { + this.domNode.setAttribute('data-description', this.vis.description); + } + + return dirty; + } + + private handleWarnings() { + const warnings: React.ReactNode[] = []; + if (this.getInspectorAdapters()?.requests) { + this.deps + .start() + .plugins.data.search.showWarnings(this.getInspectorAdapters()!.requests!, (warning) => { + if (hasUnsupportedDownsampledAggregationFailure(warning)) { + warnings.push( + i18n.translate('visualizations.embeddable.tsdbRollupWarning', { + defaultMessage: + 'Visualization uses a function that is unsupported by rolled up data. Select a different function or change the time range.', + }) + ); + return true; + } + if (this.vis.type.suppressWarnings?.()) { + // if the vis type wishes to supress all warnings, return true so the default logic won't pick it up + return true; + } + }); + } + + if (this.warningDomNode) { + const { core } = this.deps.start(); + render( + + + , + this.warningDomNode + ); + } + } + + // this is a hack to make editor still work, will be removed once we clean up editor + // @ts-ignore + hasInspector = () => Boolean(this.getInspectorAdapters()); + + onContainerLoading = () => { + this.renderComplete.dispatchInProgress(); + this.updateOutput({ + ...this.getOutput(), + loading: true, + rendered: false, + error: undefined, + }); + }; + + onContainerData = () => { + this.handleWarnings(); + this.updateOutput({ + ...this.getOutput(), + loading: false, + }); + }; + + onContainerRender = () => { + this.renderComplete.dispatchComplete(); + this.updateOutput({ + ...this.getOutput(), + rendered: true, + }); + }; + + onContainerError = (error: ExpressionRenderError) => { + if (this.abortController) { + this.abortController.abort(); + } + this.renderComplete.dispatchError(); + + if (isFallbackDataView(this.vis.data.indexPattern)) { + error = new Error( + i18n.translate('visualizations.missedDataView.errorMessage', { + defaultMessage: `Could not find the {type}: {id}`, + values: { + id: this.vis.data.indexPattern.id ?? '-', + type: this.vis.data.savedSearchId + ? i18n.translate('visualizations.noSearch.label', { + defaultMessage: 'search', + }) + : i18n.translate('visualizations.noDataView.label', { + defaultMessage: 'data view', + }), + }, + }) + ); + } + + this.updateOutput({ + ...this.getOutput(), + rendered: true, + error, + }); + }; + + /** + * + * @param {Element} domNode + */ + public async render(domNode: HTMLElement) { + this.timeRange = _.cloneDeep(this.input.timeRange); + + this.transferCustomizationsToUiState(); + + const div = document.createElement('div'); + div.className = `visualize panel-content panel-content--fullWidth`; + domNode.appendChild(div); + + const warningDiv = document.createElement('div'); + warningDiv.className = 'visPanel__warnings'; + domNode.appendChild(warningDiv); + this.warningDomNode = warningDiv; + + this.domNode = div; + super.render(this.domNode); + const { core } = this.deps.start(); + + render( + +
+ +
+
, + this.domNode + ); + + const expressions = getExpressions(); + this.handler = await expressions.loader(this.domNode, undefined, { + renderMode: this.input.renderMode || 'view', + onRenderError: (element: HTMLElement, error: ExpressionRenderError) => { + this.onContainerError(error); + }, + executionContext: this.getExecutionContext(), + }); + + this.subscriptions.push( + this.handler.events$ + .pipe( + mergeMap(async (event) => { + // Visualize doesn't respond to sizing events, so ignore. + if (isChartSizeEvent(event)) { + return; + } + if (!this.input.disableTriggers) { + const triggerId = get(VIS_EVENT_TO_TRIGGER, event.name, VIS_EVENT_TO_TRIGGER.filter); + let context; + + if (triggerId === VIS_EVENT_TO_TRIGGER.applyFilter) { + context = { + embeddable: this, + timeFieldName: this.vis.data.indexPattern?.timeFieldName!, + ...event.data, + }; + } else { + context = { + embeddable: this, + data: { + timeFieldName: this.vis.data.indexPattern?.timeFieldName!, + ...event.data, + }, + }; + } + + await getUiActions().getTrigger(triggerId).exec(context); + } + }) + ) + .subscribe() + ); + + if (this.vis.description) { + div.setAttribute('data-description', this.vis.description); + } + + div.setAttribute('data-test-subj', 'visualizationLoader'); + div.setAttribute('data-shared-item', ''); + + this.subscriptions.push(this.handler.loading$.subscribe(this.onContainerLoading)); + this.subscriptions.push(this.handler.data$.subscribe(this.onContainerData)); + this.subscriptions.push(this.handler.render$.subscribe(this.onContainerRender)); + + this.subscriptions.push( + this.getUpdated$().subscribe(() => { + const { error } = this.getOutput(); + + if (error) { + render(this.renderError(error), this.domNode); + } + }) + ); + + await this.updateHandler(); + } + + private renderError(error: ErrorLike | string) { + const { core } = this.deps.start(); + if (isFallbackDataView(this.vis.data.indexPattern)) { + return ( + + + + ); + } + + return ( + + + + ); + } + + public destroy() { + super.destroy(); + this.subscriptions.forEach((s) => s.unsubscribe()); + this.vis.uiState.off('change', this.uiStateChangeHandler); + this.vis.uiState.off('reload', this.reload); + + if (this.handler) { + this.handler.destroy(); + this.handler.getElement().remove(); + } + } + + public reload = async () => { + await this.handleVisUpdate(); + }; + + private getExecutionContext() { + const parentContext = this.parent?.getInput().executionContext || getExecutionContext().get(); + const child: KibanaExecutionContext = { + type: 'agg_based', + name: this.vis.type.name, + id: this.vis.id ?? 'new', + description: this.vis.title || this.input.title || this.vis.type.name, + url: this.output.editUrl, + }; + + return { + ...parentContext, + child, + }; + } + + private async updateHandler() { + const context = this.getExecutionContext(); + + this.expressionVariables = await this.vis.type.getExpressionVariables?.( + this.vis, + this.timefilter + ); + + this.expressionVariablesSubject.next(this.expressionVariables); + + const expressionParams: IExpressionLoaderParams = { + searchContext: { + timeRange: this.timeRange, + query: this.input.query, + filters: this.input.filters, + disableWarningToasts: true, + }, + variables: { + embeddableTitle: this.getTitle(), + ...this.expressionVariables, + }, + searchSessionId: this.input.searchSessionId, + syncColors: this.input.syncColors, + syncTooltips: this.input.syncTooltips, + syncCursor: this.input.syncCursor, + uiState: this.vis.uiState, + interactive: !this.input.disableTriggers, + inspectorAdapters: this.inspectorAdapters, + executionContext: context, + }; + if (this.abortController) { + this.abortController.abort(); + } + this.abortController = new AbortController(); + const abortController = this.abortController; + + try { + this.expression = await toExpressionAst(this.vis, { + timefilter: this.timefilter, + timeRange: this.timeRange, + abortSignal: this.abortController!.signal, + }); + } catch (e) { + this.onContainerError(e); + } + + if (this.handler && !abortController.signal.aborted) { + this.handler.update(this.expression, expressionParams); + } + } + + private handleVisUpdate = async () => { + this.handleChanges(); + await this.updateHandler(); + }; + + private uiStateChangeHandler = () => { + this.updateInput({ + ...this.vis.uiState.toJSON(), + }); + }; + + public supportedTriggers(): string[] { + return this.vis.type.getSupportedTriggers?.(this.vis.params) ?? []; + } + + public getExpressionVariables$() { + return this.expressionVariablesSubject.asObservable(); + } + + public getExpressionVariables() { + return this.expressionVariables; + } + + inputIsRefType = (input: VisualizeInput): input is VisualizeByReferenceInput => { + if (!this.attributeService) { + throw new Error('AttributeService must be defined for getInputAsRefType'); + } + return this.attributeService.inputIsRefType(input as VisualizeByReferenceInput); + }; + + getInputAsValueType = async (): Promise => { + const input = { + savedVis: this.vis.serialize(), + }; + delete input.savedVis.id; + _.unset(input, 'savedVis.title'); + return new Promise((resolve) => { + resolve({ ...(input as VisualizeByValueInput) }); + }); + }; + + getInputAsRefType = async (): Promise => { + const { plugins, core } = this.deps.start(); + const { data, spaces, savedObjectsTaggingOss } = plugins; + const savedVis = await getSavedVisualization({ + search: data.search, + dataViews: data.dataViews, + spaces, + savedObjectsTagging: savedObjectsTaggingOss?.getTaggingApi(), + ...core, + }); + if (!savedVis) { + throw new Error('Error creating a saved vis object'); + } + if (!this.attributeService) { + throw new Error('AttributeService must be defined for getInputAsRefType'); + } + const saveModalTitle = this.getTitle() + ? this.getTitle() + : i18n.translate('visualizations.embeddable.placeholderTitle', { + defaultMessage: 'Placeholder Title', + }); + // @ts-ignore + const attributes: VisualizeSavedObjectAttributes = { + savedVis, + vis: this.vis, + title: this.vis.title, + }; + return this.attributeService.getInputAsRefType( + { + id: this.id, + attributes, + }, + { showSaveModal: true, saveModalTitle } + ); + }; +} diff --git a/src/plugins/visualizations/public/embeddable/visualize_embeddable_async.ts b/src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable_async.ts similarity index 100% rename from src/plugins/visualizations/public/embeddable/visualize_embeddable_async.ts rename to src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable_async.ts diff --git a/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.test.ts b/src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable_factory.test.ts similarity index 100% rename from src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.test.ts rename to src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable_factory.test.ts diff --git a/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx b/src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable_factory.tsx similarity index 96% rename from src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx rename to src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable_factory.tsx index e38924a76ef28..7594c8d42f2ea 100644 --- a/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx +++ b/src/plugins/visualizations/public/legacy/embeddable/visualize_embeddable_factory.tsx @@ -28,7 +28,7 @@ import { AttributeService, } from '@kbn/embeddable-plugin/public'; import type { StartServicesGetter } from '@kbn/kibana-utils-plugin/public'; -import { checkForDuplicateTitle } from '../utils/saved_objects_utils/check_for_duplicate_title'; +import { checkForDuplicateTitle } from '../../utils/saved_objects_utils/check_for_duplicate_title'; import type { VisualizeByReferenceInput, VisualizeByValueInput, @@ -38,24 +38,24 @@ import type { VisualizeSavedObjectAttributes, } from './visualize_embeddable'; import { VISUALIZE_EMBEDDABLE_TYPE } from './constants'; -import type { SerializedVis, Vis } from '../vis'; -import { createVisAsync } from '../vis_async'; -import { getCapabilities, getTypes } from '../services'; -import { showNewVisModal } from '../wizard'; +import type { SerializedVis, Vis } from '../../vis'; +import { createVisAsync } from '../../vis_async'; +import { getCapabilities, getTypes } from '../../services'; +import { showNewVisModal } from '../../wizard'; import { convertToSerializedVis, getSavedVisualization, saveVisualization, getFullPath, -} from '../utils/saved_visualize_utils'; +} from '../../utils/saved_visualize_utils'; import { extractControlsReferences, extractTimeSeriesReferences, injectTimeSeriesReferences, injectControlsReferences, -} from '../utils/saved_visualization_references'; +} from '../../utils/saved_visualization_references'; import { createVisEmbeddableFromObject } from './create_vis_embeddable_from_object'; -import type { VisualizationsStartDeps } from '../plugin'; +import type { VisualizationsStartDeps } from '../../plugin'; interface VisualizationAttributes extends SavedObjectAttributes { title: string; diff --git a/src/plugins/visualizations/public/plugin.ts b/src/plugins/visualizations/public/plugin.ts index e8b13639fa092..24a2c488e0f79 100644 --- a/src/plugins/visualizations/public/plugin.ts +++ b/src/plugins/visualizations/public/plugin.ts @@ -126,7 +126,8 @@ import { VisualizationSavedObjectAttributes, } from '../common/content_management'; import { AddAggVisualizationPanelAction } from './actions/add_agg_vis_action'; -import { VisualizeSerializedState } from './react_embeddable/types'; +import type { VisualizeSerializedState } from './embeddable/types'; +import { getVisualizeEmbeddableFactoryLazy } from './embeddable'; /** * Interface for this plugin's returned setup/start contracts. @@ -308,7 +309,10 @@ export class VisualizationsPlugin * this should be replaced to use only scoped history after moving legacy apps to browser routing */ const history = createHashHistory(); - const { createVisEmbeddableFromObject } = await import('./embeddable'); + const [{ createVisEmbeddableFromObject }, { renderApp }] = await Promise.all([ + import('./legacy/embeddable'), + import('./visualize_app'), + ]); const services: VisualizeServices = { ...coreStart, history, @@ -352,7 +356,6 @@ export class VisualizationsPlugin }; params.element.classList.add('visAppWrapper'); - const { renderApp } = await import('./visualize_app'); if (pluginsStart.screenshotMode.isScreenshotMode()) { params.element.classList.add('visEditorScreenshotModeActive'); // @ts-expect-error TS error, cannot find type declaration for scss @@ -407,7 +410,7 @@ export class VisualizationsPlugin plugins: { embeddable: embeddableStart, embeddableEnhanced: embeddableEnhancedStart }, } = start(); - const { getVisualizeEmbeddableFactory } = await import('./react_embeddable'); + const getVisualizeEmbeddableFactory = await getVisualizeEmbeddableFactoryLazy(); return getVisualizeEmbeddableFactory({ embeddableStart, embeddableEnhancedStart }); }); embeddable.registerReactEmbeddableSavedObject({ diff --git a/src/plugins/visualizations/public/react_embeddable/visualize_embeddable.tsx b/src/plugins/visualizations/public/react_embeddable/visualize_embeddable.tsx deleted file mode 100644 index ee95e8d0d94b3..0000000000000 --- a/src/plugins/visualizations/public/react_embeddable/visualize_embeddable.tsx +++ /dev/null @@ -1,549 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { EuiEmptyPrompt, EuiFlexGroup, EuiLoadingChart } from '@elastic/eui'; -import { isChartSizeEvent } from '@kbn/chart-expressions-common'; -import { APPLY_FILTER_TRIGGER } from '@kbn/data-plugin/public'; -import type { DataView } from '@kbn/data-views-plugin/public'; -import { EmbeddableEnhancedPluginStart } from '@kbn/embeddable-enhanced-plugin/public'; -import { - EmbeddableStart, - ReactEmbeddableFactory, - SELECT_RANGE_TRIGGER, -} from '@kbn/embeddable-plugin/public'; -import { ExpressionRendererParams, useExpressionRenderer } from '@kbn/expressions-plugin/public'; -import { i18n } from '@kbn/i18n'; -import { dispatchRenderComplete } from '@kbn/kibana-utils-plugin/public'; -import { apiPublishesSettings } from '@kbn/presentation-containers'; -import { - apiHasAppContext, - apiHasDisableTriggers, - apiHasExecutionContext, - apiIsOfType, - apiPublishesTimeRange, - apiPublishesTimeslice, - apiPublishesUnifiedSearch, - apiPublishesViewMode, - fetch$, - getUnchangingComparator, - initializeTimeRange, - initializeTitles, - useStateFromPublishingSubject, -} from '@kbn/presentation-publishing'; -import { apiPublishesSearchSession } from '@kbn/presentation-publishing/interfaces/fetch/publishes_search_session'; -import { get, isEmpty, isEqual, isNil, omitBy } from 'lodash'; -import React, { useEffect, useRef } from 'react'; -import { BehaviorSubject, switchMap } from 'rxjs'; -import { VISUALIZE_APP_NAME, VISUALIZE_EMBEDDABLE_TYPE } from '../../common/constants'; -import { VIS_EVENT_TO_TRIGGER } from '../embeddable'; -import { getCapabilities, getInspector, getUiActions, getUsageCollection } from '../services'; -import { ACTION_CONVERT_TO_LENS } from '../triggers'; -import { urlFor } from '../utils/saved_visualize_utils'; -import type { SerializedVis, Vis } from '../vis'; -import { createVisInstance } from './create_vis_instance'; -import { getExpressionRendererProps } from './get_expression_renderer_props'; -import { saveToLibrary } from './save_to_library'; -import { deserializeState, serializeState } from './state'; -import { - ExtraSavedObjectProperties, - VisualizeApi, - VisualizeOutputState, - VisualizeRuntimeState, - VisualizeSerializedState, - isVisualizeSavedObjectState, -} from './types'; - -export const getVisualizeEmbeddableFactory: (deps: { - embeddableStart: EmbeddableStart; - embeddableEnhancedStart?: EmbeddableEnhancedPluginStart; -}) => ReactEmbeddableFactory = ({ - embeddableStart, - embeddableEnhancedStart, -}) => ({ - type: VISUALIZE_EMBEDDABLE_TYPE, - deserializeState, - buildEmbeddable: async (initialState: unknown, buildApi, uuid, parentApi) => { - // Handle state transfer from legacy visualize editor, which uses the legacy visualize embeddable and doesn't - // produce a snapshot state. If buildEmbeddable is passed only a savedObjectId in the state, this means deserializeState - // was never run, and it needs to be invoked manually - const state = isVisualizeSavedObjectState(initialState) - ? await deserializeState({ - rawState: initialState, - }) - : (initialState as VisualizeRuntimeState); - - // Initialize dynamic actions - const dynamicActionsApi = embeddableEnhancedStart?.initializeReactEmbeddableDynamicActions( - uuid, - () => titlesApi.panelTitle.getValue(), - state - ); - // if it is provided, start the dynamic actions manager - const maybeStopDynamicActions = dynamicActionsApi?.startDynamicActions(); - - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); - - // Count renders; mostly used for testing. - const renderCount$ = new BehaviorSubject(0); - const hasRendered$ = new BehaviorSubject(false); - - // Track vis data and initialize it into a vis instance - const serializedVis$ = new BehaviorSubject(state.serializedVis); - const initialVisInstance = await createVisInstance(state.serializedVis); - const vis$ = new BehaviorSubject(initialVisInstance); - - // Track UI state - const onUiStateChange = () => serializedVis$.next(vis$.getValue().serialize()); - initialVisInstance.uiState.on('change', onUiStateChange); - vis$.subscribe((vis) => vis.uiState.on('change', onUiStateChange)); - - // When the serialized vis changes, update the vis instance - serializedVis$ - .pipe( - switchMap(async (serializedVis) => { - const currentVis = vis$.getValue(); - if (currentVis) currentVis.uiState.off('change', onUiStateChange); - const vis = await createVisInstance(serializedVis); - const { params, abortController } = await getExpressionParams(); - return { vis, params, abortController }; - }) - ) - .subscribe(({ vis, params, abortController }) => { - vis$.next(vis); - if (params) expressionParams$.next(params); - expressionAbortController$.next(abortController); - }); - - // Track visualizations linked to a saved object in the library - const savedObjectId$ = new BehaviorSubject( - state.savedObjectId ?? state.serializedVis.id - ); - const savedObjectProperties$ = new BehaviorSubject( - undefined - ); - const linkedToLibrary$ = new BehaviorSubject(state.linkedToLibrary); - - // Track the vis expression - const expressionParams$ = new BehaviorSubject({ - expression: '', - }); - - const expressionAbortController$ = new BehaviorSubject(new AbortController()); - let getExpressionParams: () => ReturnType = async () => ({ - params: expressionParams$.getValue(), - abortController: expressionAbortController$.getValue(), - }); - - const { - api: customTimeRangeApi, - serialize: serializeCustomTimeRange, - comparators: customTimeRangeComparators, - } = initializeTimeRange(state); - - const searchSessionId$ = new BehaviorSubject(''); - - const viewMode$ = apiPublishesViewMode(parentApi) - ? parentApi.viewMode - : new BehaviorSubject('view'); - - const executionContext = apiHasExecutionContext(parentApi) - ? parentApi.executionContext - : undefined; - - const disableTriggers = apiHasDisableTriggers(parentApi) - ? parentApi.disableTriggers - : undefined; - - const parentApiContext = apiHasAppContext(parentApi) ? parentApi.getAppContext() : undefined; - - const inspectorAdapters$ = new BehaviorSubject>({}); - - // Track data views - let initialDataViews: DataView[] | undefined = []; - if (initialVisInstance.data.indexPattern) - initialDataViews = [initialVisInstance.data.indexPattern]; - if (initialVisInstance.type.getUsedIndexPattern) { - initialDataViews = await initialVisInstance.type.getUsedIndexPattern( - initialVisInstance.params - ); - } - - const dataLoading$ = new BehaviorSubject(true); - - const defaultPanelTitle = new BehaviorSubject(initialVisInstance.title); - - const api = buildApi( - { - ...customTimeRangeApi, - ...titlesApi, - ...(dynamicActionsApi?.dynamicActionsApi ?? {}), - defaultPanelTitle, - dataLoading: dataLoading$, - dataViews: new BehaviorSubject(initialDataViews), - supportedTriggers: () => [ - ACTION_CONVERT_TO_LENS, - APPLY_FILTER_TRIGGER, - SELECT_RANGE_TRIGGER, - ], - serializeState: () => { - const savedObjectProperties = savedObjectProperties$.getValue(); - return serializeState({ - serializedVis: vis$.getValue().serialize(), - titles: serializeTitles(), - id: savedObjectId$.getValue(), - linkedToLibrary: - // In the visualize editor, linkedToLibrary should always be false to force the full state to be serialized, - // instead of just passing a reference to the linked saved object. Other contexts like dashboards should - // serialize the state with just the savedObjectId so that the current revision of the vis is always used - apiIsOfType(parentApi, VISUALIZE_APP_NAME) ? false : linkedToLibrary$.getValue(), - ...(savedObjectProperties ? { savedObjectProperties } : {}), - ...(dynamicActionsApi?.serializeDynamicActions?.() ?? {}), - ...serializeCustomTimeRange(), - }); - }, - getVis: () => vis$.getValue(), - getInspectorAdapters: () => inspectorAdapters$.getValue(), - getTypeDisplayName: () => - i18n.translate('visualizations.displayName', { - defaultMessage: 'visualization', - }), - onEdit: async () => { - const stateTransferService = embeddableStart.getStateTransfer(); - const visId = savedObjectId$.getValue(); - const editPath = visId ? urlFor(visId) : '#/edit_by_value'; - const parentTimeRange = apiPublishesTimeRange(parentApi) - ? parentApi.timeRange$.getValue() - : {}; - const customTimeRange = customTimeRangeApi.timeRange$.getValue(); - - await stateTransferService.navigateToEditor('visualize', { - path: editPath, - state: { - embeddableId: uuid, - valueInput: { - savedVis: vis$.getValue().serialize(), - title: api.panelTitle?.getValue(), - description: api.panelDescription?.getValue(), - timeRange: customTimeRange ?? parentTimeRange, - }, - originatingApp: parentApiContext?.currentAppId ?? '', - searchSessionId: searchSessionId$.getValue() || undefined, - originatingPath: parentApiContext?.getCurrentPath?.(), - }, - }); - }, - isEditingEnabled: () => { - if (viewMode$.getValue() !== 'edit') return false; - const readOnly = Boolean(vis$.getValue().type.disableEdit); - if (readOnly) return false; - const capabilities = getCapabilities(); - const isByValue = !savedObjectId$.getValue(); - if (isByValue) - return Boolean( - capabilities.dashboard?.showWriteControls && capabilities.visualize?.show - ); - else return Boolean(capabilities.visualize?.save); - }, - updateVis: async (visUpdates) => { - const currentSerializedVis = vis$.getValue().serialize(); - serializedVis$.next({ - ...currentSerializedVis, - ...visUpdates, - params: { - ...currentSerializedVis.params, - ...visUpdates.params, - }, - data: { - ...currentSerializedVis.data, - ...visUpdates.data, - }, - } as SerializedVis); - if (visUpdates.title) { - titlesApi.setPanelTitle(visUpdates.title); - } - }, - openInspector: () => { - const adapters = inspectorAdapters$.getValue(); - if (!adapters) return; - const inspector = getInspector(); - if (!inspector.isAvailable(adapters)) return; - return getInspector().open(adapters, { - title: - titlesApi.panelTitle?.getValue() || - i18n.translate('visualizations.embeddable.inspectorTitle', { - defaultMessage: 'Inspector', - }), - }); - }, - // Library transforms - saveToLibrary: (newTitle: string) => { - titlesApi.setPanelTitle(newTitle); - const { rawState, references } = serializeState({ - serializedVis: vis$.getValue().serialize(), - titles: { - ...serializeTitles(), - title: newTitle, - }, - }); - return saveToLibrary({ - uiState: vis$.getValue().uiState, - rawState: rawState as VisualizeOutputState, - references, - }); - }, - canLinkToLibrary: () => !state.linkedToLibrary, - canUnlinkFromLibrary: () => !!state.linkedToLibrary, - checkForDuplicateTitle: () => false, // Handled by saveToLibrary action - getByValueState: () => ({ - savedVis: vis$.getValue().serialize(), - ...serializeTitles(), - }), - getByReferenceState: (libraryId) => - serializeState({ - serializedVis: vis$.getValue().serialize(), - titles: serializeTitles(), - id: libraryId, - linkedToLibrary: true, - }).rawState, - }, - { - ...titleComparators, - ...customTimeRangeComparators, - ...(dynamicActionsApi?.dynamicActionsComparator ?? { - enhancements: getUnchangingComparator(), - }), - serializedVis: [ - serializedVis$, - (value) => { - serializedVis$.next(value); - }, - (a, b) => { - const visA = a - ? { - ...omitBy(a, isEmpty), - data: omitBy(a.data, isNil), - params: omitBy(a.params, isNil), - } - : {}; - const visB = b - ? { - ...omitBy(b, isEmpty), - data: omitBy(b.data, isNil), - params: omitBy(b.params, isNil), - } - : {}; - return isEqual(visA, visB); - }, - ], - savedObjectId: [ - savedObjectId$, - (value) => savedObjectId$.next(value), - (a, b) => { - if (!a && !b) return true; - return a === b; - }, - ], - savedObjectProperties: getUnchangingComparator(), - linkedToLibrary: [linkedToLibrary$, (value) => linkedToLibrary$.next(value)], - } - ); - - const fetchSubscription = fetch$(api) - .pipe( - switchMap(async (data) => { - const unifiedSearch = apiPublishesUnifiedSearch(parentApi) - ? { - query: data.query, - filters: data.filters, - } - : {}; - const searchSessionId = apiPublishesSearchSession(parentApi) ? data.searchSessionId : ''; - searchSessionId$.next(searchSessionId); - const settings = apiPublishesSettings(parentApi) - ? { - syncColors: parentApi.settings.syncColors$.getValue(), - syncCursor: parentApi.settings.syncCursor$.getValue(), - syncTooltips: parentApi.settings.syncTooltips$.getValue(), - } - : {}; - - dataLoading$.next(true); - - const timeslice = apiPublishesTimeslice(parentApi) - ? parentApi.timeslice$.getValue() - : undefined; - - const customTimeRange = customTimeRangeApi.timeRange$.getValue(); - const parentTimeRange = apiPublishesTimeRange(parentApi) ? data.timeRange : undefined; - const timesliceTimeRange = timeslice - ? { - from: new Date(timeslice[0]).toISOString(), - to: new Date(timeslice[1]).toISOString(), - mode: 'absolute' as 'absolute', - } - : undefined; - - // Precedence should be: - // custom time range from state > - // timeslice time range > - // parent API time range from e.g. unified search - const timeRangeToRender = customTimeRange ?? timesliceTimeRange ?? parentTimeRange; - - getExpressionParams = async () => { - return await getExpressionRendererProps({ - unifiedSearch, - vis: vis$.getValue(), - settings, - disableTriggers, - searchSessionId, - parentExecutionContext: executionContext, - abortController: expressionAbortController$.getValue(), - timeRange: timeRangeToRender, - onRender: async (renderCount) => { - if (renderCount === renderCount$.getValue()) return; - renderCount$.next(renderCount); - const visInstance = vis$.getValue(); - const visTypeName = visInstance.type.name; - - let telemetryVisTypeName = visTypeName; - if (visTypeName === 'metrics') { - telemetryVisTypeName = 'legacy_metric'; - } - if (visTypeName === 'pie' && visInstance.params.isDonut) { - telemetryVisTypeName = 'donut'; - } - if ( - visTypeName === 'area' && - visInstance.params.seriesParams.some( - (seriesParams: { mode: string }) => seriesParams.mode === 'stacked' - ) - ) { - telemetryVisTypeName = 'area_stacked'; - } - - getUsageCollection().reportUiCounter( - executionContext?.type ?? '', - 'count', - `render_agg_based_${telemetryVisTypeName}` - ); - - if (hasRendered$.getValue() === true) return; - hasRendered$.next(true); - hasRendered$.complete(); - }, - onEvent: async (event) => { - // Visualize doesn't respond to sizing events, so ignore. - if (isChartSizeEvent(event)) { - return; - } - const currentVis = vis$.getValue(); - if (!disableTriggers) { - const triggerId = get( - VIS_EVENT_TO_TRIGGER, - event.name, - VIS_EVENT_TO_TRIGGER.filter - ); - let context; - - if (triggerId === VIS_EVENT_TO_TRIGGER.applyFilter) { - context = { - embeddable: api, - timeFieldName: currentVis.data.indexPattern?.timeFieldName!, - ...event.data, - }; - } else { - context = { - embeddable: api, - data: { - timeFieldName: currentVis.data.indexPattern?.timeFieldName!, - ...event.data, - }, - }; - } - await getUiActions().getTrigger(triggerId).exec(context); - } - }, - onData: (_, inspectorAdapters) => { - inspectorAdapters$.next( - typeof inspectorAdapters === 'function' ? inspectorAdapters() : inspectorAdapters - ); - dataLoading$.next(false); - }, - }); - }; - return await getExpressionParams(); - }) - ) - .subscribe(({ params, abortController }) => { - if (params) expressionParams$.next(params); - expressionAbortController$.next(abortController); - }); - - return { - api, - Component: () => { - const expressionParams = useStateFromPublishingSubject(expressionParams$); - const renderCount = useStateFromPublishingSubject(renderCount$); - const hasRendered = useStateFromPublishingSubject(hasRendered$); - const domNode = useRef(null); - const { error, isLoading } = useExpressionRenderer(domNode, expressionParams); - - useEffect(() => { - return () => { - fetchSubscription.unsubscribe(); - maybeStopDynamicActions?.stopDynamicActions(); - }; - }, []); - - useEffect(() => { - if (hasRendered && domNode.current) { - dispatchRenderComplete(domNode.current); - } - }, [hasRendered]); - - return ( -
- {/* Replicate the loading state for the expression renderer to avoid FOUC */} - - {isLoading && } - {!isLoading && error && ( - - {i18n.translate('visualizations.embeddable.errorTitle', { - defaultMessage: 'Unable to load visualization ', - })} - - } - body={ -

- {error.name}: {error.message} -

- } - /> - )} -
-
- ); - }, - }; - }, -}); diff --git a/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.ts b/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.ts index 18d6fc578d073..a7417585795f0 100644 --- a/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.ts +++ b/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.ts @@ -15,7 +15,7 @@ import { confirmModalPromise } from './confirm_modal_promise'; import type { StartServices } from '../../types'; import { visualizationsClient } from '../../content_management'; import { VisualizationSavedObjectAttributes, VisualizationSavedObject } from '../../../common'; -import { VisualizeOutputState } from '../../react_embeddable/types'; +import { VisualizeOutputState } from '../../embeddable/types'; /** * Attempts to create the current object using the serialized source. If an object already diff --git a/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts b/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts index f972b0682bd89..7e8e86b469c5d 100644 --- a/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts +++ b/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts @@ -16,7 +16,7 @@ import { import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/common'; import { isObject } from 'lodash'; import { Reference } from '../../../common/content_management'; -import { VisualizeSavedVisInputState } from '../../react_embeddable/types'; +import { VisualizeSavedVisInputState } from '../../embeddable/types'; import { SavedVisState, SerializedVis, VisSavedObject } from '../../types'; import type { SerializableAttributes } from '../../vis_types/vis_type_alias_registry'; import { extractControlsReferences, injectControlsReferences } from './controls_references'; diff --git a/src/plugins/visualizations/public/visualize_app/types.ts b/src/plugins/visualizations/public/visualize_app/types.ts index 7a80dd2e4a8e2..53fb35114d0f9 100644 --- a/src/plugins/visualizations/public/visualize_app/types.ts +++ b/src/plugins/visualizations/public/visualize_app/types.ts @@ -53,7 +53,7 @@ import type { } from '..'; import type { ListingViewRegistry, SavedVisState } from '../types'; -import type { createVisEmbeddableFromObject } from '../embeddable'; +import type { createVisEmbeddableFromObject } from '../legacy/embeddable'; import type { VisEditorsRegistry } from '../vis_editors_registry'; export interface VisualizeAppState { diff --git a/src/plugins/visualizations/public/visualize_app/utils/get_visualization_instance.ts b/src/plugins/visualizations/public/visualize_app/utils/get_visualization_instance.ts index 1ad0803edf38c..3a3898093a8eb 100644 --- a/src/plugins/visualizations/public/visualize_app/utils/get_visualization_instance.ts +++ b/src/plugins/visualizations/public/visualize_app/utils/get_visualization_instance.ts @@ -16,7 +16,7 @@ import { createVisAsync } from '../../vis_async'; import { convertToSerializedVis, getSavedVisualization } from '../../utils/saved_visualize_utils'; import { SerializedVis, Vis, VisSavedObject, VisualizeEmbeddableContract } from '../..'; import type { VisInstance, VisualizeServices } from '../types'; -import { VisualizeInput } from '../../embeddable'; +import { VisualizeInput } from '../../legacy/embeddable'; function isErrorRelatedToRuntimeFields(error: ExpressionValueError['error']) { const originalError = error.original || error; From 756cd63a83044e2aefe41e183fff38acf387d597 Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz <61565784+agusruidiazgd@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:38:32 +0200 Subject: [PATCH 52/52] [Security Solution] Data ingestion hub header cards (#190696) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR is one of the tasks on the issue [#189487](https://github.com/elastic/kibana/issues/189487). I've created this PR that contains the new cards that will be placed in the new header under the new **Data Ingestion Hub**. Cards: Screenshot 2024-09-02 at 14 32 55 Screenshot 2024-09-02 at 14 42 13 **Summary:** - Card 1: On click `Watch video` → Open modal with current Get Started video. - Card 2: On click `Add users` → `ESS: http://localhost:5601/app/management/security/users` `serverless: https://cloud.elastic.co/account/members`. - Card 3: On click `Explore Demo` → navigate to `https://www.elastic.co/demo-gallery/security-overview` Behavior of each card: https://github.com/user-attachments/assets/fabdb807-5442-42c9-84c7-6bbc0084e7a1 ** UPDATE: @paulewing I've removed the feature flag and render directly the new header, also I've removed the card that renders the same video we are showing on the new header (first card). Screenshot 2024-09-09 at 10 11 10 ### Checklist Delete any items that are not applicable to this PR. - [X] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Elastic Machine Co-authored-by: Angela Chuang <6295984+angorayc@users.noreply.github.com> --- .../onboarding/onboarding_page_service.ts | 7 ++ .../onboarding/card_item.test.tsx | 16 +-- .../content/data_ingestion_hub_video.tsx | 77 ++++++++++++++ .../card_step/step_content.test.tsx | 47 ++++---- .../cards/card.styles.ts | 56 ++++++++++ .../cards/card.test.tsx | 42 ++++++++ .../data_ingestion_hub_header/cards/card.tsx | 60 +++++++++++ .../cards/header_cards.tsx | 64 +++++++++++ .../cards/link_card/link_card.tsx | 43 ++++++++ .../cards/video_card/video_card.tsx | 75 +++++++++++++ .../cards/video_card/video_modal.styles.ts | 29 +++++ .../cards/video_card/video_modal.test.tsx | 43 ++++++++ .../cards/video_card/video_modal.tsx | 80 ++++++++++++++ .../index.styles.ts} | 0 .../data_ingestion_hub_header/index.test.tsx | 53 +++++++++- .../data_ingestion_hub_header/index.tsx | 79 ++++++++------ .../data_ingestion_hub_header/translations.ts | 100 ++++++++++++++++++ .../landing_page/onboarding/helpers.test.ts | 5 - .../hooks/use_toggle_panel.test.tsx | 19 ---- .../onboarding/hooks/use_users_url.ts | 14 +++ .../images/dark_data_ingestion_hub_demo.png | Bin 0 -> 9548 bytes .../dark_data_ingestion_hub_teammates.png | Bin 0 -> 10901 bytes .../images/dark_data_ingestion_hub_video.png | Bin 0 -> 5298 bytes .../images/data_ingestion_hub_demo.png | Bin 0 -> 6826 bytes .../images/data_ingestion_hub_teammates.png | Bin 0 -> 10464 bytes .../images/data_ingestion_hub_video.png | Bin 0 -> 6645 bytes .../onboarding/onboarding.test.tsx | 28 +---- .../landing_page/onboarding/onboarding.tsx | 22 +--- .../landing_page/onboarding/reducer.test.ts | 17 +-- .../landing_page/onboarding/sections.tsx | 4 - .../public/common/constants.ts | 2 + .../public/onboarding/onboarding.ts | 9 +- .../public/plugin.ts | 3 + .../functional/services/svl_sec_navigation.ts | 2 +- 34 files changed, 846 insertions(+), 150 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/card_step/content/data_ingestion_hub_video.tsx create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/card.styles.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/card.test.tsx create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/card.tsx create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/header_cards.tsx create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/link_card/link_card.tsx create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/video_card/video_card.tsx create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/video_card/video_modal.styles.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/video_card/video_modal.test.tsx create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/cards/video_card/video_modal.tsx rename x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/{styles/data_ingestion_hub_header.styles.ts => data_ingestion_hub_header/index.styles.ts} (100%) create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/data_ingestion_hub_header/translations.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/hooks/use_users_url.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/images/dark_data_ingestion_hub_demo.png create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/images/dark_data_ingestion_hub_teammates.png create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/images/dark_data_ingestion_hub_video.png create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/images/data_ingestion_hub_demo.png create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/images/data_ingestion_hub_teammates.png create mode 100644 x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/images/data_ingestion_hub_video.png diff --git a/x-pack/plugins/security_solution/public/app/components/onboarding/onboarding_page_service.ts b/x-pack/plugins/security_solution/public/app/components/onboarding/onboarding_page_service.ts index ea5beab4608d2..16448b92d3a4f 100644 --- a/x-pack/plugins/security_solution/public/app/components/onboarding/onboarding_page_service.ts +++ b/x-pack/plugins/security_solution/public/app/components/onboarding/onboarding_page_service.ts @@ -13,22 +13,26 @@ import type { StepId } from '../../../common/components/landing_page/onboarding/ export class OnboardingPageService { private productTypesSubject$: BehaviorSubject; private projectsUrlSubject$: BehaviorSubject; + private usersUrlSubject$: BehaviorSubject; private projectFeaturesUrlSubject$: BehaviorSubject; private availableStepsSubject$: BehaviorSubject; public productTypes$: Observable; public projectsUrl$: Observable; + public usersUrl$: Observable; public projectFeaturesUrl$: Observable; public availableSteps$: Observable; constructor() { this.productTypesSubject$ = new BehaviorSubject(undefined); this.projectsUrlSubject$ = new BehaviorSubject(undefined); + this.usersUrlSubject$ = new BehaviorSubject(undefined); this.projectFeaturesUrlSubject$ = new BehaviorSubject(undefined); this.availableStepsSubject$ = new BehaviorSubject([]); this.productTypes$ = this.productTypesSubject$.asObservable(); this.projectsUrl$ = this.projectsUrlSubject$.asObservable(); + this.usersUrl$ = this.usersUrlSubject$.asObservable(); this.projectFeaturesUrl$ = this.projectFeaturesUrlSubject$.asObservable(); this.availableSteps$ = this.availableStepsSubject$.asObservable(); } @@ -39,6 +43,9 @@ export class OnboardingPageService { setProjectFeaturesUrl(projectFeaturesUrl: string | undefined) { this.projectFeaturesUrlSubject$.next(projectFeaturesUrl); } + setUsersUrl(userUrl: string | undefined) { + this.usersUrlSubject$.next(userUrl); + } setProjectsUrl(projectsUrl: string | undefined) { this.projectsUrlSubject$.next(projectsUrl); } diff --git a/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/card_item.test.tsx b/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/card_item.test.tsx index 91417dc8e3ddf..c0730847c5e43 100644 --- a/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/card_item.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/card_item.test.tsx @@ -9,7 +9,7 @@ import { render } from '@testing-library/react'; import { CardItem } from './card_item'; import type { ExpandedCardSteps, StepId } from './types'; -import { QuickStartSectionCardsId, SectionId, OverviewSteps } from './types'; +import { SectionId, ViewDashboardSteps, AddAndValidateYourDataCardsId } from './types'; jest.mock('./card_step'); describe('CardItemComponent', () => { @@ -17,7 +17,7 @@ describe('CardItemComponent', () => { const onStepClicked = jest.fn(); const toggleTaskCompleteStatus = jest.fn(); const expandedCardSteps = { - [QuickStartSectionCardsId.watchTheOverviewVideo]: { + [AddAndValidateYourDataCardsId.viewDashboards]: { isExpanded: false, expandedSteps: [] as StepId[], }, @@ -26,17 +26,17 @@ describe('CardItemComponent', () => { it('should render card', () => { const { getByTestId } = render( ); - const cardTitle = getByTestId(QuickStartSectionCardsId.watchTheOverviewVideo); + const cardTitle = getByTestId(AddAndValidateYourDataCardsId.viewDashboards); expect(cardTitle).toBeInTheDocument(); }); @@ -44,12 +44,12 @@ describe('CardItemComponent', () => { const { queryByText } = render( ); diff --git a/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/card_step/content/data_ingestion_hub_video.tsx b/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/card_step/content/data_ingestion_hub_video.tsx new file mode 100644 index 0000000000000..181d4a797ebbc --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/card_step/content/data_ingestion_hub_video.tsx @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFlexGroup, EuiFlexItem, EuiIcon, useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; +import React, { useCallback } from 'react'; +import { INGESTION_HUB_VIDEO_SOURCE } from '../../../../../constants'; +import { WATCH_VIDEO_BUTTON_TITLE } from '../../translations'; + +const VIDEO_CONTENT_HEIGHT = 309; + +const DataIngestionHubVideoComponent: React.FC = () => { + const ref = React.useRef(null); + const [isVideoPlaying, setIsVideoPlaying] = React.useState(false); + const { euiTheme } = useEuiTheme(); + + const onVideoClicked = useCallback(() => { + setIsVideoPlaying(true); + }, []); + + return ( +
+
+ {isVideoPlaying && ( + + + + + + )} + {!isVideoPlaying && ( +