diff --git a/.buildkite/pull_requests.json b/.buildkite/pull_requests.json index 02686fe378b4f..6db75b64a1e08 100644 --- a/.buildkite/pull_requests.json +++ b/.buildkite/pull_requests.json @@ -8,7 +8,6 @@ "enabled": true, "allow_org_users": true, "allowed_repo_permissions": ["admin", "write"], - "allowed_list": ["barlowm", "renovate[bot]"], "set_commit_status": true, "commit_status_context": "kibana-ci", "build_on_commit": true, @@ -59,7 +58,6 @@ "enabled": true, "allow_org_users": true, "allowed_repo_permissions": ["admin", "write"], - "allowed_list": ["barlowm", "renovate[bot]"], "set_commit_status": true, "commit_status_context": "kibana-ci-test", "build_on_commit": true, diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 5fa32d9b97356..175e4207ee7ca 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -2845,6 +2845,27 @@ "path": "x-pack/plugins/actions/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-server.ActionTypeExecutorOptions.request", + "type": "Object", + "tags": [], + "label": "request", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.KibanaRequest", + "text": "KibanaRequest" + }, + " | undefined" + ], + "path": "x-pack/plugins/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -4574,6 +4595,27 @@ "path": "x-pack/plugins/actions/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-common.ActionTypeExecutorResult.errorSource", + "type": "CompoundType", + "tags": [], + "label": "errorSource", + "description": [], + "signature": [ + { + "pluginId": "taskManager", + "scope": "common", + "docId": "kibTaskManagerPluginApi", + "section": "def-common.TaskErrorSource", + "text": "TaskErrorSource" + }, + " | undefined" + ], + "path": "x-pack/plugins/actions/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 0d548cad85aba..2cded533c95f5 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.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 | |-------------------|-----------|------------------------|-----------------| -| 269 | 0 | 263 | 31 | +| 271 | 0 | 265 | 31 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 26b4be1969357..913f3c4ce32b7 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index 2039c9ac564b9..6fc92bf20893c 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index edcf581deb96f..a2e3760e8c1e9 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: 2023-12-20 +date: 2023-12-21 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 32f08c6a0e78f..27b1437ee378f 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 15f5fd2f156b5..5fd8e35e631a9 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -934,6 +934,46 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertsClientError", + "type": "Class", + "tags": [], + "label": "AlertsClientError", + "description": [], + "signature": [ + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.AlertsClientError", + "text": "AlertsClientError" + }, + " extends Error" + ], + "path": "x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.AlertsClientError.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-server.InstallShutdownError", @@ -3533,10 +3573,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts" }, - { - "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts" - }, { "plugin": "stackAlerts", "path": "x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/get_entities_and_generate_alerts.ts" diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index adc70de114502..cefe8c8b8447b 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.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 | |-------------------|-----------|------------------------|-----------------| -| 823 | 1 | 792 | 51 | +| 825 | 1 | 794 | 51 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 245012914fc85..f1563ff517d3e 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: 2023-12-20 +date: 2023-12-21 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 9a120eebe3ed4..ff1c317c4f879 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 0ac5809fbca3b..b532615b31970 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index e9816c6447a10..ab1916c43b03c 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: 2023-12-20 +date: 2023-12-21 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 93201fe179841..69dae7f8fdf44 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: 2023-12-20 +date: 2023-12-21 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 cac829ab79309..bbddf43deb3cf 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: 2023-12-20 +date: 2023-12-21 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 de2829ce93f0d..aaca7e7b1ee11 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: 2023-12-20 +date: 2023-12-21 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 5196545d7539f..80c9cc7916a85 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: 2023-12-20 +date: 2023-12-21 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 5867d5b825705..14e28bd4d9ba7 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: 2023-12-20 +date: 2023-12-21 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 c169145b714b7..e7381f6f1b77a 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: 2023-12-20 +date: 2023-12-21 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 deac1416f138c..a36d09c49ea79 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: 2023-12-20 +date: 2023-12-21 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 b60f92510930a..bee7674145ec2 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: 2023-12-20 +date: 2023-12-21 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 d8dac36a8e49e..5e9aca55ddd29 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: 2023-12-20 +date: 2023-12-21 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 ba0a1ca7370a4..167af207774c6 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: 2023-12-20 +date: 2023-12-21 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 f997d267fc3c5..fe09361ff4bf6 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: 2023-12-20 +date: 2023-12-21 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 e28e0be933f77..889a08840b53f 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: 2023-12-20 +date: 2023-12-21 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 e1cd80030b4e8..2cb09be42de16 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: 2023-12-20 +date: 2023-12-21 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 4ab19494bc12e..24c32f43b23ca 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: 2023-12-20 +date: 2023-12-21 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 c408255e9e437..4ecbaff344e4f 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: 2023-12-20 +date: 2023-12-21 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 8de976a267406..446ea5e8289b4 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index cbae12b08c276..73c8b2040c032 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: 2023-12-20 +date: 2023-12-21 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 fb8259e59b2a4..df0dab9ab0977 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: 2023-12-20 +date: 2023-12-21 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 e268263406505..a7696ffb2b114 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: 2023-12-20 +date: 2023-12-21 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 dfa448a4bf5c6..0bce395adfbb2 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: 2023-12-20 +date: 2023-12-21 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 4c1454ea6e648..280caf7320277 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: 2023-12-20 +date: 2023-12-21 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 64dfa575555f0..a7b37e0f30c9a 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: 2023-12-20 +date: 2023-12-21 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 74551d06871f4..38a69806ef3c9 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: 2023-12-20 +date: 2023-12-21 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 309a3527d3953..8b31bada0a8f7 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: 2023-12-20 +date: 2023-12-21 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 b2a7f60ba614f..4d04d0c26a7a5 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -18,7 +18,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | ml, stackAlerts | - | | | ruleRegistry, observability, ml, infra, monitoring, securitySolution, stackAlerts, synthetics, transform, uptime | - | -| | share, uiActions, guidedOnboarding, home, serverless, management, spaces, savedObjects, indexManagement, visualizations, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, security, alerting, triggersActionsUi, cases, aiops, advancedSettings, exploratoryView, fleet, metricsDataAccess, licenseManagement, maps, dataVisualizer, ml, osquery, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, crossClusterReplication, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, infra, ingestPipelines, logstash, monitoring, observabilityOnboarding, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | +| | share, uiActions, guidedOnboarding, home, serverless, management, spaces, savedObjects, indexManagement, visualizations, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, security, alerting, triggersActionsUi, cases, aiops, advancedSettings, exploratoryView, fleet, metricsDataAccess, licenseManagement, maps, dataVisualizer, ml, osquery, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, crossClusterReplication, graph, grokdebugger, indexLifecycleManagement, infra, ingestPipelines, logstash, monitoring, observabilityOnboarding, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | | | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | | | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 1f71eaa96d1b4..3f1f507466d5c 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -831,14 +831,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## globalSearchBar - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/global_search_bar/public/plugin.tsx#:~:text=KibanaThemeProvider), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/global_search_bar/public/plugin.tsx#:~:text=KibanaThemeProvider), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/global_search_bar/public/plugin.tsx#:~:text=KibanaThemeProvider) | - | - - - ## globalSearchProviders | Deprecated API | Reference location(s) | Remove By | @@ -991,7 +983,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [remove_layer_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/remove_layer_action.tsx#:~:text=toMountPoint), [remove_layer_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/remove_layer_action.tsx#:~:text=toMountPoint), [revert_changes_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx#:~:text=toMountPoint), [revert_changes_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx#:~:text=toMountPoint), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts#:~:text=toMountPoint), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts#:~:text=toMountPoint) | - | +| | [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [remove_layer_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/remove_layer_action.tsx#:~:text=toMountPoint), [remove_layer_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/remove_layer_action.tsx#:~:text=toMountPoint), [revert_changes_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx#:~:text=toMountPoint), [revert_changes_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx#:~:text=toMountPoint), [edit_action_helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts#:~:text=toMountPoint), [edit_action_helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts#:~:text=toMountPoint) | - | | | [help_popover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/datasources/form_based/help_popover.tsx#:~:text=KibanaThemeProvider), [help_popover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/datasources/form_based/help_popover.tsx#:~:text=KibanaThemeProvider), [help_popover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/datasources/form_based/help_popover.tsx#:~:text=KibanaThemeProvider), [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx#:~:text=KibanaThemeProvider), [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx#:~:text=KibanaThemeProvider), [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx#:~:text=KibanaThemeProvider), [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=KibanaThemeProvider), [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=KibanaThemeProvider), [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=KibanaThemeProvider), [settings_menu.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/app_plugin/settings_menu.tsx#:~:text=KibanaThemeProvider)+ 12 more | - | | | [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=SavedObjectSaveModal), [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/find_object_by_title.test.ts#:~:text=SavedObjectsClientContract), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/find_object_by_title.test.ts#:~:text=SavedObjectsClientContract), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/find_object_by_title.test.ts#:~:text=SavedObjectsClientContract) | - | @@ -1427,7 +1419,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation) | - | -| | [rule_type.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts#:~:text=alertFactory), [get_entities_and_generate_alerts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/get_entities_and_generate_alerts.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory) | - | +| | [get_entities_and_generate_alerts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/get_entities_and_generate_alerts.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory) | - | | | [fetch_search_source_query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch) | - | | | [data_view_select.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/data_view_select.tsx#:~:text=indexPatterns), [boundary_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/boundary_form.tsx#:~:text=indexPatterns), [boundary_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/boundary_form.tsx#:~:text=indexPatterns), [entity_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/entity_form.tsx#:~:text=indexPatterns), [entity_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/entity_form.tsx#:~:text=indexPatterns) | - | | | [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx#:~:text=fieldFormats) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index d01634d94f307..7c5b3c2f8d1db 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 05a42dfee4f9c..49721a6640a54 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: 2023-12-20 +date: 2023-12-21 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 1623ea1ab919d..8f7aec0b851b3 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: 2023-12-20 +date: 2023-12-21 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 24a9c9bc9a03c..85ca05e54e595 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index ee97616a9a10f..7b48d973032dc 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: 2023-12-20 +date: 2023-12-21 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 1df64189eba35..181af89056834 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: 2023-12-20 +date: 2023-12-21 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 466683e754287..bf4e662fd0a0f 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: 2023-12-20 +date: 2023-12-21 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 05c1f0c349e09..35a002361207d 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: 2023-12-20 +date: 2023-12-21 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 caace4728e9d9..6c9ebefe470a1 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: 2023-12-20 +date: 2023-12-21 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 42daa2becb86c..4dc9677142a40 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 654b46b0c5e4b..9b12313037818 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 8b2e0bcb53fb6..74875b894bcff 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: 2023-12-20 +date: 2023-12-21 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 25a74bf46d0ea..4d2edcbef9ca3 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: 2023-12-20 +date: 2023-12-21 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 a9b9113640bcb..f2ed4e3b823d8 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: 2023-12-20 +date: 2023-12-21 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 a52100f992de4..ebb713229170b 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: 2023-12-20 +date: 2023-12-21 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 a9e936abeddf3..3a6b885e44216 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: 2023-12-20 +date: 2023-12-21 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 4cca71abe0790..722c2b99c2ef0 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: 2023-12-20 +date: 2023-12-21 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 6b5b21f4fb204..610d50666ab09 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: 2023-12-20 +date: 2023-12-21 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 c77f8c64853d9..68f66b95d6ef5 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: 2023-12-20 +date: 2023-12-21 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 0430d47a37bac..e31ab8977443f 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: 2023-12-20 +date: 2023-12-21 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 a255b55611268..660d8bb3deebc 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: 2023-12-20 +date: 2023-12-21 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 5a123ab07f33a..17bbed8aebef6 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: 2023-12-20 +date: 2023-12-21 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 a856a46b6481e..6d9060dc5c094 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: 2023-12-20 +date: 2023-12-21 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 278599d9f3562..de0b7c7e0c594 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: 2023-12-20 +date: 2023-12-21 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 158fcfa11750f..9ecebe60afcf6 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: 2023-12-20 +date: 2023-12-21 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 2935d4c8b714d..813405b56e762 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: 2023-12-20 +date: 2023-12-21 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 d2a4a1381c977..bcee8974cf16d 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: 2023-12-20 +date: 2023-12-21 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 232a524194c7f..91684d0d6f6d1 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: 2023-12-20 +date: 2023-12-21 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 032e5d0349a13..723bbe47f8636 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: 2023-12-20 +date: 2023-12-21 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 37a7f280f7a62..2da7a5a30b952 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: 2023-12-20 +date: 2023-12-21 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 a2cd495db1062..49f3495a7855f 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 4b9eaff4fd17f..424efa731fab6 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: 2023-12-20 +date: 2023-12-21 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 c21eec2cbe5b8..57b7d033f8b80 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: 2023-12-20 +date: 2023-12-21 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 d578eacf9ffe4..df688b57a8060 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: 2023-12-20 +date: 2023-12-21 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 056dc4d6fb607..07073193bcd14 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: 2023-12-20 +date: 2023-12-21 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 a19c4362e84b6..8360154562568 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: 2023-12-20 +date: 2023-12-21 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 61902a7030a95..53c554241d254 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: 2023-12-20 +date: 2023-12-21 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 87256269da456..d441a1857be39 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: 2023-12-20 +date: 2023-12-21 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 1baf60cb540e1..f76e485895325 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: 2023-12-20 +date: 2023-12-21 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 06a730d0ba9fd..10a95dffca26c 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: 2023-12-20 +date: 2023-12-21 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 1a450bb87e9ba..98e0f0b6ed8c8 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 8216c86f9babb..5a6be0813c982 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index b4632bcd58c02..a9fc518911531 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 73b04a3df72e2..b6ade9184308c 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 1cbd11dfd0d03..58c3128bc9f02 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: 2023-12-20 +date: 2023-12-21 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 f51172b1a406b..7e47dda753d5b 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: 2023-12-20 +date: 2023-12-21 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 121f39152fd02..cd14083f5a4a6 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 8f1195e363d75..7348d48a89b38 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 7fb9322954dd3..5ef982036e984 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: 2023-12-20 +date: 2023-12-21 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_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index e6904e0c59ffe..e0f63ca0a1692 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: 2023-12-20 +date: 2023-12-21 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 31ec9aeb7e855..9794f4cb1680b 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: 2023-12-20 +date: 2023-12-21 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 1fb4cd71832a9..cd9ee52924db3 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: 2023-12-20 +date: 2023-12-21 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_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 5c12f240b701d..e9920dea1c7f6 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: 2023-12-20 +date: 2023-12-21 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 59e01e8711ac5..ee15ca922d6a1 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 1af7047716207..d85322e4f1541 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 52d45c656ac9e..5f49867f33030 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 2f3eccb35f7ab..a84b4c1b777bd 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 8f05e511bcacb..775cfc7603fd9 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 16e2cbff3383f..7bbd11809f914 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 5ef08bb07042e..a5261dd76295f 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index d9fbce1b70916..2308c1d2bb90e 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 7fd594402e9a7..cd8c2e5031d80 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: 2023-12-20 +date: 2023-12-21 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_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index bbf5c2e0afd8a..fa9c84e411c3f 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: 2023-12-20 +date: 2023-12-21 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 0a1418a7d31bf..29746d8baccfd 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: 2023-12-20 +date: 2023-12-21 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_utils.mdx b/api_docs/kbn_apm_utils.mdx index d564479d022d4..02c6abcf182b9 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index ea5defb14a6d4..e3475f686a38e 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: 2023-12-20 +date: 2023-12-21 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 e825eb91fee44..e048ddc047ef9 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: 2023-12-20 +date: 2023-12-21 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 9370ac0707dd9..0963be5da634e 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: 2023-12-20 +date: 2023-12-21 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 6faa4c4037efc..92311c3dc8175 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: 2023-12-20 +date: 2023-12-21 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 0f935c59087ff..d3627857ebbd4 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index a60ae4b0cedd9..f3d43f621a3ba 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: 2023-12-20 +date: 2023-12-21 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 82f2b5d6cd2d2..ae81f88ecddb6 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: 2023-12-20 +date: 2023-12-21 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 2e5e7e969b6cc..2273180eaa78f 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: 2023-12-20 +date: 2023-12-21 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 3a28582b70126..fc4c1ef3e89de 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: 2023-12-20 +date: 2023-12-21 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 51d84b5832477..d61211e4b324b 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: 2023-12-20 +date: 2023-12-21 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 9b4cc2cba02f2..b55cd4a00a2e5 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: 2023-12-20 +date: 2023-12-21 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 dfda599353594..f64562e83c710 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index eda7e11372879..2070eb71b3dc3 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 8f40b76f15167..9daca0998df43 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: 2023-12-20 +date: 2023-12-21 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 eea5fdc3b63ae..9e8e71d82cc24 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: 2023-12-20 +date: 2023-12-21 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 1d61d5261d950..a0e29465bd5d2 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: 2023-12-20 +date: 2023-12-21 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 ffee5680dff63..43c203826913f 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: 2023-12-20 +date: 2023-12-21 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 1dd83bb9e9195..ace85fb984a6e 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: 2023-12-20 +date: 2023-12-21 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 7d26d795cc0b6..b9c53b58502bf 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: 2023-12-20 +date: 2023-12-21 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_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index c6160456ba0c7..ecd8263d958fd 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: 2023-12-20 +date: 2023-12-21 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 7a08374bcf7bb..eeafff3e3f53e 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: 2023-12-20 +date: 2023-12-21 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 13da50f3da458..c395e57bd5c37 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: 2023-12-20 +date: 2023-12-21 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 b734c8d7a18fb..28f829569c70f 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: 2023-12-20 +date: 2023-12-21 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_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 548bf253a4c2d..ac15e36f3e620 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: 2023-12-20 +date: 2023-12-21 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 646ac64e92f54..35e49738c9ee1 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: 2023-12-20 +date: 2023-12-21 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 a7879e4d3d8b7..f6885853bab38 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: 2023-12-20 +date: 2023-12-21 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 25289bfe400a2..6e7b35122b360 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: 2023-12-20 +date: 2023-12-21 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 0f6cb5412babb..a2a209f1f5c3c 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: 2023-12-20 +date: 2023-12-21 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 56784937c528b..c5bba2659b8e0 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: 2023-12-20 +date: 2023-12-21 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 f6fb22ca13693..a50b6ee3737ca 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: 2023-12-20 +date: 2023-12-21 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 d87a0916ddaad..5ef25a22fdd7e 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: 2023-12-20 +date: 2023-12-21 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 ca7e995b042d6..95bfa2b1f470d 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: 2023-12-20 +date: 2023-12-21 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 170a694892e35..f462d587430a2 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: 2023-12-20 +date: 2023-12-21 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 8ee8a76549cb2..95bbfa98d1587 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: 2023-12-20 +date: 2023-12-21 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 5b78000d8d91d..6e3db2df263f8 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: 2023-12-20 +date: 2023-12-21 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 31762b4cb59be..540041cdfae26 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: 2023-12-20 +date: 2023-12-21 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 fb1b3ffddcd96..4d5a45ce4f514 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: 2023-12-20 +date: 2023-12-21 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 7094d688d58da..984168575a160 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: 2023-12-20 +date: 2023-12-21 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 08dd066890f32..db906e2aae7ab 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: 2023-12-20 +date: 2023-12-21 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 e6b8399a6fb25..a2ec8bd66365e 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: 2023-12-20 +date: 2023-12-21 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 298111aa0fed3..26e01b07a38cc 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: 2023-12-20 +date: 2023-12-21 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 dbb476c98bb80..3925a4050d7a2 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: 2023-12-20 +date: 2023-12-21 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 ebfa6afcb88ca..086fff1793b4a 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: 2023-12-20 +date: 2023-12-21 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 f1e5c2d4985cc..13929a85fc45a 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: 2023-12-20 +date: 2023-12-21 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 4170ccd2b6a61..5784f6aaad253 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: 2023-12-20 +date: 2023-12-21 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 f0b86d8109388..f4f709a730298 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: 2023-12-20 +date: 2023-12-21 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 34236f3571dfd..2b75ad47f9b0d 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: 2023-12-20 +date: 2023-12-21 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 c51fc1b3c8b8f..7c29647aadd52 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: 2023-12-20 +date: 2023-12-21 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 395a13be812fc..9626c62b68df6 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: 2023-12-20 +date: 2023-12-21 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 3567c91b27509..39b4a0a0481e5 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: 2023-12-20 +date: 2023-12-21 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 c82dbdfcda4bf..de789aaa6b3f5 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: 2023-12-20 +date: 2023-12-21 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 ea3c4459c636e..5f2ff3b8b2d61 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: 2023-12-20 +date: 2023-12-21 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 2936975bb78c6..988e68ec15133 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: 2023-12-20 +date: 2023-12-21 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 a77dedb859eb4..8875485c9aabb 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: 2023-12-20 +date: 2023-12-21 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 05866c562bb49..530e943b8e926 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: 2023-12-20 +date: 2023-12-21 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 630a23a542d7f..a87366790ba8b 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: 2023-12-20 +date: 2023-12-21 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 ada0b777ba4f7..5e52613ec7563 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: 2023-12-20 +date: 2023-12-21 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 4eb744e8a2589..67cf325c43a0e 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: 2023-12-20 +date: 2023-12-21 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 78c7b425cd391..fb8e41bc8e572 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: 2023-12-20 +date: 2023-12-21 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 cb208e9c0433c..eaf60bbd31799 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: 2023-12-20 +date: 2023-12-21 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 ecc04327dc53b..e9c69de86b77b 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: 2023-12-20 +date: 2023-12-21 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 30f5741da71ec..6de5b1f562ede 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: 2023-12-20 +date: 2023-12-21 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 edebce6161506..10829b1e6275a 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: 2023-12-20 +date: 2023-12-21 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 9b3b9769fd650..2f57ff6717186 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: 2023-12-20 +date: 2023-12-21 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 69f2a57657f42..bae2165a50a87 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: 2023-12-20 +date: 2023-12-21 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 d7175588a43e9..2355fa68afbb8 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: 2023-12-20 +date: 2023-12-21 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 9a0d5e597f865..2b7a7e5f90047 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: 2023-12-20 +date: 2023-12-21 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 42854703b4afe..1634b62b27917 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: 2023-12-20 +date: 2023-12-21 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 095a92a32b5c4..c9dff23c3fc42 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: 2023-12-20 +date: 2023-12-21 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 f15aee88a3db3..fbbdf852ae172 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: 2023-12-20 +date: 2023-12-21 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 d9fe32a1d6138..dd21efd904706 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: 2023-12-20 +date: 2023-12-21 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 82abcf6512748..53df4b35df5aa 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: 2023-12-20 +date: 2023-12-21 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 b4b5580681867..8ebb452e60bf2 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: 2023-12-20 +date: 2023-12-21 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 e7ad84e90c8ec..ac638f6518370 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: 2023-12-20 +date: 2023-12-21 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 4a6b4bfed4e51..ecfe86d8adc27 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: 2023-12-20 +date: 2023-12-21 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 6a5f735f86a28..22ec8ff9b7f15 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: 2023-12-20 +date: 2023-12-21 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 3a7991dbf5f4a..c467d178aaa9c 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: 2023-12-20 +date: 2023-12-21 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 51c751beed415..21cfe850579fc 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: 2023-12-20 +date: 2023-12-21 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 65cbfab2036ae..3237035fec015 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: 2023-12-20 +date: 2023-12-21 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 4c6a0b6bf4182..3f31f1f7edb84 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: 2023-12-20 +date: 2023-12-21 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 108457965b7b9..c1c340f9cccc7 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: 2023-12-20 +date: 2023-12-21 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 b0ce16df03234..82fc0ca9ca40b 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: 2023-12-20 +date: 2023-12-21 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 75cc5baef38de..21cbe5fe4dfa0 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: 2023-12-20 +date: 2023-12-21 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 7787852fd47b0..986a34823dcad 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: 2023-12-20 +date: 2023-12-21 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 ba79a9400352c..57d3f7b03ae1b 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: 2023-12-20 +date: 2023-12-21 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 073f3cd3d3d69..1d515d7566223 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: 2023-12-20 +date: 2023-12-21 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 3d2d1b3cf6033..04a2bb69f59f6 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: 2023-12-20 +date: 2023-12-21 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 34383de09320b..91fa8a5ad49bd 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: 2023-12-20 +date: 2023-12-21 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 bf4a485ef597f..ade659bb9ef91 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: 2023-12-20 +date: 2023-12-21 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 1baff418e6686..c6fc808e859cf 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: 2023-12-20 +date: 2023-12-21 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 bf19251f98526..5bcb87cf8fbd0 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: 2023-12-20 +date: 2023-12-21 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 c75f43c9091a0..ffa07aefb50bc 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: 2023-12-20 +date: 2023-12-21 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 c9ac829505fdc..89d2a7c871632 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: 2023-12-20 +date: 2023-12-21 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 9f2a3a12bdd55..5c64371144653 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4404,6 +4404,10 @@ "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/indices_routes.ts" }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/indices_routes.ts" + }, { "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index efb5ca9a8627d..3878dda022f74 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: 2023-12-20 +date: 2023-12-21 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 916f9228d6bcf..3b2c869a440f6 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: 2023-12-20 +date: 2023-12-21 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 b0002eac4cde9..315bff5546a26 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: 2023-12-20 +date: 2023-12-21 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 2f480eac36974..ee4117cafdf51 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: 2023-12-20 +date: 2023-12-21 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 3c9c19fbe0ab0..68284739bceea 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: 2023-12-20 +date: 2023-12-21 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 c3efefc42e35b..3656480a1b161 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: 2023-12-20 +date: 2023-12-21 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 524fc3c56027e..73c42cd26676e 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: 2023-12-20 +date: 2023-12-21 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 fd742237c6162..e99ae71e0ed32 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: 2023-12-20 +date: 2023-12-21 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 049cf5508ab0a..0fbecc550b890 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: 2023-12-20 +date: 2023-12-21 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 ff3398960d536..374f99df7846e 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: 2023-12-20 +date: 2023-12-21 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 bb7904f1a7e23..0cfbc9010c875 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: 2023-12-20 +date: 2023-12-21 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 3359ce214df07..94fd96b52cbf7 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: 2023-12-20 +date: 2023-12-21 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 92e2cf6d02c50..40197f67df013 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: 2023-12-20 +date: 2023-12-21 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 57f23b6197477..bbeea34bc6636 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: 2023-12-20 +date: 2023-12-21 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 427d68cd9ea41..06bbaebd8709e 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: 2023-12-20 +date: 2023-12-21 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 7585d0d2c23cc..1ca8d6b623615 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: 2023-12-20 +date: 2023-12-21 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 31a4b63250962..33c5599426569 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: 2023-12-20 +date: 2023-12-21 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 c6c149b4a5998..9b3045e3fa8ae 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: 2023-12-20 +date: 2023-12-21 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 3a893ec3a2501..b30296c72dab9 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: 2023-12-20 +date: 2023-12-21 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 c2898a671ce2e..a9aa834345570 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: 2023-12-20 +date: 2023-12-21 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 4a370c82f9098..3c12d01bf72c1 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: 2023-12-20 +date: 2023-12-21 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 3823aebb76ab9..d503e9ba8c50e 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: 2023-12-20 +date: 2023-12-21 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 970d898d0d8c4..28dff19fe2d24 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: 2023-12-20 +date: 2023-12-21 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 ef230c858a647..cc635864065ef 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: 2023-12-20 +date: 2023-12-21 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 0738dc8f8c3dd..8b1cae196fcf1 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: 2023-12-20 +date: 2023-12-21 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 448876b7c2496..af8ca1ed8eb08 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: 2023-12-20 +date: 2023-12-21 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 1a2e017640cac..33030427e39e6 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: 2023-12-20 +date: 2023-12-21 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 56aa30dba4c5e..2005c0eb78662 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: 2023-12-20 +date: 2023-12-21 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 34fafde085c17..955df9242dee5 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: 2023-12-20 +date: 2023-12-21 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 e09fba5618ddf..a7571fab6a007 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: 2023-12-20 +date: 2023-12-21 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 a0349c9b53ed7..93efe83e1a368 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: 2023-12-20 +date: 2023-12-21 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 d3bfa4169e5b1..91e4b7602c9fe 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: 2023-12-20 +date: 2023-12-21 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 d4fb8e133a88b..b1fe595fb6119 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: 2023-12-20 +date: 2023-12-21 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 e881c62aacd1c..65fc5ba808174 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: 2023-12-20 +date: 2023-12-21 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 8f16e6f81448d..8aef508ce708d 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: 2023-12-20 +date: 2023-12-21 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 4b0c81a1c5046..35636514e7b0f 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: 2023-12-20 +date: 2023-12-21 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 8c0dd9c9fe836..5e1aa4e0516ce 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: 2023-12-20 +date: 2023-12-21 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 6dc965a446f0c..b43d393843b38 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: 2023-12-20 +date: 2023-12-21 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 1681c5f47a9b1..cb60cff7899ca 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: 2023-12-20 +date: 2023-12-21 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 0d978818515f9..059b444eee8a6 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: 2023-12-20 +date: 2023-12-21 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 9064da09b3629..b7e7d6d240fe9 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: 2023-12-20 +date: 2023-12-21 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 7f88a8586bbb4..f9a227b51b980 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: 2023-12-20 +date: 2023-12-21 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 71706e6fcfbeb..c3d592b4ccd01 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: 2023-12-20 +date: 2023-12-21 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 e7ff92d28e49b..e3cfc0016205a 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: 2023-12-20 +date: 2023-12-21 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 3babef55d3712..dc894ce408832 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: 2023-12-20 +date: 2023-12-21 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 3de72e8ff4118..6562cc04b8d2b 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: 2023-12-20 +date: 2023-12-21 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 d315bee07fc0b..8860cc64b0ff2 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: 2023-12-20 +date: 2023-12-21 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 99238dd4fd2a2..46145e7dafea3 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: 2023-12-20 +date: 2023-12-21 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 2f8b013711db7..d18706056fc8c 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: 2023-12-20 +date: 2023-12-21 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 62b278170c193..976ac03873c07 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: 2023-12-20 +date: 2023-12-21 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 4747c7f8fc142..c945b37884f04 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: 2023-12-20 +date: 2023-12-21 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 ae394f1cf3327..64d3947380a89 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: 2023-12-20 +date: 2023-12-21 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 8f9a96801704e..c14cbd07dcb33 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: 2023-12-20 +date: 2023-12-21 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 ff35430ad0409..b2a5ee9c740c2 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: 2023-12-20 +date: 2023-12-21 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 74942dc0b4db5..bc618bf1d5280 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: 2023-12-20 +date: 2023-12-21 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 d91a51016a033..c52c887454374 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: 2023-12-20 +date: 2023-12-21 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 237e39632690b..339f26f951207 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: 2023-12-20 +date: 2023-12-21 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 8cefa52d203b0..aba3efb9f39e6 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: 2023-12-20 +date: 2023-12-21 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 82f4839ece5eb..92fc33c8a512d 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: 2023-12-20 +date: 2023-12-21 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 b43e84a8491a2..8a748b894289f 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: 2023-12-20 +date: 2023-12-21 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 4e47164ec80c0..2bf8adc73f012 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: 2023-12-20 +date: 2023-12-21 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 061fa4404deea..751587b7a7143 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: 2023-12-20 +date: 2023-12-21 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 1f39a2340d61c..ba9afc922f5d2 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: 2023-12-20 +date: 2023-12-21 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 6af81fdd63711..3547870869976 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: 2023-12-20 +date: 2023-12-21 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_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 0be162fcd2365..e755903cab5c2 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: 2023-12-20 +date: 2023-12-21 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 44e10756806e4..b660994a8e577 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: 2023-12-20 +date: 2023-12-21 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 aa3e08fc99c66..b76e97cf6f4a2 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: 2023-12-20 +date: 2023-12-21 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 d129c2e9699e1..23ea6489fcf40 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: 2023-12-20 +date: 2023-12-21 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 a4156eb3580d2..4be2f0a68513e 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: 2023-12-20 +date: 2023-12-21 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 dfd0ff5f563f3..f9d2dc98b5ab4 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: 2023-12-20 +date: 2023-12-21 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 15efb3c0dfb0e..57b198a45efe2 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: 2023-12-20 +date: 2023-12-21 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 8a2bd0d4eef0c..5df791a730448 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: 2023-12-20 +date: 2023-12-21 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 903efb2d21160..0caed2822c4b2 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: 2023-12-20 +date: 2023-12-21 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 5272b17ba6b54..2c657268a5d78 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: 2023-12-20 +date: 2023-12-21 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 ae85352065c88..636431f7bf687 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: 2023-12-20 +date: 2023-12-21 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 c403fd047b5c9..9f5784d5b9c64 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: 2023-12-20 +date: 2023-12-21 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 de950736bfaff..64b447f427080 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: 2023-12-20 +date: 2023-12-21 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 4f1d61590ae6a..9d2855bfa8518 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: 2023-12-20 +date: 2023-12-21 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 231f464db3db2..f9d3245d82ead 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: 2023-12-20 +date: 2023-12-21 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 3cf1536c2d9cd..91b53edb813d8 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: 2023-12-20 +date: 2023-12-21 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 edaaacb4887df..611c7b1032e3e 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: 2023-12-20 +date: 2023-12-21 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 4ba5a4f944dd7..9df78e54783bf 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: 2023-12-20 +date: 2023-12-21 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 f0fad67938c8d..c1f26fe313a7d 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: 2023-12-20 +date: 2023-12-21 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 ac2b99490fca4..5f84689ca7a3e 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: 2023-12-20 +date: 2023-12-21 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 657d10ba32d61..a68e6da729d0b 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: 2023-12-20 +date: 2023-12-21 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 dacb1a60213fd..84d53652d3ef5 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: 2023-12-20 +date: 2023-12-21 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 c5c5a1863251a..bb30fde7b6ba3 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: 2023-12-20 +date: 2023-12-21 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_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 9e0664a60a6b9..b1d3b8b2647ab 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: 2023-12-20 +date: 2023-12-21 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_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index fbd7b533a17af..5982b088a67b5 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.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 82fde9834b40d..98456142fa228 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: 2023-12-20 +date: 2023-12-21 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 832838b23cd60..c844f84771dbb 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: 2023-12-20 +date: 2023-12-21 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 32487c868527a..6ca93ee6cd812 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: 2023-12-20 +date: 2023-12-21 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 2094394427370..d0b256ca06698 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: 2023-12-20 +date: 2023-12-21 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 fdc7d2b471a53..592f46b80a922 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: 2023-12-20 +date: 2023-12-21 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 a7a7b42edc5fe..a9616f0320a58 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 6851c44cd8d3a..b4566e3185708 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 168dac22f1c78..9901ba85c631b 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: 2023-12-20 +date: 2023-12-21 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 e93f9eb98e7d0..de417779892eb 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: 2023-12-20 +date: 2023-12-21 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 dcbb1e7e72b1e..ab1fe7c3565ef 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 855973318b3bf..0c8d3df2a6101 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: 2023-12-20 +date: 2023-12-21 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 0dbf258601435..3f5fce00d8766 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: 2023-12-20 +date: 2023-12-21 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 18e70293bd50a..7a7c81abc68e2 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: 2023-12-20 +date: 2023-12-21 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 a9a7f53acc315..c87af96299e9c 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index d3f6dd79f3df1..ad6f9478e9ad3 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: 2023-12-20 +date: 2023-12-21 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 90300109368ca..1ff3d6a0c29c2 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: 2023-12-20 +date: 2023-12-21 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 e687ca4a1b4c5..981516377d3b2 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: 2023-12-20 +date: 2023-12-21 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 0542a938ccff9..abdddd7ae7cea 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: 2023-12-20 +date: 2023-12-21 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 80cafa7dbbd6d..9607746f81117 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: 2023-12-20 +date: 2023-12-21 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 c9838a7a6fa4c..b071b24947c9e 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: 2023-12-20 +date: 2023-12-21 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 5ecdf8cb813a1..91deb5cd6acae 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: 2023-12-20 +date: 2023-12-21 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 da8379cb1b7b3..4afa160c819c8 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: 2023-12-20 +date: 2023-12-21 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 6568e50674607..3ea7249514608 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: 2023-12-20 +date: 2023-12-21 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 3774d8c765fe2..74cde01bba07b 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: 2023-12-20 +date: 2023-12-21 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 840cc94a4c2d0..a50db44addd84 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: 2023-12-20 +date: 2023-12-21 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 91490fd580eb9..b5d1d4d6aa8f9 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: 2023-12-20 +date: 2023-12-21 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 6bb9f301e847e..ba71492ecec06 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 2f466de40d446..06bfb551f0db3 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 848e461f325c0..769f84c7a571f 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: 2023-12-20 +date: 2023-12-21 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 1c109848d555d..c9e17d49ca144 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: 2023-12-20 +date: 2023-12-21 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 ece431c0f2d58..1838e84c5e82d 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: 2023-12-20 +date: 2023-12-21 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.mdx b/api_docs/kbn_elastic_assistant_common.mdx index a95c465a0d760..14d5b49ef145a 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 78bc34211c648..e2300f88a3101 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: 2023-12-20 +date: 2023-12-21 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 da64a933321d3..727c0410b35d1 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: 2023-12-20 +date: 2023-12-21 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 1052a1a5c7e4e..d5dcf9ba5f308 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: 2023-12-20 +date: 2023-12-21 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 7a560bdee7863..83f290afe8d5d 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: 2023-12-20 +date: 2023-12-21 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 442cd2ca9b297..d106508e62a3f 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: 2023-12-20 +date: 2023-12-21 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 a6fcc77473dca..7f3ea3894a077 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index d25b7bef1befa..a21c94b33bd72 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: 2023-12-20 +date: 2023-12-21 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 7a32fcc4327fd..4650387b4e8de 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: 2023-12-20 +date: 2023-12-21 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 42a76bc1e64e7..736802ee4edf2 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: 2023-12-20 +date: 2023-12-21 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 de2220fb4f755..225f9154c0c87 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: 2023-12-20 +date: 2023-12-21 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 433dd6f2d93d2..354ed95ff1834 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: 2023-12-20 +date: 2023-12-21 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 accdfc8e7091f..46fd82d33a369 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: 2023-12-20 +date: 2023-12-21 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_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index b14b6e2ff39d2..485a82f935345 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: 2023-12-20 +date: 2023-12-21 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 b1dda159d9555..58a04b102d2d4 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: 2023-12-20 +date: 2023-12-21 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 ef0c710ee8423..ced2d9b02baa1 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: 2023-12-20 +date: 2023-12-21 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 b1336050fd6b5..acdd4ca7108fc 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: 2023-12-20 +date: 2023-12-21 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 19bc6d526e10f..f9ab63c7b8454 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 2730ec77cb851..b4cb4f54e3c90 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: 2023-12-20 +date: 2023-12-21 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 582082df34a82..9a30535f9846c 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: 2023-12-20 +date: 2023-12-21 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 e7d10d6055870..2348a73dada96 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: 2023-12-20 +date: 2023-12-21 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 ef80f3ee46dc5..f1192c6392ba6 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: 2023-12-20 +date: 2023-12-21 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 3c12656bb148a..6df85d7c3fbf9 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: 2023-12-20 +date: 2023-12-21 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 c0ac5fba635db..97f335e2b29a9 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: 2023-12-20 +date: 2023-12-21 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 658352b079658..a7b9c0e7965e7 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: 2023-12-20 +date: 2023-12-21 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 8e6eb9761b126..b76d82f9c63a0 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: 2023-12-20 +date: 2023-12-21 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 2f50f11de3f44..063d2caa0ce09 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 80d0a8339770b..e16c880e29b25 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: 2023-12-20 +date: 2023-12-21 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 8a2fd89d07a8a..736f247e927c0 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index c500d50f9970e..5ecb0dc6f48b3 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index f3ed34ef974f1..587266e89ce0e 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: 2023-12-20 +date: 2023-12-21 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 8ca3b4cc686b1..5e097f4cad1eb 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: 2023-12-20 +date: 2023-12-21 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 14175629d0de0..7a68f42df30f8 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 3de7135caca51..538469a414ea9 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: 2023-12-20 +date: 2023-12-21 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 e293460031004..f006aeac14ef4 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: 2023-12-20 +date: 2023-12-21 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 c328a9523f7fe..fa1b633c38df0 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index d67369e99fb75..c9e80ba261d71 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: 2023-12-20 +date: 2023-12-21 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 2deb751440b94..77180e8b6218d 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index db808a83e1293..a5e8bbe0c175e 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: 2023-12-20 +date: 2023-12-21 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 cf8d4712ab857..2ade745aeb61e 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: 2023-12-20 +date: 2023-12-21 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 025e2e2ac4ace..6dff98790c046 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: 2023-12-20 +date: 2023-12-21 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 9d66ef487abdf..b5f6c56a0c6a1 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: 2023-12-20 +date: 2023-12-21 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 e27fb8fde6adc..5dee0c8129f84 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: 2023-12-20 +date: 2023-12-21 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 2587916d3eca3..9d0b0d5982260 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: 2023-12-20 +date: 2023-12-21 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 e2e351e44a7aa..86db4fa4d568c 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: 2023-12-20 +date: 2023-12-21 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 03888667463b6..5728b144297fb 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: 2023-12-20 +date: 2023-12-21 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 84a9ff0460b60..bf887b0f0d495 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: 2023-12-20 +date: 2023-12-21 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 7de2c8af8f74a..8d232226abb17 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: 2023-12-20 +date: 2023-12-21 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 581101683f9d9..52f8367985b17 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: 2023-12-20 +date: 2023-12-21 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 6f45cd582b1da..b23991555ea24 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: 2023-12-20 +date: 2023-12-21 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 c0a82642b3e97..40723ca74a888 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: 2023-12-20 +date: 2023-12-21 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 b87a7f92012cb..9527a07532e8a 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: 2023-12-20 +date: 2023-12-21 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 7e6eeabac5041..d8f183ce4b63e 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: 2023-12-20 +date: 2023-12-21 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 eca8ce4c0ed5e..c331dda348956 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: 2023-12-20 +date: 2023-12-21 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 e52b8338d5355..ef511ba7c9c7a 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: 2023-12-20 +date: 2023-12-21 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_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 96a8c10ce1221..1f1403134c7d0 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: 2023-12-20 +date: 2023-12-21 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 4d8fe635e1206..b4cce1b1f4056 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: 2023-12-20 +date: 2023-12-21 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 1ac479cc9ad0c..fb9f40daf3815 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: 2023-12-20 +date: 2023-12-21 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 eb54b16550b28..663d847add458 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: 2023-12-20 +date: 2023-12-21 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 4b38a91390f3e..55d74f2dc9a78 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: 2023-12-20 +date: 2023-12-21 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 c4e3ad459a8b6..ee875c4b9b086 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: 2023-12-20 +date: 2023-12-21 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 8c5ab1329e5c1..9625b2901c5a6 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: 2023-12-20 +date: 2023-12-21 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 33548ea5b09bf..d4b84ca095d03 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: 2023-12-20 +date: 2023-12-21 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 07e67b30d3ece..3e8055e22bfe9 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: 2023-12-20 +date: 2023-12-21 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 0b743eae485bd..9b6a1a8d56e4a 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: 2023-12-20 +date: 2023-12-21 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 9939154aa79fa..d87dcee33b834 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: 2023-12-20 +date: 2023-12-21 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 87746d0d4e800..fb528775d6d6e 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: 2023-12-20 +date: 2023-12-21 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 554649dde0947..104c9bd08cbd0 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: 2023-12-20 +date: 2023-12-21 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 da82e1a0bb315..fa5d8a26da85c 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: 2023-12-20 +date: 2023-12-21 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 6f150ba5c262f..f1ec133743bf9 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: 2023-12-20 +date: 2023-12-21 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 cf0c6b27a830a..d76ce7eb02acc 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: 2023-12-20 +date: 2023-12-21 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 1ef538818c106..1c4722fb1e273 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: 2023-12-20 +date: 2023-12-21 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 37f6d28a5e542..dfdf19203f194 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: 2023-12-20 +date: 2023-12-21 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 ce095c3cb18be..e4cfbe7a1c1bb 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: 2023-12-20 +date: 2023-12-21 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_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 7945bcea8513a..857f1f1f627f8 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: 2023-12-20 +date: 2023-12-21 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 abf54b6acfab8..161c34fe35446 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: 2023-12-20 +date: 2023-12-21 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 d4cbe6dde603e..8cd0569d7058b 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index d5878e4c69cde..476a8ca11fe6e 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: 2023-12-20 +date: 2023-12-21 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 fb0d42a4954e3..e01ef66fd8ace 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index f86fdb41710a9..d4885592b1637 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: 2023-12-20 +date: 2023-12-21 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_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index fe5a6ce52bee5..a933509a8fc3c 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: 2023-12-20 +date: 2023-12-21 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 c468bf71c06a1..aee6941054ce4 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: 2023-12-20 +date: 2023-12-21 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 0b9989f5e6ee0..9c7d00cb1c1ce 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: 2023-12-20 +date: 2023-12-21 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 f4063c9da35db..d7076d0b70c8c 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: 2023-12-20 +date: 2023-12-21 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 f8493369a76d7..40ec00d662904 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: 2023-12-20 +date: 2023-12-21 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 c5200492fde1b..1c534416c68cb 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: 2023-12-20 +date: 2023-12-21 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 fe239e48b1bb9..afb5c544aeb70 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: 2023-12-20 +date: 2023-12-21 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 4f69417afdb49..2a3e058e47b17 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: 2023-12-20 +date: 2023-12-21 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 684b35cc79146..ca654854e531d 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: 2023-12-20 +date: 2023-12-21 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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 780791e8fb99a..cb11ae38713d9 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: 2023-12-20 +date: 2023-12-21 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 a738b8145a3d1..1261d477deec4 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index cfeceaa90b0f4..4975684673070 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: 2023-12-20 +date: 2023-12-21 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 1f04d43211196..bcb68a4999dfa 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: 2023-12-20 +date: 2023-12-21 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 463cefa369ca4..72b5d45ef3804 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 31f7c73d6d9ff..6734b12533be6 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: 2023-12-20 +date: 2023-12-21 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 5f62263cf9abc..6eaef4024c13f 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: 2023-12-20 +date: 2023-12-21 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 e730837d06143..97302f7e5ddef 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: 2023-12-20 +date: 2023-12-21 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 94f4da60f0299..766912c60a09c 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: 2023-12-20 +date: 2023-12-21 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 219366b71df2e..1d96d5a8693f9 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: 2023-12-20 +date: 2023-12-21 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 53845e86f97a0..3f0fd940b4577 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index c40beda979a85..2e08a38bd8f2f 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: 2023-12-20 +date: 2023-12-21 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 5155ff2962395..f462a62afa769 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: 2023-12-20 +date: 2023-12-21 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 ce1dc3c649607..9be75b489fe1e 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: 2023-12-20 +date: 2023-12-21 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 cdd494995f0d3..ec1cad8776d5c 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: 2023-12-20 +date: 2023-12-21 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 6dc4b9176db77..ae4b0db271aeb 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 2afa6b59c815a..93ff6845750a2 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: 2023-12-20 +date: 2023-12-21 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 dad1984688386..a4d9ea81b1c2c 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: 2023-12-20 +date: 2023-12-21 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 bc95c41a58d0b..e9d60015e69f1 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: 2023-12-20 +date: 2023-12-21 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 719d55649c8bf..d71b6f36a07d2 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: 2023-12-20 +date: 2023-12-21 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 06b238b11b93f..43e24ba0b2f1f 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: 2023-12-20 +date: 2023-12-21 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 6e4772df950b0..180e38e7d74aa 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: 2023-12-20 +date: 2023-12-21 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 57ed195534fed..c8c95aba2fdb6 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: 2023-12-20 +date: 2023-12-21 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 c6089a997ac4e..fe10766f2ff6a 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: 2023-12-20 +date: 2023-12-21 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 084a03b76449a..a7f540efabc23 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: 2023-12-20 +date: 2023-12-21 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 ab6066ff08142..1f20773ed98cb 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 65e8bd6973fa0..4538e15c2dd2e 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 2bbf09bde925f..46792eff4da48 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: 2023-12-20 +date: 2023-12-21 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 7cec1b9b998bd..2c87eebdfbf63 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: 2023-12-20 +date: 2023-12-21 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 2b1e0683f309d..fb82dfcadcaf7 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: 2023-12-20 +date: 2023-12-21 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 26de1a1841cbb..af33349d307a5 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 732f1c5da93a0..2a641830beae6 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: 2023-12-20 +date: 2023-12-21 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 b5de70f4790ae..ac28e4ba90994 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.devdocs.json b/api_docs/kbn_search_errors.devdocs.json index ef729a98515f1..897b63cf2bbcc 100644 --- a/api_docs/kbn_search_errors.devdocs.json +++ b/api_docs/kbn_search_errors.devdocs.json @@ -91,6 +91,21 @@ { "parentPluginId": "@kbn/search-errors", "id": "def-common.EsError.Unnamed.$2", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-search-errors/src/es_error.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/search-errors", + "id": "def-common.EsError.Unnamed.$3", "type": "Function", "tags": [], "label": "openInInspector", @@ -114,7 +129,7 @@ "label": "getErrorMessage", "description": [], "signature": [ - "() => JSX.Element | null" + "() => JSX.Element" ], "path": "packages/kbn-search-errors/src/es_error.tsx", "deprecated": false, @@ -130,63 +145,46 @@ "label": "getActions", "description": [], "signature": [ - "(application: ", - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - }, - ") => JSX.Element[]" + "() => JSX.Element[]" ], "path": "packages/kbn-search-errors/src/es_error.tsx", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.EsError.getActions.$1", - "type": "Object", - "tags": [], - "label": "application", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - } - ], - "path": "packages/kbn-search-errors/src/es_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], + "children": [], "returnComment": [] } ], "initialIsOpen": false - }, + } + ], + "functions": [ { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError", - "type": "Class", + "id": "def-common.createEsError", + "type": "Function", "tags": [], - "label": "PainlessError", + "label": "createEsError", "description": [], "signature": [ + "(err: ", { "pluginId": "@kbn/search-errors", "scope": "common", "docId": "kibKbnSearchErrorsPluginApi", - "section": "def-common.PainlessError", - "text": "PainlessError" + "section": "def-common.IEsError", + "text": "IEsError" + }, + ", openInInspector: () => void, services: ", + "Services", + ", dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" }, - " extends ", + " | undefined) => ", { "pluginId": "@kbn/search-errors", "scope": "common", @@ -195,187 +193,87 @@ "text": "EsError" } ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.painlessStack", - "type": "string", - "tags": [], - "label": "painlessStack", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.indexPattern", + "id": "def-common.createEsError.$1", "type": "Object", "tags": [], - "label": "indexPattern", + "label": "err", "description": [], "signature": [ { - "pluginId": "dataViews", + "pluginId": "@kbn/search-errors", "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" - }, - " | undefined" + "docId": "kibKbnSearchErrorsPluginApi", + "section": "def-common.IEsError", + "text": "IEsError" + } ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "isRequired": true }, { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.Unnamed", + "id": "def-common.createEsError.$2", "type": "Function", "tags": [], - "label": "Constructor", + "label": "openInInspector", "description": [], "signature": [ - "any" + "() => void" ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.Unnamed.$1", - "type": "Object", - "tags": [], - "label": "err", - "description": [], - "signature": [ - { - "pluginId": "@kbn/search-errors", - "scope": "common", - "docId": "kibKbnSearchErrorsPluginApi", - "section": "def-common.IEsError", - "text": "IEsError" - } - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.Unnamed.$2", - "type": "Function", - "tags": [], - "label": "openInInspector", - "description": [], - "signature": [ - "() => void" - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.Unnamed.$3", - "type": "Object", - "tags": [], - "label": "indexPattern", - "description": [], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" - }, - " | undefined" - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] + "isRequired": true }, { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.getErrorMessage", - "type": "Function", + "id": "def-common.createEsError.$3", + "type": "Object", "tags": [], - "label": "getErrorMessage", + "label": "services", "description": [], "signature": [ - "() => JSX.Element" + "Services" ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, "trackAdoption": false, - "children": [], - "returnComment": [] + "isRequired": true }, { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.getActions", - "type": "Function", + "id": "def-common.createEsError.$4", + "type": "Object", "tags": [], - "label": "getActions", + "label": "dataView", "description": [], "signature": [ - "(application: ", { - "pluginId": "@kbn/core-application-browser", + "pluginId": "dataViews", "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" }, - ") => JSX.Element[]" + " | undefined" ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.getActions.$1", - "type": "Object", - "tags": [], - "label": "application", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - } - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] + "isRequired": false } ], + "returnComment": [], "initialIsOpen": false - } - ], - "functions": [ + }, { "parentPluginId": "@kbn/search-errors", "id": "def-common.isEsError", @@ -411,54 +309,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.isPainlessError", - "type": "Function", - "tags": [], - "label": "isPainlessError", - "description": [], - "signature": [ - "(err: Error | ", - { - "pluginId": "@kbn/search-errors", - "scope": "common", - "docId": "kibKbnSearchErrorsPluginApi", - "section": "def-common.IEsError", - "text": "IEsError" - }, - ") => boolean" - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.isPainlessError.$1", - "type": "CompoundType", - "tags": [], - "label": "err", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/search-errors", - "scope": "common", - "docId": "kibKbnSearchErrorsPluginApi", - "section": "def-common.IEsError", - "text": "IEsError" - } - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/search-errors", "id": "def-common.renderSearchError", @@ -467,15 +317,7 @@ "label": "renderSearchError", "description": [], "signature": [ - "({\n error,\n application,\n}: { error: Error; application: ", - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - }, - "; }) => { title: string; body: React.ReactNode; actions?: React.ReactNode[] | undefined; } | undefined" + "(error: Error) => { title: string; body: React.ReactNode; actions?: React.ReactNode[] | undefined; } | undefined" ], "path": "packages/kbn-search-errors/src/render_search_error.ts", "deprecated": false, @@ -486,47 +328,15 @@ "id": "def-common.renderSearchError.$1", "type": "Object", "tags": [], - "label": "{\n error,\n application,\n}", + "label": "error", "description": [], + "signature": [ + "Error" + ], "path": "packages/kbn-search-errors/src/render_search_error.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.renderSearchError.$1.error", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/kbn-search-errors/src/render_search_error.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.renderSearchError.$1.application", - "type": "Object", - "tags": [], - "label": "application", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - } - ], - "path": "packages/kbn-search-errors/src/render_search_error.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "isRequired": true } ], "returnComment": [], diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 28044c354967a..76f049106e464 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.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 | |-------------------|-----------|------------------------|-----------------| -| 27 | 1 | 26 | 0 | +| 18 | 1 | 17 | 1 | ## Common diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 4e80f1e09ae49..67a450e95dc02 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: 2023-12-20 +date: 2023-12-21 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 872d1241f4c79..c8733af8f3b4f 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 7df39a20835e1..361e44f7525b9 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: 2023-12-20 +date: 2023-12-21 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 0311d655af61b..c1eddbd21e6ec 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: 2023-12-20 +date: 2023-12-21 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 07bf3b3b1d053..1ee3409edb441 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: 2023-12-20 +date: 2023-12-21 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_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 2bb23757570cf..2275e43f86531 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: 2023-12-20 +date: 2023-12-21 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 f276821476701..e98dcbc0fb3e1 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: 2023-12-20 +date: 2023-12-21 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 f7419335104ce..198fd8d906c6a 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: 2023-12-20 +date: 2023-12-21 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 daae2d1b00eec..a86bd69301014 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: 2023-12-20 +date: 2023-12-21 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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index e919e16c4fb9a..d46b9573b02ab 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: 2023-12-20 +date: 2023-12-21 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 c10215d400df3..752391b00c71e 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: 2023-12-20 +date: 2023-12-21 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 a1619d9228776..1c30c2dd9ddae 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: 2023-12-20 +date: 2023-12-21 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 2e9e3fda3bd73..c69cc00e9bd5d 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: 2023-12-20 +date: 2023-12-21 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 2504bf49c085d..485f91badfd29 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: 2023-12-20 +date: 2023-12-21 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_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index c8566604b272e..99bcebd52620c 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index d55216dc82dc6..daa59d3a14a8f 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: 2023-12-20 +date: 2023-12-21 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 aa9796b5717ac..dad69dd4f7d3c 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: 2023-12-20 +date: 2023-12-21 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 b3ef203a1a3c0..457a7d0f43b9a 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: 2023-12-20 +date: 2023-12-21 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 60abe223e006d..888396c150259 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: 2023-12-20 +date: 2023-12-21 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 9b45eb5442f01..6cd8f93dc42ce 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: 2023-12-20 +date: 2023-12-21 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 9a894c867b646..d6e71ec16ff10 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: 2023-12-20 +date: 2023-12-21 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 696893d05623a..ce41a5911691f 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: 2023-12-20 +date: 2023-12-21 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 3861554241486..f1d90b8643476 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: 2023-12-20 +date: 2023-12-21 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 67d118226936e..a17d58fef2957 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: 2023-12-20 +date: 2023-12-21 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 e2c786980f7b8..5bc2204e82bb7 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: 2023-12-20 +date: 2023-12-21 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 731f71bba1261..7788a5d4355dd 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: 2023-12-20 +date: 2023-12-21 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 80a6ecd781096..609f341dc1b05 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: 2023-12-20 +date: 2023-12-21 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 f56737b1185de..2cc9052e6efbb 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: 2023-12-20 +date: 2023-12-21 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 92366c91ca283..145a3a4e98f6c 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index fba7e624924c9..4d19913b46abc 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: 2023-12-20 +date: 2023-12-21 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 bb81917229091..90e9414c322d8 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: 2023-12-20 +date: 2023-12-21 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 d19c30dda087f..4dae4a8365fb9 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: 2023-12-20 +date: 2023-12-21 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 d269700c68f44..1f5140ac73696 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: 2023-12-20 +date: 2023-12-21 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 69fdcced5a23d..5e1ef4e7cc4cd 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: 2023-12-20 +date: 2023-12-21 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 d10b95719787b..5e737ffe67b0c 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: 2023-12-20 +date: 2023-12-21 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 0ac8433ce61cb..34d9e1cd7c3f8 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: 2023-12-20 +date: 2023-12-21 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 49f1e02ff5c1e..0edcb0420cf0b 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: 2023-12-20 +date: 2023-12-21 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 f65e8e2cbf415..b2a4991f0150d 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: 2023-12-20 +date: 2023-12-21 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 39fc250553136..731b7d47abda6 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: 2023-12-20 +date: 2023-12-21 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 e71e76571b820..b402fab6533ba 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: 2023-12-20 +date: 2023-12-21 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 ffaa19fe356c1..d2d7c19d98f93 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: 2023-12-20 +date: 2023-12-21 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 171e417021a5c..2ee426316121d 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: 2023-12-20 +date: 2023-12-21 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 c50aae83d82f5..50108c9335524 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: 2023-12-20 +date: 2023-12-21 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 172e010a4c1dc..a60c0a9caec89 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: 2023-12-20 +date: 2023-12-21 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 0900aa85d5405..564d7c1f72c99 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: 2023-12-20 +date: 2023-12-21 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 ef67141bccf4b..db69b2c21e993 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: 2023-12-20 +date: 2023-12-21 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 6b43a7bfaa4f0..ed36cadf1dd82 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: 2023-12-20 +date: 2023-12-21 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 b43071a29b928..9a7b32461ba39 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: 2023-12-20 +date: 2023-12-21 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 4cd8dafad7582..f10f62d557f53 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: 2023-12-20 +date: 2023-12-21 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 46eb79de5c2ed..cadb839de4d01 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: 2023-12-20 +date: 2023-12-21 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 e4edf827ef2cd..d1ebebbf8a1e0 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: 2023-12-20 +date: 2023-12-21 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 983664d389a81..4e23dbadfc9bd 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: 2023-12-20 +date: 2023-12-21 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 d62e92b1a1e04..23c1ab4249242 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: 2023-12-20 +date: 2023-12-21 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 5ae9195fabe12..4000466839f8f 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: 2023-12-20 +date: 2023-12-21 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 48375e038a4af..6fc345cdff8dc 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: 2023-12-20 +date: 2023-12-21 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 796aeae4062e1..4e0c87fcd147c 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: 2023-12-20 +date: 2023-12-21 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 6d352e3966d99..02dd7e6dab758 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: 2023-12-20 +date: 2023-12-21 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 beb7f0bcab789..04b9041cfb4da 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: 2023-12-20 +date: 2023-12-21 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 a82ba43928832..8537917d2ff7a 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: 2023-12-20 +date: 2023-12-21 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 51be93e9e9f2e..096853f46f3c4 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: 2023-12-20 +date: 2023-12-21 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 c61ba39a57398..8bb57fa2a8302 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: 2023-12-20 +date: 2023-12-21 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 720dba137db81..0a73e8c82489c 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: 2023-12-20 +date: 2023-12-21 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 537dff4ff66e1..b3a4be7b334b7 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: 2023-12-20 +date: 2023-12-21 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 2288c1079c75b..038d4faba2241 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: 2023-12-20 +date: 2023-12-21 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 6c0ebc1013fa6..a8061ccfe81f2 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: 2023-12-20 +date: 2023-12-21 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 725618eba9325..d30b04f051926 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: 2023-12-20 +date: 2023-12-21 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 d72ca3b1a5406..eb3833fa9b1e0 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: 2023-12-20 +date: 2023-12-21 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 b1361b01291ee..51da241172139 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: 2023-12-20 +date: 2023-12-21 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 4c3e1c497c694..2c03e16d1fc51 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: 2023-12-20 +date: 2023-12-21 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 e2c9d2f9413cc..ba28fe3f7d2dc 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: 2023-12-20 +date: 2023-12-21 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 ee8b10c4ce756..5709c448d789f 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: 2023-12-20 +date: 2023-12-21 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 9db659968e67e..9a2940efe64f9 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: 2023-12-20 +date: 2023-12-21 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 c089cd897f9ba..fcc8046d13a63 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: 2023-12-20 +date: 2023-12-21 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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 74b36dd06f458..7c59a633a5dd4 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: 2023-12-20 +date: 2023-12-21 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 2230d89183b5f..ceb9a840c2a62 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: 2023-12-20 +date: 2023-12-21 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 d3f8fb78d0d67..b9411bcd7e437 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 768a8cd40f2e9..61a90c02e971a 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: 2023-12-20 +date: 2023-12-21 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 b93e199289958..5d042ac9453c0 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: 2023-12-20 +date: 2023-12-21 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 bec40b1c04f32..8c83d7b479f28 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 0ac88141ae1ed..dafa7e902090f 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: 2023-12-20 +date: 2023-12-21 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 b31ff349267de..38873e11feae9 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 06f466e44a820..b6adb6aa52c70 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: 2023-12-20 +date: 2023-12-21 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 1181ce81c9fe0..4634783a3495b 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: 2023-12-20 +date: 2023-12-21 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 7f126ebb94d9d..855e9d75cb147 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 0965a33c7bdd0..a222ccab26b21 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: 2023-12-20 +date: 2023-12-21 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 09935c9dec33d..27f68438ecc48 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: 2023-12-20 +date: 2023-12-21 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_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 6f51d5f3a7c4d..e51582dcdfc2e 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: 2023-12-20 +date: 2023-12-21 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 df3bf00edb00f..26bd1db7ee89c 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: 2023-12-20 +date: 2023-12-21 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 1311abc8cb33b..b8cba57bb0947 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: 2023-12-20 +date: 2023-12-21 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 9623a6b3c92fb..30e320001d442 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: 2023-12-20 +date: 2023-12-21 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 4fbced2ccff16..c749f451f7264 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: 2023-12-20 +date: 2023-12-21 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.mdx b/api_docs/kbn_unified_data_table.mdx index 869008aef7bb3..4764ff63f7c4d 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 02c1582cafe73..1b0ccd381712a 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: 2023-12-20 +date: 2023-12-21 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 f70078f4c1cb9..2700f12fc973b 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: 2023-12-20 +date: 2023-12-21 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 49242071d22cf..cef793436ec50 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 375f32cca1a6b..fcac56c602b0e 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 0e3f645e97aff..70ee024c368f1 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: 2023-12-20 +date: 2023-12-21 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 eb981a467633f..900a4d6c7bce8 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: 2023-12-20 +date: 2023-12-21 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 70a7d2a2a36fb..98862238bb909 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: 2023-12-20 +date: 2023-12-21 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 e865b4aa1aca3..819717c4d1ff9 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: 2023-12-20 +date: 2023-12-21 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 6cb0c354c7e42..65c46038f6aeb 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: 2023-12-20 +date: 2023-12-21 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 d5892e8d25007..ed530e49d0d3c 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: 2023-12-20 +date: 2023-12-21 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 db9bce5caa52f..3050f707cb63b 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: 2023-12-20 +date: 2023-12-21 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 0322596c1aa40..39f0156a7f393 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: 2023-12-20 +date: 2023-12-21 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 c937220df66e1..4f4441e0d5bcd 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: 2023-12-20 +date: 2023-12-21 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_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index bf8661b5e7b4d..e31e880f0303c 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: 2023-12-20 +date: 2023-12-21 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 515a302398cec..06bea3a9af217 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 8d7cb865d9f39..193309dd1a10c 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1535,18 +1535,6 @@ "plugin": "crossClusterReplication", "path": "x-pack/plugins/cross_cluster_replication/public/app/index.tsx" }, - { - "plugin": "globalSearchBar", - "path": "x-pack/plugins/global_search_bar/public/plugin.tsx" - }, - { - "plugin": "globalSearchBar", - "path": "x-pack/plugins/global_search_bar/public/plugin.tsx" - }, - { - "plugin": "globalSearchBar", - "path": "x-pack/plugins/global_search_bar/public/plugin.tsx" - }, { "plugin": "graph", "path": "x-pack/plugins/graph/public/application.tsx" @@ -2758,11 +2746,11 @@ }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts" + "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts" + "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts" }, { "plugin": "security", diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 0b959dc7f193c..3a736d65bad57 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: 2023-12-20 +date: 2023-12-21 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 c5f2f8fc2ee45..4fecd5e7d96e4 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: 2023-12-20 +date: 2023-12-21 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 3288494857432..bcad5afe8964b 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index 48dc406105739..77331951572fc 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -502,7 +502,7 @@ "signature": [ "(startDependencies: ", "LensPluginStartDependencies", - ") => Promise" + ", isNewPanel?: boolean | undefined, deletePanel?: (() => void) | undefined) => Promise" ], "path": "x-pack/plugins/lens/public/embeddable/embeddable.tsx", "deprecated": false, @@ -522,6 +522,36 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "lens", + "id": "def-public.Embeddable.openConfingPanel.$2", + "type": "CompoundType", + "tags": [], + "label": "isNewPanel", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/lens/public/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "lens", + "id": "def-public.Embeddable.openConfingPanel.$3", + "type": "Function", + "tags": [], + "label": "deletePanel", + "description": [], + "signature": [ + "(() => void) | undefined" + ], + "path": "x-pack/plugins/lens/public/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [] diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index dee02d6eee013..43a45ad70fb15 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 642 | 0 | 543 | 60 | +| 644 | 0 | 545 | 60 | ## Client diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 65406175b3779..6a4c82b8a8794 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: 2023-12-20 +date: 2023-12-21 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 028dc38a5a860..c545d98dace7c 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: 2023-12-20 +date: 2023-12-21 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 c63f1231b414d..5cdcdabe6ece9 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: 2023-12-20 +date: 2023-12-21 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 5a61455b54f89..96287b83998f4 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: 2023-12-20 +date: 2023-12-21 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 9d0c651ee081d..c9858c1b33668 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 5ec0351c769a4..f7d80ed35744e 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index abc6f480bf76b..34f168ca6d1cd 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: 2023-12-20 +date: 2023-12-21 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 ce0aac83f4b29..fb75971d42180 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: 2023-12-20 +date: 2023-12-21 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 c90b38e41ad5b..922773a9fa48e 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: 2023-12-20 +date: 2023-12-21 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 3be1cb138f694..9759248cfe03e 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: 2023-12-20 +date: 2023-12-21 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 b447b5fee0d23..9d4a25d840dfe 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index 46c0e7d8ec219..7006f03c26649 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1942,6 +1942,8 @@ "section": "def-common.ModelDefinitionResponse", "text": "ModelDefinitionResponse" }, + ">; installElasticModel(modelId: string): Promise<", + "MlTrainedModelConfig", ">; }" ], "path": "x-pack/plugins/ml/server/shared.ts", diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 62bd3e5f384eb..39c8b7f0936bc 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: 2023-12-20 +date: 2023-12-21 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 e1fe1f71f6d7f..d50d6bd0f569e 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: 2023-12-20 +date: 2023-12-21 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 f3f50e0bce9df..e1e604ffd2fa3 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: 2023-12-20 +date: 2023-12-21 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 b6f63e843feb0..49f02cdd7ef85 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: 2023-12-20 +date: 2023-12-21 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 3dd539ffa14ba..2606500208d22 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: 2023-12-20 +date: 2023-12-21 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 80236314935b7..1a1a394eb8a86 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: 2023-12-20 +date: 2023-12-21 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 eb47ec2711c68..1a945f3286452 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: 2023-12-20 +date: 2023-12-21 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 adcdf65421338..511c367dfd527 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: 2023-12-20 +date: 2023-12-21 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 f27da99a8627f..6d84e75abce28 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: 2023-12-20 +date: 2023-12-21 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 c32c8a3b28b8d..b877662dc6996 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index 9f33390c3e3fd..aba2a4083a869 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index aba1582e714bb..337c6c985de7c 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: 2023-12-20 +date: 2023-12-21 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 1cb30444ed915..9961c7ee45b19 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: 2023-12-20 +date: 2023-12-21 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 7c844e7c20890..5901b5a78fe7b 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: 2023-12-20 +date: 2023-12-21 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 f402851a03758..76013e66cdf0e 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: 2023-12-20 +date: 2023-12-21 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 17f08e2dbc889..4747b5e1d153c 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,18 +21,18 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 77948 | 234 | 66667 | 1632 | +| 77945 | 234 | 66664 | 1633 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 269 | 0 | 263 | 31 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 271 | 0 | 265 | 31 | | | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 17 | 1 | 15 | 2 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 70 | 1 | 4 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 823 | 1 | 792 | 51 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 825 | 1 | 794 | 51 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 125 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Asset manager plugin for entity assets (inventory, topology, etc) | 9 | 0 | 9 | 2 | @@ -120,7 +120,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | kibanaUsageCollection | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 611 | 3 | 418 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 642 | 0 | 543 | 60 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 644 | 0 | 545 | 60 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 8 | 0 | 8 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | @@ -577,7 +577,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 75 | 0 | 75 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 2649 | 0 | 2649 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 27 | 1 | 26 | 0 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 1 | 17 | 1 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 25 | 0 | 25 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 20 | 0 | 18 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 82 | 0 | 35 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 82c72d0602be1..c5fcf6bfdcb84 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: 2023-12-20 +date: 2023-12-21 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 d86926dbc6124..316aac69a7a24 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: 2023-12-20 +date: 2023-12-21 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 a4dfcf9221f7a..db31aaa30770b 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: 2023-12-20 +date: 2023-12-21 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 0e3fc6069c67e..0c3a29e2f0292 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: 2023-12-20 +date: 2023-12-21 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 f777f625117c2..0e0f3fa5e0d8b 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: 2023-12-20 +date: 2023-12-21 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 02240413d6193..6cd47a02f92ab 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: 2023-12-20 +date: 2023-12-21 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 20f9ca21e639c..d7de2b78ab759 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: 2023-12-20 +date: 2023-12-21 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 79e5feb5fdcfe..4e93860f6f085 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: 2023-12-20 +date: 2023-12-21 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 23c28ea734930..aadb38dd6a112 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: 2023-12-20 +date: 2023-12-21 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 a0b3d295f0609..e00b28a628f23 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: 2023-12-20 +date: 2023-12-21 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 ac7ac641a56a8..93157b055943f 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: 2023-12-20 +date: 2023-12-21 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 10b8f4ef1b30c..28287a1053a89 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: 2023-12-20 +date: 2023-12-21 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 2d2c31c35d6d4..7ddd453c5b969 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: 2023-12-20 +date: 2023-12-21 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 080da486d6653..4d2e24cbe2e67 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: 2023-12-20 +date: 2023-12-21 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 78133a696a999..19dd5b85890a5 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: 2023-12-20 +date: 2023-12-21 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 dc5de4e95bdc1..3e00d449b78b6 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index d89c9efeeed03..0ede3f065f01e 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index a709f1d217625..90e9ace7ef4dd 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -473,7 +473,7 @@ "label": "data", "description": [], "signature": [ - "({ type: \"eql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { type: \"query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"saved_query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"threshold\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { type: \"threat_match\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { type: \"machine_learning\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { type: \"new_terms\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; } | { type: \"esql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" + "({ type: \"eql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { type: \"query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"saved_query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"threshold\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { type: \"threat_match\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { type: \"machine_learning\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { type: \"new_terms\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; } | { type: \"esql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" ], "path": "x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 0671100376372..c35d33c5a1830 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: 2023-12-20 +date: 2023-12-21 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 dc8561d3b52e3..0c8033309906a 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: 2023-12-20 +date: 2023-12-21 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 5a65ce9ac7880..52d425948f887 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: 2023-12-20 +date: 2023-12-21 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 79c8072a32a1c..5a8d4beb65789 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: 2023-12-20 +date: 2023-12-21 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 7968fb6705e85..503bfed68c52f 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: 2023-12-20 +date: 2023-12-21 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 000e66ee1ef3b..1b254a56e0845 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: 2023-12-20 +date: 2023-12-21 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 7c69e1e152581..7df80b70f7d48 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: 2023-12-20 +date: 2023-12-21 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 42447b167842d..7df436cbd7e9f 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 95286a9e82190..65d446a366899 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: 2023-12-20 +date: 2023-12-21 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 01cd1d29fd4e6..3b217b70a5f84 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: 2023-12-20 +date: 2023-12-21 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 c1c347c643dfc..41fb5eba150b7 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: 2023-12-20 +date: 2023-12-21 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 ebbce17be89c1..db49c370487ca 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.devdocs.json b/api_docs/task_manager.devdocs.json index 2bc531bde5295..23398830c4a27 100644 --- a/api_docs/task_manager.devdocs.json +++ b/api_docs/task_manager.devdocs.json @@ -387,9 +387,9 @@ "(error: Error, errorSource: ", { "pluginId": "taskManager", - "scope": "server", + "scope": "common", "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", + "section": "def-common.TaskErrorSource", "text": "TaskErrorSource" }, ") => ", @@ -430,9 +430,9 @@ "signature": [ { "pluginId": "taskManager", - "scope": "server", + "scope": "common", "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", + "section": "def-common.TaskErrorSource", "text": "TaskErrorSource" } ], @@ -633,15 +633,7 @@ "label": "throwUnrecoverableError", "description": [], "signature": [ - "(error: Error, errorSource: ", - { - "pluginId": "taskManager", - "scope": "server", - "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", - "text": "TaskErrorSource" - }, - ") => void" + "(error: Error) => void" ], "path": "x-pack/plugins/task_manager/server/task_running/errors.ts", "deprecated": false, @@ -661,27 +653,6 @@ "deprecated": false, "trackAdoption": false, "isRequired": true - }, - { - "parentPluginId": "taskManager", - "id": "def-server.throwUnrecoverableError.$2", - "type": "Enum", - "tags": [], - "label": "errorSource", - "description": [], - "signature": [ - { - "pluginId": "taskManager", - "scope": "server", - "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", - "text": "TaskErrorSource" - } - ], - "path": "x-pack/plugins/task_manager/server/task_running/errors.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true } ], "returnComment": [], @@ -1021,9 +992,9 @@ "signature": [ { "pluginId": "taskManager", - "scope": "server", + "scope": "common", "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", + "section": "def-common.TaskErrorSource", "text": "TaskErrorSource" }, " | undefined" @@ -1637,7 +1608,7 @@ "tags": [], "label": "TaskErrorSource", "description": [], - "path": "x-pack/plugins/task_manager/server/task_running/errors.ts", + "path": "x-pack/plugins/task_manager/common/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2001,7 +1972,20 @@ "classes": [], "functions": [], "interfaces": [], - "enums": [], + "enums": [ + { + "parentPluginId": "taskManager", + "id": "def-common.TaskErrorSource", + "type": "Enum", + "tags": [], + "label": "TaskErrorSource", + "description": [], + "path": "x-pack/plugins/task_manager/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "misc": [], "objects": [] } diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index f5720acb909f0..ae1bc36977634 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; @@ -49,3 +49,8 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o ### Consts, variables and types +## Common + +### Enums + + diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 2c7e34966b678..bec624ee7bc0a 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: 2023-12-20 +date: 2023-12-21 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 b3ece3658ff6c..022872c85c626 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: 2023-12-20 +date: 2023-12-21 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 a249b1bc0d577..e89823beb2c2a 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: 2023-12-20 +date: 2023-12-21 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 93af855b77f7f..60093707708af 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 1b843089f1361..856b1a94c8e2a 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 63e264031d361..5517b603b5016 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: 2023-12-20 +date: 2023-12-21 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 8bda84c44e806..66a6f9bbf7318 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: 2023-12-20 +date: 2023-12-21 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 964343655f031..aa7207521614e 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index e33cbc84596e9..fc734b95daecb 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1026,7 +1026,7 @@ "label": "JsonEditorWithMessageVariables", "description": [], "signature": [ - "({ buttonTitle, messageVariables, paramsProperty, inputTargetValue, label, errors, areaLabel, onDocumentsChange, helpText, onBlur, showButtonTitle, euiCodeEditorProps, }: React.PropsWithChildren) => JSX.Element" + "({ buttonTitle, messageVariables, paramsProperty, inputTargetValue, label, errors, ariaLabel, onDocumentsChange, helpText, onBlur, showButtonTitle, dataTestSubj, euiCodeEditorProps, }: React.PropsWithChildren) => JSX.Element" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/components/json_editor_with_message_variables.tsx", "deprecated": false, @@ -1037,7 +1037,7 @@ "id": "def-public.JsonEditorWithMessageVariables.$1", "type": "CompoundType", "tags": [], - "label": "{\n buttonTitle,\n messageVariables,\n paramsProperty,\n inputTargetValue,\n label,\n errors,\n areaLabel,\n onDocumentsChange,\n helpText,\n onBlur,\n showButtonTitle,\n euiCodeEditorProps = {},\n}", + "label": "{\n buttonTitle,\n messageVariables,\n paramsProperty,\n inputTargetValue,\n label,\n errors,\n ariaLabel,\n onDocumentsChange,\n helpText,\n onBlur,\n showButtonTitle,\n dataTestSubj,\n euiCodeEditorProps = {},\n}", "description": [], "signature": [ "React.PropsWithChildren" diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 0050e9ce95a4e..382c520ca566a 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: 2023-12-20 +date: 2023-12-21 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 6214a4ddeaefa..1cecdd6add6b2 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: 2023-12-20 +date: 2023-12-21 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 45c4c1d21ffed..f91f347581c57 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: 2023-12-20 +date: 2023-12-21 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 2e786d70f2f71..a8145a03cb216 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: 2023-12-20 +date: 2023-12-21 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 b7dfd2a6c836b..0355b61632ed9 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: 2023-12-20 +date: 2023-12-21 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 39c3794055604..ca4811c5b7480 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: 2023-12-20 +date: 2023-12-21 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 19d4782ec7d6b..7700de2fe347a 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: 2023-12-20 +date: 2023-12-21 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 4c3129b133478..d217285af03b6 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: 2023-12-20 +date: 2023-12-21 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 5fcc62642813a..0795f1f3e7f2f 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: 2023-12-20 +date: 2023-12-21 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 f71b562a62218..e354828fa7360 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: 2023-12-20 +date: 2023-12-21 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 8a6ba03021b09..54bbba1608ee5 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: 2023-12-20 +date: 2023-12-21 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 f24bee0440e98..99f394604f844 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: 2023-12-20 +date: 2023-12-21 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 4c67dd85451ac..f1397d08f3774 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: 2023-12-20 +date: 2023-12-21 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 74cfe13aba587..c27b5a2dbab32 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: 2023-12-20 +date: 2023-12-21 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 750aaaf624e5b..82cc2e49381ae 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: 2023-12-20 +date: 2023-12-21 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 93db8c2d945cb..a21e7b3b2317f 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: 2023-12-20 +date: 2023-12-21 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 56292f6063c33..90492ffa34106 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: 2023-12-20 +date: 2023-12-21 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 7902ca8103143..d9168065f45fd 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: 2023-12-20 +date: 2023-12-21 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 5b0bd3b1753af..96ee0e109ece5 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: 2023-12-20 +date: 2023-12-21 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 333d3ec33541b..71faad7c2dad5 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: 2023-12-20 +date: 2023-12-21 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 12a82eb484d4c..6f6eb2244bdce 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: 2023-12-20 +date: 2023-12-21 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 e10f383193377..71206e094e36f 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: 2023-12-20 +date: 2023-12-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/management/connectors/action-types/resilient.asciidoc b/docs/management/connectors/action-types/resilient.asciidoc index 04531a71dee62..ad8ebffcf0bb9 100644 --- a/docs/management/connectors/action-types/resilient.asciidoc +++ b/docs/management/connectors/action-types/resilient.asciidoc @@ -8,7 +8,7 @@ :frontmatter-tags-content-type: [how-to] :frontmatter-tags-user-goals: [configure] -The IBM Resilient connector uses the https://developer.ibm.com/security/resilient/rest/[RESILIENT REST v2] to create IBM Resilient incidents. +The {ibm-r} connector uses the https://developer.ibm.com/security/resilient/rest/[RESILIENT REST v2] to create {ibm-r} incidents. [float] [[define-resilient-ui]] @@ -18,47 +18,51 @@ You can create connectors in *{stack-manage-app} > {connectors-ui}* or as needed when you're creating a rule. For example: [role="screenshot"] -image::management/connectors/images/resilient-connector.png[IBM Resilient connector] +image::management/connectors/images/resilient-connector.png[{ibm-r} connector] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. [float] [[resilient-connector-configuration]] ==== Connector configuration -IBM Resilient connectors have the following configuration properties: +{ibm-r} connectors have the following configuration properties: -Name:: The name of the connector. -URL:: IBM Resilient instance URL. -Organization ID:: IBM Resilient organization ID. -API key ID:: The authentication key ID for HTTP Basic authentication. -API key secret:: The authentication key secret for HTTP Basic authentication. +API key ID:: +The authentication key ID for HTTP Basic authentication. +API key secret:: +The authentication key secret for HTTP Basic authentication. +Organization ID:: +The {ibm-r} organization ID. +URL:: +The {ibm-r} instance URL. [float] [[resilient-action-configuration]] === Test connectors -You can test connectors with the <> or -as you're creating or editing the connector in {kib}. For example: +You can test connectors as you're creating or editing the connector in {kib}. +For example: [role="screenshot"] -image::management/connectors/images/resilient-params-test.png[IBM Resilient params test] - - -IBM Resilient actions have the following configuration properties. - -Incident types:: The type of the incident. -Severity code:: The severity of the incident. -Name:: A name for the issue, used for searching the contents of the knowledge base. -Description:: The details about the incident. -Additional comments:: Additional information for the client, such as how to troubleshoot the issue. +image::management/connectors/images/resilient-params-test.png[IBM Resilient connector test options] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. + +{ibm-r} actions have the following configuration properties. + +Additional comments:: +Extra information for the client, such as how to troubleshoot the issue. +Description:: +The details about the incident. +Incident type:: +The type of the incident. +Name:: +A name for the issue, used for searching the contents of the knowledge base. +Severity:: +The severity of the incident. [float] [[resilient-connector-networking-configuration]] === Connector networking configuration -Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. - -[float] -[[configuring-resilient]] -=== Configure IBM Resilient - -IBM Resilient offers https://www.ibm.com/security/intelligent-orchestration/resilient[Instances], which you can use to test incidents. +Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. +You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. diff --git a/docs/management/connectors/images/resilient-connector.png b/docs/management/connectors/images/resilient-connector.png index b7d216d150f8c..b5d08ed5987b2 100644 Binary files a/docs/management/connectors/images/resilient-connector.png and b/docs/management/connectors/images/resilient-connector.png differ diff --git a/docs/management/connectors/images/resilient-params-test.png b/docs/management/connectors/images/resilient-params-test.png index 865d5b517aea2..a8d3b6133922d 100644 Binary files a/docs/management/connectors/images/resilient-params-test.png and b/docs/management/connectors/images/resilient-params-test.png differ diff --git a/package.json b/package.json index 238ef4253cbb7..e8f0d7bcc664d 100644 --- a/package.json +++ b/package.json @@ -941,7 +941,7 @@ "file-saver": "^1.3.8", "fnv-plus": "^1.3.1", "font-awesome": "4.7.0", - "formik": "^2.2.9", + "formik": "^2.4.5", "fp-ts": "^2.3.1", "geojson-vt": "^3.2.1", "get-port": "^5.0.0", @@ -1415,7 +1415,7 @@ "@types/nock": "^10.0.3", "@types/node": "18.18.5", "@types/node-fetch": "2.6.4", - "@types/node-forge": "^1.3.1", + "@types/node-forge": "^1.3.10", "@types/nodemailer": "^6.4.0", "@types/normalize-path": "^3.0.0", "@types/object-hash": "^1.3.0", @@ -1464,7 +1464,7 @@ "@types/testing-library__jest-dom": "^5.14.7", "@types/textarea-caret": "^3.0.1", "@types/tinycolor2": "^1.4.1", - "@types/tough-cookie": "^4.0.2", + "@types/tough-cookie": "^4.0.5", "@types/type-detect": "^4.0.1", "@types/uuid": "^9.0.0", "@types/vinyl": "^2.0.4", @@ -1474,7 +1474,6 @@ "@types/webpack-env": "^1.15.3", "@types/webpack-merge": "^4.1.5", "@types/webpack-sources": "^0.1.4", - "@types/xml-crypto": "^1.4.2", "@types/xml2js": "^0.4.11", "@types/yargs": "^15.0.0", "@types/yauzl": "^2.9.1", @@ -1647,7 +1646,7 @@ "tempy": "^0.3.0", "terser": "^5.26.0", "terser-webpack-plugin": "^4.2.3", - "tough-cookie": "^4.1.2", + "tough-cookie": "^4.1.3", "tree-kill": "^1.2.2", "ts-morph": "^13.0.2", "tsd": "^0.20.0", @@ -1663,7 +1662,7 @@ "webpack-dev-server": "^4.9.3", "webpack-merge": "^4.2.2", "webpack-sources": "^1.4.1", - "xml-crypto": "^3.0.1", + "xml-crypto": "^5.0.0", "xmlbuilder": "13.0.2", "yargs": "^15.4.1", "yarn-deduplicate": "^6.0.2" diff --git a/packages/analytics/utils/analytics_collection_utils/package.json b/packages/analytics/utils/analytics_collection_utils/package.json index eb10b67ce94dd..7f8c62ab714c2 100644 --- a/packages/analytics/utils/analytics_collection_utils/package.json +++ b/packages/analytics/utils/analytics_collection_utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/analytics-collection-utils", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/home/sample_data_card/package.json b/packages/home/sample_data_card/package.json index c82ba35d94238..af6b307173f48 100644 --- a/packages/home/sample_data_card/package.json +++ b/packages/home/sample_data_card/package.json @@ -2,5 +2,6 @@ "name": "@kbn/home-sample-data-card", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/home/sample_data_tab/package.json b/packages/home/sample_data_tab/package.json index 435df25207ff8..9e51f80d68388 100644 --- a/packages/home/sample_data_tab/package.json +++ b/packages/home/sample_data_tab/package.json @@ -2,5 +2,6 @@ "name": "@kbn/home-sample-data-tab", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/home/sample_data_types/package.json b/packages/home/sample_data_types/package.json index e18945e544a5e..b56eeff7bf186 100644 --- a/packages/home/sample_data_types/package.json +++ b/packages/home/sample_data_types/package.json @@ -2,5 +2,6 @@ "name": "@kbn/home-sample-data-types", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-alerts-as-data-utils/package.json b/packages/kbn-alerts-as-data-utils/package.json index 25aa26b3d435c..bfb3dbda073a4 100644 --- a/packages/kbn-alerts-as-data-utils/package.json +++ b/packages/kbn-alerts-as-data-utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/alerts-as-data-utils", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-apm-config-loader/src/config.ts b/packages/kbn-apm-config-loader/src/config.ts index 0dbff5b2385ca..7430454cc4c2a 100644 --- a/packages/kbn-apm-config-loader/src/config.ts +++ b/packages/kbn-apm-config-loader/src/config.ts @@ -9,7 +9,6 @@ import { join } from 'path'; import { merge } from 'lodash'; import { execSync } from 'child_process'; -// deep import to avoid loading the whole package import { getDataPath } from '@kbn/utils'; import { readFileSync } from 'fs'; import type { AgentConfigOptions } from 'elastic-apm-node'; diff --git a/packages/kbn-apm-synthtrace/src/scenarios/many_services.ts b/packages/kbn-apm-synthtrace/src/scenarios/many_services.ts index 705d425d8d932..68a5432f1a29a 100644 --- a/packages/kbn-apm-synthtrace/src/scenarios/many_services.ts +++ b/packages/kbn-apm-synthtrace/src/scenarios/many_services.ts @@ -14,8 +14,8 @@ import { withClient } from '../lib/utils/with_client'; const ENVIRONMENT = getSynthtraceEnvironment(__filename); -const scenario: Scenario = async ({ logger }) => { - const numServices = 500; +const scenario: Scenario = async ({ logger, scenarioOpts = { services: 500 } }) => { + const numServices = scenarioOpts.services; const languages = ['go', 'dotnet', 'java', 'python']; const services = ['web', 'order-processing', 'api-backend', 'proxy']; const agentVersions: Record = { diff --git a/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_extra_actions.tsx b/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_extra_actions.tsx index e7cdba71008f9..fa9d09d7a6af0 100644 --- a/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_extra_actions.tsx +++ b/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_extra_actions.tsx @@ -8,11 +8,11 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import React, { useCallback, Dispatch, useContext } from 'react'; import { EuiFlexGroup, EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; import { DistributeEquallyIcon } from '../assets/distribute_equally'; -import { TooltipWrapper } from '../tooltip_wrapper'; import type { ColorRangesActions } from './types'; import { ColorRangesContext } from './color_ranges_context'; diff --git a/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_item_buttons.tsx b/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_item_buttons.tsx index 5cd9bb50bafb1..658d93aebdde3 100644 --- a/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_item_buttons.tsx +++ b/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_item_buttons.tsx @@ -10,11 +10,11 @@ import React, { Dispatch, useCallback, useContext } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButtonIcon, EuiIconProps } from '@elastic/eui'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { PaletteContinuity, CustomPaletteParams } from '../../../palettes'; import { isLastItem } from './utils'; -import { TooltipWrapper } from '../tooltip_wrapper'; import type { ColorRangesActions, ColorRange, ColorRangeAccessor } from './types'; import { ColorRangesContext } from './color_ranges_context'; diff --git a/packages/kbn-coloring/tsconfig.json b/packages/kbn-coloring/tsconfig.json index 315e59225601c..3a97faa1b9d3a 100644 --- a/packages/kbn-coloring/tsconfig.json +++ b/packages/kbn-coloring/tsconfig.json @@ -22,6 +22,7 @@ "@kbn/test-jest-helpers", "@kbn/data-plugin", "@kbn/ui-theme", + "@kbn/visualization-utils", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-esql/src/antlr/.antlr/esql_lexer.interp b/packages/kbn-esql/src/antlr/.antlr/esql_lexer.interp new file mode 100644 index 0000000000000..8cd048fa4e8c3 --- /dev/null +++ b/packages/kbn-esql/src/antlr/.antlr/esql_lexer.interp @@ -0,0 +1,307 @@ +token literal names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'by' +null +'and' +null +null +'.' +'(' +null +']' +null +null +null +null +null +null +null +'or' +')' +'_' +'info' +'functions' +null +null +'+' +'-' +'*' +'/' +'%' +'10' +null +'nulls' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +DISSECT +GROK +EVAL +EXPLAIN +FROM +ROW +STATS +WHERE +SORT +MV_EXPAND +LIMIT +PROJECT +DROP +RENAME +SHOW +ENRICH +KEEP +LINE_COMMENT +MULTILINE_COMMENT +WS +EXPLAIN_WS +EXPLAIN_LINE_COMMENT +EXPLAIN_MULTILINE_COMMENT +PIPE +STRING +INTEGER_LITERAL +DECIMAL_LITERAL +BY +DATE_LITERAL +AND +ASSIGN +COMMA +DOT +LP +OPENING_BRACKET +CLOSING_BRACKET +NOT +LIKE +RLIKE +IN +IS +AS +NULL +OR +RP +UNDERSCORE +INFO +FUNCTIONS +BOOLEAN_VALUE +COMPARISON_OPERATOR +PLUS +MINUS +ASTERISK +SLASH +PERCENT +TEN +ORDERING +NULLS_ORDERING +NULLS_ORDERING_DIRECTION +MATH_FUNCTION +UNARY_FUNCTION +WHERE_FUNCTIONS +UNQUOTED_IDENTIFIER +QUOTED_IDENTIFIER +EXPR_LINE_COMMENT +EXPR_MULTILINE_COMMENT +EXPR_WS +METADATA +SRC_UNQUOTED_IDENTIFIER +SRC_QUOTED_IDENTIFIER +SRC_LINE_COMMENT +SRC_MULTILINE_COMMENT +SRC_WS +ON +WITH +ENR_UNQUOTED_IDENTIFIER +ENR_QUOTED_IDENTIFIER +ENR_LINE_COMMENT +ENR_MULTILINE_COMMENT +ENR_WS +EXPLAIN_PIPE + +rule names: +DISSECT +GROK +EVAL +EXPLAIN +FROM +ROW +STATS +WHERE +SORT +MV_EXPAND +LIMIT +PROJECT +DROP +RENAME +SHOW +ENRICH +KEEP +LINE_COMMENT +MULTILINE_COMMENT +WS +EXPLAIN_OPENING_BRACKET +EXPLAIN_PIPE +EXPLAIN_WS +EXPLAIN_LINE_COMMENT +EXPLAIN_MULTILINE_COMMENT +PIPE +DIGIT +LETTER +ESCAPE_SEQUENCE +UNESCAPED_CHARS +EXPONENT +STRING +INTEGER_LITERAL +DECIMAL_LITERAL +BY +DATE_LITERAL +AND +ASSIGN +COMMA +DOT +LP +OPENING_BRACKET +CLOSING_BRACKET +NOT +LIKE +RLIKE +IN +IS +AS +NULL +OR +RP +UNDERSCORE +INFO +FUNCTIONS +BOOLEAN_VALUE +COMPARISON_OPERATOR +PLUS +MINUS +ASTERISK +SLASH +PERCENT +TEN +ORDERING +NULLS_ORDERING +NULLS_ORDERING_DIRECTION +MATH_FUNCTION +UNARY_FUNCTION +WHERE_FUNCTIONS +UNQUOTED_IDENTIFIER +QUOTED_IDENTIFIER +EXPR_LINE_COMMENT +EXPR_MULTILINE_COMMENT +EXPR_WS +SRC_PIPE +SRC_OPENING_BRACKET +SRC_CLOSING_BRACKET +SRC_COMMA +SRC_ASSIGN +METADATA +SRC_UNQUOTED_IDENTIFIER +SRC_UNQUOTED_IDENTIFIER_PART +SRC_QUOTED_IDENTIFIER +SRC_LINE_COMMENT +SRC_MULTILINE_COMMENT +SRC_WS +ON +WITH +ENR_PIPE +ENR_CLOSING_BRACKET +ENR_COMMA +ENR_ASSIGN +ENR_UNQUOTED_IDENTIFIER +ENR_UNQUOTED_IDENTIFIER_PART +ENR_QUOTED_IDENTIFIER +ENR_LINE_COMMENT +ENR_MULTILINE_COMMENT +ENR_WS +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE +EXPLAIN_MODE +EXPRESSION +SOURCE_IDENTIFIERS +ENRICH_IDENTIFIERS + +atn: +[4, 0, 81, 1610, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 397, 8, 17, 10, 17, 12, 17, 400, 9, 17, 1, 17, 3, 17, 403, 8, 17, 1, 17, 3, 17, 406, 8, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 415, 8, 18, 10, 18, 12, 18, 418, 9, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 4, 19, 426, 8, 19, 11, 19, 12, 19, 427, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 3, 30, 469, 8, 30, 1, 30, 4, 30, 472, 8, 30, 11, 30, 12, 30, 473, 1, 31, 1, 31, 1, 31, 5, 31, 479, 8, 31, 10, 31, 12, 31, 482, 9, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 490, 8, 31, 10, 31, 12, 31, 493, 9, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 500, 8, 31, 1, 31, 3, 31, 503, 8, 31, 3, 31, 505, 8, 31, 1, 32, 4, 32, 508, 8, 32, 11, 32, 12, 32, 509, 1, 33, 4, 33, 513, 8, 33, 11, 33, 12, 33, 514, 1, 33, 1, 33, 5, 33, 519, 8, 33, 10, 33, 12, 33, 522, 9, 33, 1, 33, 1, 33, 4, 33, 526, 8, 33, 11, 33, 12, 33, 527, 1, 33, 4, 33, 531, 8, 33, 11, 33, 12, 33, 532, 1, 33, 1, 33, 5, 33, 537, 8, 33, 10, 33, 12, 33, 540, 9, 33, 3, 33, 542, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 548, 8, 33, 11, 33, 12, 33, 549, 1, 33, 1, 33, 3, 33, 554, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 653, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 737, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 749, 8, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 771, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 788, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1232, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 1385, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 1403, 8, 69, 10, 69, 12, 69, 1406, 9, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 4, 69, 1413, 8, 69, 11, 69, 12, 69, 1414, 3, 69, 1417, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 1423, 8, 70, 10, 70, 12, 70, 1426, 9, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 4, 80, 1477, 8, 80, 11, 80, 12, 80, 1478, 1, 81, 4, 81, 1482, 8, 81, 11, 81, 12, 81, 1483, 1, 81, 1, 81, 3, 81, 1488, 8, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 4, 92, 1532, 8, 92, 11, 92, 12, 92, 1533, 1, 93, 4, 93, 1537, 8, 93, 11, 93, 12, 93, 1538, 1, 93, 1, 93, 3, 93, 1543, 8, 93, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 101, 1, 101, 1, 102, 1, 102, 1, 103, 1, 103, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 112, 1, 112, 1, 113, 1, 113, 1, 114, 1, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 2, 416, 491, 0, 124, 5, 1, 7, 2, 9, 3, 11, 4, 13, 5, 15, 6, 17, 7, 19, 8, 21, 9, 23, 10, 25, 11, 27, 12, 29, 13, 31, 14, 33, 15, 35, 16, 37, 17, 39, 18, 41, 19, 43, 20, 45, 0, 47, 81, 49, 21, 51, 22, 53, 23, 55, 24, 57, 0, 59, 0, 61, 0, 63, 0, 65, 0, 67, 25, 69, 26, 71, 27, 73, 28, 75, 29, 77, 30, 79, 31, 81, 32, 83, 33, 85, 34, 87, 35, 89, 36, 91, 37, 93, 38, 95, 39, 97, 40, 99, 41, 101, 42, 103, 43, 105, 44, 107, 45, 109, 46, 111, 47, 113, 48, 115, 49, 117, 50, 119, 51, 121, 52, 123, 53, 125, 54, 127, 55, 129, 56, 131, 57, 133, 58, 135, 59, 137, 60, 139, 61, 141, 62, 143, 63, 145, 64, 147, 65, 149, 66, 151, 67, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, 68, 165, 69, 167, 0, 169, 70, 171, 71, 173, 72, 175, 73, 177, 74, 179, 75, 181, 0, 183, 0, 185, 0, 187, 0, 189, 76, 191, 0, 193, 77, 195, 78, 197, 79, 199, 80, 201, 0, 203, 0, 205, 0, 207, 0, 209, 0, 211, 0, 213, 0, 215, 0, 217, 0, 219, 0, 221, 0, 223, 0, 225, 0, 227, 0, 229, 0, 231, 0, 233, 0, 235, 0, 237, 0, 239, 0, 241, 0, 243, 0, 245, 0, 247, 0, 249, 0, 251, 0, 5, 0, 1, 2, 3, 4, 37, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 5, 0, 34, 34, 92, 92, 110, 110, 114, 114, 116, 116, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 64, 64, 95, 95, 1, 0, 96, 96, 10, 0, 9, 10, 13, 13, 32, 32, 44, 44, 47, 47, 61, 61, 91, 91, 93, 93, 96, 96, 124, 124, 2, 0, 42, 42, 47, 47, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 1711, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 1, 45, 1, 0, 0, 0, 1, 47, 1, 0, 0, 0, 1, 49, 1, 0, 0, 0, 1, 51, 1, 0, 0, 0, 1, 53, 1, 0, 0, 0, 2, 55, 1, 0, 0, 0, 2, 67, 1, 0, 0, 0, 2, 69, 1, 0, 0, 0, 2, 71, 1, 0, 0, 0, 2, 73, 1, 0, 0, 0, 2, 75, 1, 0, 0, 0, 2, 77, 1, 0, 0, 0, 2, 79, 1, 0, 0, 0, 2, 81, 1, 0, 0, 0, 2, 83, 1, 0, 0, 0, 2, 85, 1, 0, 0, 0, 2, 87, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 2, 91, 1, 0, 0, 0, 2, 93, 1, 0, 0, 0, 2, 95, 1, 0, 0, 0, 2, 97, 1, 0, 0, 0, 2, 99, 1, 0, 0, 0, 2, 101, 1, 0, 0, 0, 2, 103, 1, 0, 0, 0, 2, 105, 1, 0, 0, 0, 2, 107, 1, 0, 0, 0, 2, 109, 1, 0, 0, 0, 2, 111, 1, 0, 0, 0, 2, 113, 1, 0, 0, 0, 2, 115, 1, 0, 0, 0, 2, 117, 1, 0, 0, 0, 2, 119, 1, 0, 0, 0, 2, 121, 1, 0, 0, 0, 2, 123, 1, 0, 0, 0, 2, 125, 1, 0, 0, 0, 2, 127, 1, 0, 0, 0, 2, 129, 1, 0, 0, 0, 2, 131, 1, 0, 0, 0, 2, 133, 1, 0, 0, 0, 2, 135, 1, 0, 0, 0, 2, 137, 1, 0, 0, 0, 2, 139, 1, 0, 0, 0, 2, 141, 1, 0, 0, 0, 2, 143, 1, 0, 0, 0, 2, 145, 1, 0, 0, 0, 2, 147, 1, 0, 0, 0, 2, 149, 1, 0, 0, 0, 2, 151, 1, 0, 0, 0, 3, 153, 1, 0, 0, 0, 3, 155, 1, 0, 0, 0, 3, 157, 1, 0, 0, 0, 3, 159, 1, 0, 0, 0, 3, 161, 1, 0, 0, 0, 3, 163, 1, 0, 0, 0, 3, 165, 1, 0, 0, 0, 3, 169, 1, 0, 0, 0, 3, 171, 1, 0, 0, 0, 3, 173, 1, 0, 0, 0, 3, 175, 1, 0, 0, 0, 4, 177, 1, 0, 0, 0, 4, 179, 1, 0, 0, 0, 4, 181, 1, 0, 0, 0, 4, 183, 1, 0, 0, 0, 4, 185, 1, 0, 0, 0, 4, 187, 1, 0, 0, 0, 4, 189, 1, 0, 0, 0, 4, 193, 1, 0, 0, 0, 4, 195, 1, 0, 0, 0, 4, 197, 1, 0, 0, 0, 4, 199, 1, 0, 0, 0, 5, 253, 1, 0, 0, 0, 7, 263, 1, 0, 0, 0, 9, 270, 1, 0, 0, 0, 11, 277, 1, 0, 0, 0, 13, 287, 1, 0, 0, 0, 15, 294, 1, 0, 0, 0, 17, 300, 1, 0, 0, 0, 19, 308, 1, 0, 0, 0, 21, 316, 1, 0, 0, 0, 23, 323, 1, 0, 0, 0, 25, 335, 1, 0, 0, 0, 27, 343, 1, 0, 0, 0, 29, 353, 1, 0, 0, 0, 31, 360, 1, 0, 0, 0, 33, 369, 1, 0, 0, 0, 35, 376, 1, 0, 0, 0, 37, 385, 1, 0, 0, 0, 39, 392, 1, 0, 0, 0, 41, 409, 1, 0, 0, 0, 43, 425, 1, 0, 0, 0, 45, 431, 1, 0, 0, 0, 47, 436, 1, 0, 0, 0, 49, 441, 1, 0, 0, 0, 51, 445, 1, 0, 0, 0, 53, 449, 1, 0, 0, 0, 55, 453, 1, 0, 0, 0, 57, 457, 1, 0, 0, 0, 59, 459, 1, 0, 0, 0, 61, 461, 1, 0, 0, 0, 63, 464, 1, 0, 0, 0, 65, 466, 1, 0, 0, 0, 67, 504, 1, 0, 0, 0, 69, 507, 1, 0, 0, 0, 71, 553, 1, 0, 0, 0, 73, 555, 1, 0, 0, 0, 75, 652, 1, 0, 0, 0, 77, 654, 1, 0, 0, 0, 79, 658, 1, 0, 0, 0, 81, 660, 1, 0, 0, 0, 83, 662, 1, 0, 0, 0, 85, 664, 1, 0, 0, 0, 87, 666, 1, 0, 0, 0, 89, 671, 1, 0, 0, 0, 91, 676, 1, 0, 0, 0, 93, 680, 1, 0, 0, 0, 95, 685, 1, 0, 0, 0, 97, 691, 1, 0, 0, 0, 99, 694, 1, 0, 0, 0, 101, 697, 1, 0, 0, 0, 103, 700, 1, 0, 0, 0, 105, 705, 1, 0, 0, 0, 107, 708, 1, 0, 0, 0, 109, 710, 1, 0, 0, 0, 111, 712, 1, 0, 0, 0, 113, 717, 1, 0, 0, 0, 115, 736, 1, 0, 0, 0, 117, 748, 1, 0, 0, 0, 119, 750, 1, 0, 0, 0, 121, 752, 1, 0, 0, 0, 123, 754, 1, 0, 0, 0, 125, 756, 1, 0, 0, 0, 127, 758, 1, 0, 0, 0, 129, 760, 1, 0, 0, 0, 131, 770, 1, 0, 0, 0, 133, 772, 1, 0, 0, 0, 135, 787, 1, 0, 0, 0, 137, 1231, 1, 0, 0, 0, 139, 1384, 1, 0, 0, 0, 141, 1386, 1, 0, 0, 0, 143, 1416, 1, 0, 0, 0, 145, 1418, 1, 0, 0, 0, 147, 1429, 1, 0, 0, 0, 149, 1433, 1, 0, 0, 0, 151, 1437, 1, 0, 0, 0, 153, 1441, 1, 0, 0, 0, 155, 1446, 1, 0, 0, 0, 157, 1452, 1, 0, 0, 0, 159, 1458, 1, 0, 0, 0, 161, 1462, 1, 0, 0, 0, 163, 1466, 1, 0, 0, 0, 165, 1476, 1, 0, 0, 0, 167, 1487, 1, 0, 0, 0, 169, 1489, 1, 0, 0, 0, 171, 1491, 1, 0, 0, 0, 173, 1495, 1, 0, 0, 0, 175, 1499, 1, 0, 0, 0, 177, 1503, 1, 0, 0, 0, 179, 1506, 1, 0, 0, 0, 181, 1511, 1, 0, 0, 0, 183, 1516, 1, 0, 0, 0, 185, 1522, 1, 0, 0, 0, 187, 1526, 1, 0, 0, 0, 189, 1531, 1, 0, 0, 0, 191, 1542, 1, 0, 0, 0, 193, 1544, 1, 0, 0, 0, 195, 1546, 1, 0, 0, 0, 197, 1550, 1, 0, 0, 0, 199, 1554, 1, 0, 0, 0, 201, 1558, 1, 0, 0, 0, 203, 1560, 1, 0, 0, 0, 205, 1562, 1, 0, 0, 0, 207, 1564, 1, 0, 0, 0, 209, 1566, 1, 0, 0, 0, 211, 1568, 1, 0, 0, 0, 213, 1570, 1, 0, 0, 0, 215, 1572, 1, 0, 0, 0, 217, 1574, 1, 0, 0, 0, 219, 1576, 1, 0, 0, 0, 221, 1578, 1, 0, 0, 0, 223, 1580, 1, 0, 0, 0, 225, 1582, 1, 0, 0, 0, 227, 1584, 1, 0, 0, 0, 229, 1586, 1, 0, 0, 0, 231, 1588, 1, 0, 0, 0, 233, 1590, 1, 0, 0, 0, 235, 1592, 1, 0, 0, 0, 237, 1594, 1, 0, 0, 0, 239, 1596, 1, 0, 0, 0, 241, 1598, 1, 0, 0, 0, 243, 1600, 1, 0, 0, 0, 245, 1602, 1, 0, 0, 0, 247, 1604, 1, 0, 0, 0, 249, 1606, 1, 0, 0, 0, 251, 1608, 1, 0, 0, 0, 253, 254, 3, 207, 101, 0, 254, 255, 3, 217, 106, 0, 255, 256, 3, 237, 116, 0, 256, 257, 3, 237, 116, 0, 257, 258, 3, 209, 102, 0, 258, 259, 3, 205, 100, 0, 259, 260, 3, 239, 117, 0, 260, 261, 1, 0, 0, 0, 261, 262, 6, 0, 0, 0, 262, 6, 1, 0, 0, 0, 263, 264, 3, 213, 104, 0, 264, 265, 3, 235, 115, 0, 265, 266, 3, 229, 112, 0, 266, 267, 3, 221, 108, 0, 267, 268, 1, 0, 0, 0, 268, 269, 6, 1, 0, 0, 269, 8, 1, 0, 0, 0, 270, 271, 3, 209, 102, 0, 271, 272, 3, 243, 119, 0, 272, 273, 3, 201, 98, 0, 273, 274, 3, 223, 109, 0, 274, 275, 1, 0, 0, 0, 275, 276, 6, 2, 0, 0, 276, 10, 1, 0, 0, 0, 277, 278, 3, 209, 102, 0, 278, 279, 3, 247, 121, 0, 279, 280, 3, 231, 113, 0, 280, 281, 3, 223, 109, 0, 281, 282, 3, 201, 98, 0, 282, 283, 3, 217, 106, 0, 283, 284, 3, 227, 111, 0, 284, 285, 1, 0, 0, 0, 285, 286, 6, 3, 1, 0, 286, 12, 1, 0, 0, 0, 287, 288, 3, 211, 103, 0, 288, 289, 3, 235, 115, 0, 289, 290, 3, 229, 112, 0, 290, 291, 3, 225, 110, 0, 291, 292, 1, 0, 0, 0, 292, 293, 6, 4, 2, 0, 293, 14, 1, 0, 0, 0, 294, 295, 3, 235, 115, 0, 295, 296, 3, 229, 112, 0, 296, 297, 3, 245, 120, 0, 297, 298, 1, 0, 0, 0, 298, 299, 6, 5, 0, 0, 299, 16, 1, 0, 0, 0, 300, 301, 3, 237, 116, 0, 301, 302, 3, 239, 117, 0, 302, 303, 3, 201, 98, 0, 303, 304, 3, 239, 117, 0, 304, 305, 3, 237, 116, 0, 305, 306, 1, 0, 0, 0, 306, 307, 6, 6, 0, 0, 307, 18, 1, 0, 0, 0, 308, 309, 3, 245, 120, 0, 309, 310, 3, 215, 105, 0, 310, 311, 3, 209, 102, 0, 311, 312, 3, 235, 115, 0, 312, 313, 3, 209, 102, 0, 313, 314, 1, 0, 0, 0, 314, 315, 6, 7, 0, 0, 315, 20, 1, 0, 0, 0, 316, 317, 3, 237, 116, 0, 317, 318, 3, 229, 112, 0, 318, 319, 3, 235, 115, 0, 319, 320, 3, 239, 117, 0, 320, 321, 1, 0, 0, 0, 321, 322, 6, 8, 0, 0, 322, 22, 1, 0, 0, 0, 323, 324, 3, 225, 110, 0, 324, 325, 3, 243, 119, 0, 325, 326, 3, 109, 52, 0, 326, 327, 3, 209, 102, 0, 327, 328, 3, 247, 121, 0, 328, 329, 3, 231, 113, 0, 329, 330, 3, 201, 98, 0, 330, 331, 3, 227, 111, 0, 331, 332, 3, 207, 101, 0, 332, 333, 1, 0, 0, 0, 333, 334, 6, 9, 0, 0, 334, 24, 1, 0, 0, 0, 335, 336, 3, 223, 109, 0, 336, 337, 3, 217, 106, 0, 337, 338, 3, 225, 110, 0, 338, 339, 3, 217, 106, 0, 339, 340, 3, 239, 117, 0, 340, 341, 1, 0, 0, 0, 341, 342, 6, 10, 0, 0, 342, 26, 1, 0, 0, 0, 343, 344, 3, 231, 113, 0, 344, 345, 3, 235, 115, 0, 345, 346, 3, 229, 112, 0, 346, 347, 3, 219, 107, 0, 347, 348, 3, 209, 102, 0, 348, 349, 3, 205, 100, 0, 349, 350, 3, 239, 117, 0, 350, 351, 1, 0, 0, 0, 351, 352, 6, 11, 0, 0, 352, 28, 1, 0, 0, 0, 353, 354, 3, 207, 101, 0, 354, 355, 3, 235, 115, 0, 355, 356, 3, 229, 112, 0, 356, 357, 3, 231, 113, 0, 357, 358, 1, 0, 0, 0, 358, 359, 6, 12, 0, 0, 359, 30, 1, 0, 0, 0, 360, 361, 3, 235, 115, 0, 361, 362, 3, 209, 102, 0, 362, 363, 3, 227, 111, 0, 363, 364, 3, 201, 98, 0, 364, 365, 3, 225, 110, 0, 365, 366, 3, 209, 102, 0, 366, 367, 1, 0, 0, 0, 367, 368, 6, 13, 0, 0, 368, 32, 1, 0, 0, 0, 369, 370, 3, 237, 116, 0, 370, 371, 3, 215, 105, 0, 371, 372, 3, 229, 112, 0, 372, 373, 3, 245, 120, 0, 373, 374, 1, 0, 0, 0, 374, 375, 6, 14, 0, 0, 375, 34, 1, 0, 0, 0, 376, 377, 3, 209, 102, 0, 377, 378, 3, 227, 111, 0, 378, 379, 3, 235, 115, 0, 379, 380, 3, 217, 106, 0, 380, 381, 3, 205, 100, 0, 381, 382, 3, 215, 105, 0, 382, 383, 1, 0, 0, 0, 383, 384, 6, 15, 3, 0, 384, 36, 1, 0, 0, 0, 385, 386, 3, 221, 108, 0, 386, 387, 3, 209, 102, 0, 387, 388, 3, 209, 102, 0, 388, 389, 3, 231, 113, 0, 389, 390, 1, 0, 0, 0, 390, 391, 6, 16, 0, 0, 391, 38, 1, 0, 0, 0, 392, 393, 5, 47, 0, 0, 393, 394, 5, 47, 0, 0, 394, 398, 1, 0, 0, 0, 395, 397, 8, 0, 0, 0, 396, 395, 1, 0, 0, 0, 397, 400, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 402, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 403, 5, 13, 0, 0, 402, 401, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 405, 1, 0, 0, 0, 404, 406, 5, 10, 0, 0, 405, 404, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 6, 17, 4, 0, 408, 40, 1, 0, 0, 0, 409, 410, 5, 47, 0, 0, 410, 411, 5, 42, 0, 0, 411, 416, 1, 0, 0, 0, 412, 415, 3, 41, 18, 0, 413, 415, 9, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 413, 1, 0, 0, 0, 415, 418, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 419, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 419, 420, 5, 42, 0, 0, 420, 421, 5, 47, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 6, 18, 4, 0, 423, 42, 1, 0, 0, 0, 424, 426, 7, 1, 0, 0, 425, 424, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 425, 1, 0, 0, 0, 427, 428, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 430, 6, 19, 4, 0, 430, 44, 1, 0, 0, 0, 431, 432, 5, 91, 0, 0, 432, 433, 1, 0, 0, 0, 433, 434, 6, 20, 5, 0, 434, 435, 6, 20, 6, 0, 435, 46, 1, 0, 0, 0, 436, 437, 5, 124, 0, 0, 437, 438, 1, 0, 0, 0, 438, 439, 6, 21, 7, 0, 439, 440, 6, 21, 8, 0, 440, 48, 1, 0, 0, 0, 441, 442, 3, 43, 19, 0, 442, 443, 1, 0, 0, 0, 443, 444, 6, 22, 4, 0, 444, 50, 1, 0, 0, 0, 445, 446, 3, 39, 17, 0, 446, 447, 1, 0, 0, 0, 447, 448, 6, 23, 4, 0, 448, 52, 1, 0, 0, 0, 449, 450, 3, 41, 18, 0, 450, 451, 1, 0, 0, 0, 451, 452, 6, 24, 4, 0, 452, 54, 1, 0, 0, 0, 453, 454, 5, 124, 0, 0, 454, 455, 1, 0, 0, 0, 455, 456, 6, 25, 8, 0, 456, 56, 1, 0, 0, 0, 457, 458, 7, 2, 0, 0, 458, 58, 1, 0, 0, 0, 459, 460, 7, 3, 0, 0, 460, 60, 1, 0, 0, 0, 461, 462, 5, 92, 0, 0, 462, 463, 7, 4, 0, 0, 463, 62, 1, 0, 0, 0, 464, 465, 8, 5, 0, 0, 465, 64, 1, 0, 0, 0, 466, 468, 7, 6, 0, 0, 467, 469, 7, 7, 0, 0, 468, 467, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 471, 1, 0, 0, 0, 470, 472, 3, 57, 26, 0, 471, 470, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 471, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 66, 1, 0, 0, 0, 475, 480, 5, 34, 0, 0, 476, 479, 3, 61, 28, 0, 477, 479, 3, 63, 29, 0, 478, 476, 1, 0, 0, 0, 478, 477, 1, 0, 0, 0, 479, 482, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 483, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 483, 505, 5, 34, 0, 0, 484, 485, 5, 34, 0, 0, 485, 486, 5, 34, 0, 0, 486, 487, 5, 34, 0, 0, 487, 491, 1, 0, 0, 0, 488, 490, 8, 0, 0, 0, 489, 488, 1, 0, 0, 0, 490, 493, 1, 0, 0, 0, 491, 492, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 492, 494, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 494, 495, 5, 34, 0, 0, 495, 496, 5, 34, 0, 0, 496, 497, 5, 34, 0, 0, 497, 499, 1, 0, 0, 0, 498, 500, 5, 34, 0, 0, 499, 498, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 502, 1, 0, 0, 0, 501, 503, 5, 34, 0, 0, 502, 501, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 505, 1, 0, 0, 0, 504, 475, 1, 0, 0, 0, 504, 484, 1, 0, 0, 0, 505, 68, 1, 0, 0, 0, 506, 508, 3, 57, 26, 0, 507, 506, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 70, 1, 0, 0, 0, 511, 513, 3, 57, 26, 0, 512, 511, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 520, 3, 83, 39, 0, 517, 519, 3, 57, 26, 0, 518, 517, 1, 0, 0, 0, 519, 522, 1, 0, 0, 0, 520, 518, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 554, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 523, 525, 3, 83, 39, 0, 524, 526, 3, 57, 26, 0, 525, 524, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 554, 1, 0, 0, 0, 529, 531, 3, 57, 26, 0, 530, 529, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 541, 1, 0, 0, 0, 534, 538, 3, 83, 39, 0, 535, 537, 3, 57, 26, 0, 536, 535, 1, 0, 0, 0, 537, 540, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 541, 534, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 544, 3, 65, 30, 0, 544, 554, 1, 0, 0, 0, 545, 547, 3, 83, 39, 0, 546, 548, 3, 57, 26, 0, 547, 546, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 552, 3, 65, 30, 0, 552, 554, 1, 0, 0, 0, 553, 512, 1, 0, 0, 0, 553, 523, 1, 0, 0, 0, 553, 530, 1, 0, 0, 0, 553, 545, 1, 0, 0, 0, 554, 72, 1, 0, 0, 0, 555, 556, 5, 98, 0, 0, 556, 557, 5, 121, 0, 0, 557, 74, 1, 0, 0, 0, 558, 559, 5, 121, 0, 0, 559, 560, 5, 101, 0, 0, 560, 561, 5, 97, 0, 0, 561, 653, 5, 114, 0, 0, 562, 563, 5, 109, 0, 0, 563, 564, 5, 111, 0, 0, 564, 565, 5, 110, 0, 0, 565, 566, 5, 116, 0, 0, 566, 653, 5, 104, 0, 0, 567, 568, 5, 100, 0, 0, 568, 569, 5, 97, 0, 0, 569, 653, 5, 121, 0, 0, 570, 571, 5, 115, 0, 0, 571, 572, 5, 101, 0, 0, 572, 573, 5, 99, 0, 0, 573, 574, 5, 111, 0, 0, 574, 575, 5, 110, 0, 0, 575, 653, 5, 100, 0, 0, 576, 577, 5, 109, 0, 0, 577, 578, 5, 105, 0, 0, 578, 579, 5, 110, 0, 0, 579, 580, 5, 117, 0, 0, 580, 581, 5, 116, 0, 0, 581, 653, 5, 101, 0, 0, 582, 583, 5, 104, 0, 0, 583, 584, 5, 111, 0, 0, 584, 585, 5, 117, 0, 0, 585, 653, 5, 114, 0, 0, 586, 587, 5, 119, 0, 0, 587, 588, 5, 101, 0, 0, 588, 589, 5, 101, 0, 0, 589, 653, 5, 107, 0, 0, 590, 591, 5, 109, 0, 0, 591, 592, 5, 105, 0, 0, 592, 593, 5, 108, 0, 0, 593, 594, 5, 108, 0, 0, 594, 595, 5, 105, 0, 0, 595, 596, 5, 115, 0, 0, 596, 597, 5, 101, 0, 0, 597, 598, 5, 99, 0, 0, 598, 599, 5, 111, 0, 0, 599, 600, 5, 110, 0, 0, 600, 653, 5, 100, 0, 0, 601, 602, 5, 121, 0, 0, 602, 603, 5, 101, 0, 0, 603, 604, 5, 97, 0, 0, 604, 605, 5, 114, 0, 0, 605, 653, 5, 115, 0, 0, 606, 607, 5, 109, 0, 0, 607, 608, 5, 111, 0, 0, 608, 609, 5, 110, 0, 0, 609, 610, 5, 116, 0, 0, 610, 611, 5, 104, 0, 0, 611, 653, 5, 115, 0, 0, 612, 613, 5, 100, 0, 0, 613, 614, 5, 97, 0, 0, 614, 615, 5, 121, 0, 0, 615, 653, 5, 115, 0, 0, 616, 617, 5, 115, 0, 0, 617, 618, 5, 101, 0, 0, 618, 619, 5, 99, 0, 0, 619, 620, 5, 111, 0, 0, 620, 621, 5, 110, 0, 0, 621, 622, 5, 100, 0, 0, 622, 653, 5, 115, 0, 0, 623, 624, 5, 109, 0, 0, 624, 625, 5, 105, 0, 0, 625, 626, 5, 110, 0, 0, 626, 627, 5, 117, 0, 0, 627, 628, 5, 116, 0, 0, 628, 629, 5, 101, 0, 0, 629, 653, 5, 115, 0, 0, 630, 631, 5, 104, 0, 0, 631, 632, 5, 111, 0, 0, 632, 633, 5, 117, 0, 0, 633, 634, 5, 114, 0, 0, 634, 653, 5, 115, 0, 0, 635, 636, 5, 119, 0, 0, 636, 637, 5, 101, 0, 0, 637, 638, 5, 101, 0, 0, 638, 639, 5, 107, 0, 0, 639, 653, 5, 115, 0, 0, 640, 641, 5, 109, 0, 0, 641, 642, 5, 105, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 108, 0, 0, 644, 645, 5, 105, 0, 0, 645, 646, 5, 115, 0, 0, 646, 647, 5, 101, 0, 0, 647, 648, 5, 99, 0, 0, 648, 649, 5, 111, 0, 0, 649, 650, 5, 110, 0, 0, 650, 651, 5, 100, 0, 0, 651, 653, 5, 115, 0, 0, 652, 558, 1, 0, 0, 0, 652, 562, 1, 0, 0, 0, 652, 567, 1, 0, 0, 0, 652, 570, 1, 0, 0, 0, 652, 576, 1, 0, 0, 0, 652, 582, 1, 0, 0, 0, 652, 586, 1, 0, 0, 0, 652, 590, 1, 0, 0, 0, 652, 601, 1, 0, 0, 0, 652, 606, 1, 0, 0, 0, 652, 612, 1, 0, 0, 0, 652, 616, 1, 0, 0, 0, 652, 623, 1, 0, 0, 0, 652, 630, 1, 0, 0, 0, 652, 635, 1, 0, 0, 0, 652, 640, 1, 0, 0, 0, 653, 76, 1, 0, 0, 0, 654, 655, 5, 97, 0, 0, 655, 656, 5, 110, 0, 0, 656, 657, 5, 100, 0, 0, 657, 78, 1, 0, 0, 0, 658, 659, 5, 61, 0, 0, 659, 80, 1, 0, 0, 0, 660, 661, 5, 44, 0, 0, 661, 82, 1, 0, 0, 0, 662, 663, 5, 46, 0, 0, 663, 84, 1, 0, 0, 0, 664, 665, 5, 40, 0, 0, 665, 86, 1, 0, 0, 0, 666, 667, 5, 91, 0, 0, 667, 668, 1, 0, 0, 0, 668, 669, 6, 41, 0, 0, 669, 670, 6, 41, 0, 0, 670, 88, 1, 0, 0, 0, 671, 672, 5, 93, 0, 0, 672, 673, 1, 0, 0, 0, 673, 674, 6, 42, 8, 0, 674, 675, 6, 42, 8, 0, 675, 90, 1, 0, 0, 0, 676, 677, 3, 227, 111, 0, 677, 678, 3, 229, 112, 0, 678, 679, 3, 239, 117, 0, 679, 92, 1, 0, 0, 0, 680, 681, 3, 223, 109, 0, 681, 682, 3, 217, 106, 0, 682, 683, 3, 221, 108, 0, 683, 684, 3, 209, 102, 0, 684, 94, 1, 0, 0, 0, 685, 686, 3, 235, 115, 0, 686, 687, 3, 223, 109, 0, 687, 688, 3, 217, 106, 0, 688, 689, 3, 221, 108, 0, 689, 690, 3, 209, 102, 0, 690, 96, 1, 0, 0, 0, 691, 692, 3, 217, 106, 0, 692, 693, 3, 227, 111, 0, 693, 98, 1, 0, 0, 0, 694, 695, 3, 217, 106, 0, 695, 696, 3, 237, 116, 0, 696, 100, 1, 0, 0, 0, 697, 698, 3, 201, 98, 0, 698, 699, 3, 237, 116, 0, 699, 102, 1, 0, 0, 0, 700, 701, 3, 227, 111, 0, 701, 702, 3, 241, 118, 0, 702, 703, 3, 223, 109, 0, 703, 704, 3, 223, 109, 0, 704, 104, 1, 0, 0, 0, 705, 706, 5, 111, 0, 0, 706, 707, 5, 114, 0, 0, 707, 106, 1, 0, 0, 0, 708, 709, 5, 41, 0, 0, 709, 108, 1, 0, 0, 0, 710, 711, 5, 95, 0, 0, 711, 110, 1, 0, 0, 0, 712, 713, 5, 105, 0, 0, 713, 714, 5, 110, 0, 0, 714, 715, 5, 102, 0, 0, 715, 716, 5, 111, 0, 0, 716, 112, 1, 0, 0, 0, 717, 718, 5, 102, 0, 0, 718, 719, 5, 117, 0, 0, 719, 720, 5, 110, 0, 0, 720, 721, 5, 99, 0, 0, 721, 722, 5, 116, 0, 0, 722, 723, 5, 105, 0, 0, 723, 724, 5, 111, 0, 0, 724, 725, 5, 110, 0, 0, 725, 726, 5, 115, 0, 0, 726, 114, 1, 0, 0, 0, 727, 728, 5, 116, 0, 0, 728, 729, 5, 114, 0, 0, 729, 730, 5, 117, 0, 0, 730, 737, 5, 101, 0, 0, 731, 732, 5, 102, 0, 0, 732, 733, 5, 97, 0, 0, 733, 734, 5, 108, 0, 0, 734, 735, 5, 115, 0, 0, 735, 737, 5, 101, 0, 0, 736, 727, 1, 0, 0, 0, 736, 731, 1, 0, 0, 0, 737, 116, 1, 0, 0, 0, 738, 739, 5, 61, 0, 0, 739, 749, 5, 61, 0, 0, 740, 741, 5, 33, 0, 0, 741, 749, 5, 61, 0, 0, 742, 749, 5, 60, 0, 0, 743, 744, 5, 60, 0, 0, 744, 749, 5, 61, 0, 0, 745, 749, 5, 62, 0, 0, 746, 747, 5, 62, 0, 0, 747, 749, 5, 61, 0, 0, 748, 738, 1, 0, 0, 0, 748, 740, 1, 0, 0, 0, 748, 742, 1, 0, 0, 0, 748, 743, 1, 0, 0, 0, 748, 745, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 749, 118, 1, 0, 0, 0, 750, 751, 5, 43, 0, 0, 751, 120, 1, 0, 0, 0, 752, 753, 5, 45, 0, 0, 753, 122, 1, 0, 0, 0, 754, 755, 5, 42, 0, 0, 755, 124, 1, 0, 0, 0, 756, 757, 5, 47, 0, 0, 757, 126, 1, 0, 0, 0, 758, 759, 5, 37, 0, 0, 759, 128, 1, 0, 0, 0, 760, 761, 5, 49, 0, 0, 761, 762, 5, 48, 0, 0, 762, 130, 1, 0, 0, 0, 763, 764, 5, 97, 0, 0, 764, 765, 5, 115, 0, 0, 765, 771, 5, 99, 0, 0, 766, 767, 5, 100, 0, 0, 767, 768, 5, 101, 0, 0, 768, 769, 5, 115, 0, 0, 769, 771, 5, 99, 0, 0, 770, 763, 1, 0, 0, 0, 770, 766, 1, 0, 0, 0, 771, 132, 1, 0, 0, 0, 772, 773, 5, 110, 0, 0, 773, 774, 5, 117, 0, 0, 774, 775, 5, 108, 0, 0, 775, 776, 5, 108, 0, 0, 776, 777, 5, 115, 0, 0, 777, 134, 1, 0, 0, 0, 778, 779, 5, 102, 0, 0, 779, 780, 5, 105, 0, 0, 780, 781, 5, 114, 0, 0, 781, 782, 5, 115, 0, 0, 782, 788, 5, 116, 0, 0, 783, 784, 5, 108, 0, 0, 784, 785, 5, 97, 0, 0, 785, 786, 5, 115, 0, 0, 786, 788, 5, 116, 0, 0, 787, 778, 1, 0, 0, 0, 787, 783, 1, 0, 0, 0, 788, 136, 1, 0, 0, 0, 789, 790, 3, 235, 115, 0, 790, 791, 3, 229, 112, 0, 791, 792, 3, 241, 118, 0, 792, 793, 3, 227, 111, 0, 793, 794, 3, 207, 101, 0, 794, 1232, 1, 0, 0, 0, 795, 796, 3, 201, 98, 0, 796, 797, 3, 203, 99, 0, 797, 798, 3, 237, 116, 0, 798, 1232, 1, 0, 0, 0, 799, 800, 3, 231, 113, 0, 800, 801, 3, 229, 112, 0, 801, 802, 3, 245, 120, 0, 802, 1232, 1, 0, 0, 0, 803, 804, 3, 223, 109, 0, 804, 805, 3, 229, 112, 0, 805, 806, 3, 213, 104, 0, 806, 807, 3, 129, 62, 0, 807, 1232, 1, 0, 0, 0, 808, 809, 3, 231, 113, 0, 809, 810, 3, 217, 106, 0, 810, 1232, 1, 0, 0, 0, 811, 812, 3, 239, 117, 0, 812, 813, 3, 201, 98, 0, 813, 814, 3, 241, 118, 0, 814, 1232, 1, 0, 0, 0, 815, 1232, 3, 209, 102, 0, 816, 817, 3, 237, 116, 0, 817, 818, 3, 241, 118, 0, 818, 819, 3, 203, 99, 0, 819, 820, 3, 237, 116, 0, 820, 821, 3, 239, 117, 0, 821, 822, 3, 235, 115, 0, 822, 823, 3, 217, 106, 0, 823, 824, 3, 227, 111, 0, 824, 825, 3, 213, 104, 0, 825, 1232, 1, 0, 0, 0, 826, 827, 3, 239, 117, 0, 827, 828, 3, 235, 115, 0, 828, 829, 3, 217, 106, 0, 829, 830, 3, 225, 110, 0, 830, 1232, 1, 0, 0, 0, 831, 832, 3, 205, 100, 0, 832, 833, 3, 229, 112, 0, 833, 834, 3, 227, 111, 0, 834, 835, 3, 205, 100, 0, 835, 836, 3, 201, 98, 0, 836, 837, 3, 239, 117, 0, 837, 1232, 1, 0, 0, 0, 838, 839, 3, 205, 100, 0, 839, 840, 3, 229, 112, 0, 840, 841, 3, 201, 98, 0, 841, 842, 3, 223, 109, 0, 842, 843, 3, 209, 102, 0, 843, 844, 3, 237, 116, 0, 844, 845, 3, 205, 100, 0, 845, 846, 3, 209, 102, 0, 846, 1232, 1, 0, 0, 0, 847, 848, 3, 213, 104, 0, 848, 849, 3, 235, 115, 0, 849, 850, 3, 209, 102, 0, 850, 851, 3, 201, 98, 0, 851, 852, 3, 239, 117, 0, 852, 853, 3, 209, 102, 0, 853, 854, 3, 237, 116, 0, 854, 855, 3, 239, 117, 0, 855, 1232, 1, 0, 0, 0, 856, 857, 3, 223, 109, 0, 857, 858, 3, 209, 102, 0, 858, 859, 3, 211, 103, 0, 859, 860, 3, 239, 117, 0, 860, 1232, 1, 0, 0, 0, 861, 862, 3, 227, 111, 0, 862, 863, 3, 229, 112, 0, 863, 864, 3, 245, 120, 0, 864, 1232, 1, 0, 0, 0, 865, 866, 3, 235, 115, 0, 866, 867, 3, 217, 106, 0, 867, 868, 3, 213, 104, 0, 868, 869, 3, 215, 105, 0, 869, 870, 3, 239, 117, 0, 870, 1232, 1, 0, 0, 0, 871, 872, 3, 237, 116, 0, 872, 873, 3, 239, 117, 0, 873, 874, 3, 201, 98, 0, 874, 875, 3, 235, 115, 0, 875, 876, 3, 239, 117, 0, 876, 877, 3, 237, 116, 0, 877, 878, 3, 109, 52, 0, 878, 879, 3, 245, 120, 0, 879, 880, 3, 217, 106, 0, 880, 881, 3, 239, 117, 0, 881, 882, 3, 215, 105, 0, 882, 1232, 1, 0, 0, 0, 883, 884, 3, 207, 101, 0, 884, 885, 3, 201, 98, 0, 885, 886, 3, 239, 117, 0, 886, 887, 3, 209, 102, 0, 887, 888, 3, 109, 52, 0, 888, 889, 3, 211, 103, 0, 889, 890, 3, 229, 112, 0, 890, 891, 3, 235, 115, 0, 891, 892, 3, 225, 110, 0, 892, 893, 3, 201, 98, 0, 893, 894, 3, 239, 117, 0, 894, 1232, 1, 0, 0, 0, 895, 896, 3, 207, 101, 0, 896, 897, 3, 201, 98, 0, 897, 898, 3, 239, 117, 0, 898, 899, 3, 209, 102, 0, 899, 900, 3, 109, 52, 0, 900, 901, 3, 239, 117, 0, 901, 902, 3, 235, 115, 0, 902, 903, 3, 241, 118, 0, 903, 904, 3, 227, 111, 0, 904, 905, 3, 205, 100, 0, 905, 1232, 1, 0, 0, 0, 906, 907, 3, 207, 101, 0, 907, 908, 3, 201, 98, 0, 908, 909, 3, 239, 117, 0, 909, 910, 3, 209, 102, 0, 910, 911, 3, 109, 52, 0, 911, 912, 3, 231, 113, 0, 912, 913, 3, 201, 98, 0, 913, 914, 3, 235, 115, 0, 914, 915, 3, 237, 116, 0, 915, 916, 3, 209, 102, 0, 916, 1232, 1, 0, 0, 0, 917, 918, 3, 201, 98, 0, 918, 919, 3, 241, 118, 0, 919, 920, 3, 239, 117, 0, 920, 921, 3, 229, 112, 0, 921, 922, 3, 109, 52, 0, 922, 923, 3, 203, 99, 0, 923, 924, 3, 241, 118, 0, 924, 925, 3, 205, 100, 0, 925, 926, 3, 221, 108, 0, 926, 927, 3, 209, 102, 0, 927, 928, 3, 239, 117, 0, 928, 1232, 1, 0, 0, 0, 929, 930, 3, 207, 101, 0, 930, 931, 3, 201, 98, 0, 931, 932, 3, 239, 117, 0, 932, 933, 3, 209, 102, 0, 933, 934, 3, 109, 52, 0, 934, 935, 3, 209, 102, 0, 935, 936, 3, 247, 121, 0, 936, 937, 3, 239, 117, 0, 937, 938, 3, 235, 115, 0, 938, 939, 3, 201, 98, 0, 939, 940, 3, 205, 100, 0, 940, 941, 3, 239, 117, 0, 941, 1232, 1, 0, 0, 0, 942, 943, 3, 217, 106, 0, 943, 944, 3, 237, 116, 0, 944, 945, 3, 109, 52, 0, 945, 946, 3, 211, 103, 0, 946, 947, 3, 217, 106, 0, 947, 948, 3, 227, 111, 0, 948, 949, 3, 217, 106, 0, 949, 950, 3, 239, 117, 0, 950, 951, 3, 209, 102, 0, 951, 1232, 1, 0, 0, 0, 952, 953, 3, 217, 106, 0, 953, 954, 3, 237, 116, 0, 954, 955, 3, 109, 52, 0, 955, 956, 3, 217, 106, 0, 956, 957, 3, 227, 111, 0, 957, 958, 3, 211, 103, 0, 958, 959, 3, 217, 106, 0, 959, 960, 3, 227, 111, 0, 960, 961, 3, 217, 106, 0, 961, 962, 3, 239, 117, 0, 962, 963, 3, 209, 102, 0, 963, 1232, 1, 0, 0, 0, 964, 965, 3, 205, 100, 0, 965, 966, 3, 201, 98, 0, 966, 967, 3, 237, 116, 0, 967, 968, 3, 209, 102, 0, 968, 1232, 1, 0, 0, 0, 969, 970, 3, 223, 109, 0, 970, 971, 3, 209, 102, 0, 971, 972, 3, 227, 111, 0, 972, 973, 3, 213, 104, 0, 973, 974, 3, 239, 117, 0, 974, 975, 3, 215, 105, 0, 975, 1232, 1, 0, 0, 0, 976, 977, 3, 225, 110, 0, 977, 978, 3, 243, 119, 0, 978, 979, 3, 109, 52, 0, 979, 980, 3, 225, 110, 0, 980, 981, 3, 201, 98, 0, 981, 982, 3, 247, 121, 0, 982, 1232, 1, 0, 0, 0, 983, 984, 3, 225, 110, 0, 984, 985, 3, 243, 119, 0, 985, 986, 3, 109, 52, 0, 986, 987, 3, 225, 110, 0, 987, 988, 3, 217, 106, 0, 988, 989, 3, 227, 111, 0, 989, 1232, 1, 0, 0, 0, 990, 991, 3, 225, 110, 0, 991, 992, 3, 243, 119, 0, 992, 993, 3, 109, 52, 0, 993, 994, 3, 201, 98, 0, 994, 995, 3, 243, 119, 0, 995, 996, 3, 213, 104, 0, 996, 1232, 1, 0, 0, 0, 997, 998, 3, 225, 110, 0, 998, 999, 3, 243, 119, 0, 999, 1000, 3, 109, 52, 0, 1000, 1001, 3, 237, 116, 0, 1001, 1002, 3, 241, 118, 0, 1002, 1003, 3, 225, 110, 0, 1003, 1232, 1, 0, 0, 0, 1004, 1005, 3, 225, 110, 0, 1005, 1006, 3, 243, 119, 0, 1006, 1007, 3, 109, 52, 0, 1007, 1008, 3, 205, 100, 0, 1008, 1009, 3, 229, 112, 0, 1009, 1010, 3, 241, 118, 0, 1010, 1011, 3, 227, 111, 0, 1011, 1012, 3, 239, 117, 0, 1012, 1232, 1, 0, 0, 0, 1013, 1014, 3, 225, 110, 0, 1014, 1015, 3, 243, 119, 0, 1015, 1016, 3, 109, 52, 0, 1016, 1017, 3, 205, 100, 0, 1017, 1018, 3, 229, 112, 0, 1018, 1019, 3, 227, 111, 0, 1019, 1020, 3, 205, 100, 0, 1020, 1021, 3, 201, 98, 0, 1021, 1022, 3, 239, 117, 0, 1022, 1232, 1, 0, 0, 0, 1023, 1024, 3, 225, 110, 0, 1024, 1025, 3, 243, 119, 0, 1025, 1026, 3, 109, 52, 0, 1026, 1027, 3, 219, 107, 0, 1027, 1028, 3, 229, 112, 0, 1028, 1029, 3, 217, 106, 0, 1029, 1030, 3, 227, 111, 0, 1030, 1232, 1, 0, 0, 0, 1031, 1032, 3, 225, 110, 0, 1032, 1033, 3, 243, 119, 0, 1033, 1034, 3, 109, 52, 0, 1034, 1035, 3, 225, 110, 0, 1035, 1036, 3, 209, 102, 0, 1036, 1037, 3, 207, 101, 0, 1037, 1038, 3, 217, 106, 0, 1038, 1039, 3, 201, 98, 0, 1039, 1040, 3, 227, 111, 0, 1040, 1232, 1, 0, 0, 0, 1041, 1042, 3, 225, 110, 0, 1042, 1043, 3, 243, 119, 0, 1043, 1044, 3, 109, 52, 0, 1044, 1045, 3, 207, 101, 0, 1045, 1046, 3, 209, 102, 0, 1046, 1047, 3, 207, 101, 0, 1047, 1048, 3, 241, 118, 0, 1048, 1049, 3, 231, 113, 0, 1049, 1050, 3, 209, 102, 0, 1050, 1232, 1, 0, 0, 0, 1051, 1052, 3, 225, 110, 0, 1052, 1053, 3, 209, 102, 0, 1053, 1054, 3, 239, 117, 0, 1054, 1055, 3, 201, 98, 0, 1055, 1056, 3, 207, 101, 0, 1056, 1057, 3, 201, 98, 0, 1057, 1058, 3, 239, 117, 0, 1058, 1059, 3, 201, 98, 0, 1059, 1232, 1, 0, 0, 0, 1060, 1061, 3, 237, 116, 0, 1061, 1062, 3, 231, 113, 0, 1062, 1063, 3, 223, 109, 0, 1063, 1064, 3, 217, 106, 0, 1064, 1065, 3, 239, 117, 0, 1065, 1232, 1, 0, 0, 0, 1066, 1067, 3, 239, 117, 0, 1067, 1068, 3, 229, 112, 0, 1068, 1069, 3, 109, 52, 0, 1069, 1070, 3, 237, 116, 0, 1070, 1071, 3, 239, 117, 0, 1071, 1072, 3, 235, 115, 0, 1072, 1073, 3, 217, 106, 0, 1073, 1074, 3, 227, 111, 0, 1074, 1075, 3, 213, 104, 0, 1075, 1232, 1, 0, 0, 0, 1076, 1077, 3, 239, 117, 0, 1077, 1078, 3, 229, 112, 0, 1078, 1079, 3, 109, 52, 0, 1079, 1080, 3, 237, 116, 0, 1080, 1081, 3, 239, 117, 0, 1081, 1082, 3, 235, 115, 0, 1082, 1232, 1, 0, 0, 0, 1083, 1084, 3, 239, 117, 0, 1084, 1085, 3, 229, 112, 0, 1085, 1086, 3, 109, 52, 0, 1086, 1087, 3, 203, 99, 0, 1087, 1088, 3, 229, 112, 0, 1088, 1089, 3, 229, 112, 0, 1089, 1090, 3, 223, 109, 0, 1090, 1232, 1, 0, 0, 0, 1091, 1092, 3, 239, 117, 0, 1092, 1093, 3, 229, 112, 0, 1093, 1094, 3, 109, 52, 0, 1094, 1095, 3, 203, 99, 0, 1095, 1096, 3, 229, 112, 0, 1096, 1097, 3, 229, 112, 0, 1097, 1098, 3, 223, 109, 0, 1098, 1099, 3, 209, 102, 0, 1099, 1100, 3, 201, 98, 0, 1100, 1101, 3, 227, 111, 0, 1101, 1232, 1, 0, 0, 0, 1102, 1103, 3, 239, 117, 0, 1103, 1104, 3, 229, 112, 0, 1104, 1105, 3, 109, 52, 0, 1105, 1106, 3, 207, 101, 0, 1106, 1107, 3, 201, 98, 0, 1107, 1108, 3, 239, 117, 0, 1108, 1109, 3, 209, 102, 0, 1109, 1110, 3, 239, 117, 0, 1110, 1111, 3, 217, 106, 0, 1111, 1112, 3, 225, 110, 0, 1112, 1113, 3, 209, 102, 0, 1113, 1232, 1, 0, 0, 0, 1114, 1115, 3, 239, 117, 0, 1115, 1116, 3, 229, 112, 0, 1116, 1117, 3, 109, 52, 0, 1117, 1118, 3, 207, 101, 0, 1118, 1119, 3, 239, 117, 0, 1119, 1232, 1, 0, 0, 0, 1120, 1121, 3, 239, 117, 0, 1121, 1122, 3, 229, 112, 0, 1122, 1123, 3, 109, 52, 0, 1123, 1124, 3, 207, 101, 0, 1124, 1125, 3, 203, 99, 0, 1125, 1126, 3, 223, 109, 0, 1126, 1232, 1, 0, 0, 0, 1127, 1128, 3, 239, 117, 0, 1128, 1129, 3, 229, 112, 0, 1129, 1130, 3, 109, 52, 0, 1130, 1131, 3, 207, 101, 0, 1131, 1132, 3, 229, 112, 0, 1132, 1133, 3, 241, 118, 0, 1133, 1134, 3, 203, 99, 0, 1134, 1135, 3, 223, 109, 0, 1135, 1136, 3, 209, 102, 0, 1136, 1232, 1, 0, 0, 0, 1137, 1138, 3, 239, 117, 0, 1138, 1139, 3, 229, 112, 0, 1139, 1140, 3, 109, 52, 0, 1140, 1141, 3, 207, 101, 0, 1141, 1142, 3, 209, 102, 0, 1142, 1143, 3, 213, 104, 0, 1143, 1144, 3, 235, 115, 0, 1144, 1145, 3, 209, 102, 0, 1145, 1146, 3, 209, 102, 0, 1146, 1147, 3, 237, 116, 0, 1147, 1232, 1, 0, 0, 0, 1148, 1149, 3, 239, 117, 0, 1149, 1150, 3, 229, 112, 0, 1150, 1151, 3, 109, 52, 0, 1151, 1152, 3, 217, 106, 0, 1152, 1153, 3, 227, 111, 0, 1153, 1154, 3, 239, 117, 0, 1154, 1232, 1, 0, 0, 0, 1155, 1156, 3, 239, 117, 0, 1156, 1157, 3, 229, 112, 0, 1157, 1158, 3, 109, 52, 0, 1158, 1159, 3, 217, 106, 0, 1159, 1160, 3, 227, 111, 0, 1160, 1161, 3, 239, 117, 0, 1161, 1162, 3, 209, 102, 0, 1162, 1163, 3, 213, 104, 0, 1163, 1164, 3, 209, 102, 0, 1164, 1165, 3, 235, 115, 0, 1165, 1232, 1, 0, 0, 0, 1166, 1167, 3, 239, 117, 0, 1167, 1168, 3, 229, 112, 0, 1168, 1169, 3, 109, 52, 0, 1169, 1170, 3, 217, 106, 0, 1170, 1171, 3, 231, 113, 0, 1171, 1232, 1, 0, 0, 0, 1172, 1173, 3, 239, 117, 0, 1173, 1174, 3, 229, 112, 0, 1174, 1175, 3, 109, 52, 0, 1175, 1176, 3, 223, 109, 0, 1176, 1177, 3, 229, 112, 0, 1177, 1178, 3, 227, 111, 0, 1178, 1179, 3, 213, 104, 0, 1179, 1232, 1, 0, 0, 0, 1180, 1181, 3, 239, 117, 0, 1181, 1182, 3, 229, 112, 0, 1182, 1183, 3, 109, 52, 0, 1183, 1184, 3, 235, 115, 0, 1184, 1185, 3, 201, 98, 0, 1185, 1186, 3, 207, 101, 0, 1186, 1187, 3, 217, 106, 0, 1187, 1188, 3, 201, 98, 0, 1188, 1189, 3, 227, 111, 0, 1189, 1190, 3, 237, 116, 0, 1190, 1232, 1, 0, 0, 0, 1191, 1192, 3, 239, 117, 0, 1192, 1193, 3, 229, 112, 0, 1193, 1194, 3, 109, 52, 0, 1194, 1195, 3, 243, 119, 0, 1195, 1196, 3, 209, 102, 0, 1196, 1197, 3, 235, 115, 0, 1197, 1198, 3, 237, 116, 0, 1198, 1199, 3, 217, 106, 0, 1199, 1200, 3, 229, 112, 0, 1200, 1201, 3, 227, 111, 0, 1201, 1232, 1, 0, 0, 0, 1202, 1203, 3, 239, 117, 0, 1203, 1204, 3, 229, 112, 0, 1204, 1205, 3, 109, 52, 0, 1205, 1206, 3, 241, 118, 0, 1206, 1207, 3, 227, 111, 0, 1207, 1208, 3, 237, 116, 0, 1208, 1209, 3, 217, 106, 0, 1209, 1210, 3, 213, 104, 0, 1210, 1211, 3, 227, 111, 0, 1211, 1212, 3, 209, 102, 0, 1212, 1213, 3, 207, 101, 0, 1213, 1214, 3, 109, 52, 0, 1214, 1215, 3, 223, 109, 0, 1215, 1216, 3, 229, 112, 0, 1216, 1217, 3, 227, 111, 0, 1217, 1218, 3, 213, 104, 0, 1218, 1232, 1, 0, 0, 0, 1219, 1220, 3, 239, 117, 0, 1220, 1221, 3, 229, 112, 0, 1221, 1222, 3, 109, 52, 0, 1222, 1223, 3, 213, 104, 0, 1223, 1224, 3, 209, 102, 0, 1224, 1225, 3, 229, 112, 0, 1225, 1226, 3, 231, 113, 0, 1226, 1227, 3, 229, 112, 0, 1227, 1228, 3, 217, 106, 0, 1228, 1229, 3, 227, 111, 0, 1229, 1230, 3, 239, 117, 0, 1230, 1232, 1, 0, 0, 0, 1231, 789, 1, 0, 0, 0, 1231, 795, 1, 0, 0, 0, 1231, 799, 1, 0, 0, 0, 1231, 803, 1, 0, 0, 0, 1231, 808, 1, 0, 0, 0, 1231, 811, 1, 0, 0, 0, 1231, 815, 1, 0, 0, 0, 1231, 816, 1, 0, 0, 0, 1231, 826, 1, 0, 0, 0, 1231, 831, 1, 0, 0, 0, 1231, 838, 1, 0, 0, 0, 1231, 847, 1, 0, 0, 0, 1231, 856, 1, 0, 0, 0, 1231, 861, 1, 0, 0, 0, 1231, 865, 1, 0, 0, 0, 1231, 871, 1, 0, 0, 0, 1231, 883, 1, 0, 0, 0, 1231, 895, 1, 0, 0, 0, 1231, 906, 1, 0, 0, 0, 1231, 917, 1, 0, 0, 0, 1231, 929, 1, 0, 0, 0, 1231, 942, 1, 0, 0, 0, 1231, 952, 1, 0, 0, 0, 1231, 964, 1, 0, 0, 0, 1231, 969, 1, 0, 0, 0, 1231, 976, 1, 0, 0, 0, 1231, 983, 1, 0, 0, 0, 1231, 990, 1, 0, 0, 0, 1231, 997, 1, 0, 0, 0, 1231, 1004, 1, 0, 0, 0, 1231, 1013, 1, 0, 0, 0, 1231, 1023, 1, 0, 0, 0, 1231, 1031, 1, 0, 0, 0, 1231, 1041, 1, 0, 0, 0, 1231, 1051, 1, 0, 0, 0, 1231, 1060, 1, 0, 0, 0, 1231, 1066, 1, 0, 0, 0, 1231, 1076, 1, 0, 0, 0, 1231, 1083, 1, 0, 0, 0, 1231, 1091, 1, 0, 0, 0, 1231, 1102, 1, 0, 0, 0, 1231, 1114, 1, 0, 0, 0, 1231, 1120, 1, 0, 0, 0, 1231, 1127, 1, 0, 0, 0, 1231, 1137, 1, 0, 0, 0, 1231, 1148, 1, 0, 0, 0, 1231, 1155, 1, 0, 0, 0, 1231, 1166, 1, 0, 0, 0, 1231, 1172, 1, 0, 0, 0, 1231, 1180, 1, 0, 0, 0, 1231, 1191, 1, 0, 0, 0, 1231, 1202, 1, 0, 0, 0, 1231, 1219, 1, 0, 0, 0, 1232, 138, 1, 0, 0, 0, 1233, 1234, 3, 201, 98, 0, 1234, 1235, 3, 243, 119, 0, 1235, 1236, 3, 213, 104, 0, 1236, 1385, 1, 0, 0, 0, 1237, 1238, 3, 225, 110, 0, 1238, 1239, 3, 217, 106, 0, 1239, 1240, 3, 227, 111, 0, 1240, 1385, 1, 0, 0, 0, 1241, 1242, 3, 225, 110, 0, 1242, 1243, 3, 201, 98, 0, 1243, 1244, 3, 247, 121, 0, 1244, 1385, 1, 0, 0, 0, 1245, 1246, 3, 237, 116, 0, 1246, 1247, 3, 241, 118, 0, 1247, 1248, 3, 225, 110, 0, 1248, 1385, 1, 0, 0, 0, 1249, 1250, 3, 205, 100, 0, 1250, 1251, 3, 229, 112, 0, 1251, 1252, 3, 241, 118, 0, 1252, 1253, 3, 227, 111, 0, 1253, 1254, 3, 239, 117, 0, 1254, 1385, 1, 0, 0, 0, 1255, 1256, 3, 205, 100, 0, 1256, 1257, 3, 229, 112, 0, 1257, 1258, 3, 241, 118, 0, 1258, 1259, 3, 227, 111, 0, 1259, 1260, 3, 239, 117, 0, 1260, 1261, 3, 109, 52, 0, 1261, 1262, 3, 207, 101, 0, 1262, 1263, 3, 217, 106, 0, 1263, 1264, 3, 237, 116, 0, 1264, 1265, 3, 239, 117, 0, 1265, 1266, 3, 217, 106, 0, 1266, 1267, 3, 227, 111, 0, 1267, 1268, 3, 205, 100, 0, 1268, 1269, 3, 239, 117, 0, 1269, 1385, 1, 0, 0, 0, 1270, 1271, 3, 231, 113, 0, 1271, 1272, 3, 209, 102, 0, 1272, 1273, 3, 235, 115, 0, 1273, 1274, 3, 205, 100, 0, 1274, 1275, 3, 209, 102, 0, 1275, 1276, 3, 227, 111, 0, 1276, 1277, 3, 239, 117, 0, 1277, 1278, 3, 217, 106, 0, 1278, 1279, 3, 223, 109, 0, 1279, 1280, 3, 209, 102, 0, 1280, 1385, 1, 0, 0, 0, 1281, 1282, 3, 225, 110, 0, 1282, 1283, 3, 209, 102, 0, 1283, 1284, 3, 207, 101, 0, 1284, 1285, 3, 217, 106, 0, 1285, 1286, 3, 201, 98, 0, 1286, 1287, 3, 227, 111, 0, 1287, 1385, 1, 0, 0, 0, 1288, 1289, 3, 225, 110, 0, 1289, 1290, 3, 209, 102, 0, 1290, 1291, 3, 207, 101, 0, 1291, 1292, 3, 217, 106, 0, 1292, 1293, 3, 201, 98, 0, 1293, 1294, 3, 227, 111, 0, 1294, 1295, 3, 109, 52, 0, 1295, 1296, 3, 201, 98, 0, 1296, 1297, 3, 203, 99, 0, 1297, 1298, 3, 237, 116, 0, 1298, 1299, 3, 229, 112, 0, 1299, 1300, 3, 223, 109, 0, 1300, 1301, 3, 241, 118, 0, 1301, 1302, 3, 239, 117, 0, 1302, 1303, 3, 209, 102, 0, 1303, 1304, 3, 109, 52, 0, 1304, 1305, 3, 207, 101, 0, 1305, 1306, 3, 209, 102, 0, 1306, 1307, 3, 243, 119, 0, 1307, 1308, 3, 217, 106, 0, 1308, 1309, 3, 201, 98, 0, 1309, 1310, 3, 239, 117, 0, 1310, 1311, 3, 217, 106, 0, 1311, 1312, 3, 229, 112, 0, 1312, 1313, 3, 227, 111, 0, 1313, 1385, 1, 0, 0, 0, 1314, 1315, 3, 201, 98, 0, 1315, 1316, 3, 205, 100, 0, 1316, 1317, 3, 229, 112, 0, 1317, 1318, 3, 237, 116, 0, 1318, 1385, 1, 0, 0, 0, 1319, 1320, 3, 201, 98, 0, 1320, 1321, 3, 237, 116, 0, 1321, 1322, 3, 217, 106, 0, 1322, 1323, 3, 227, 111, 0, 1323, 1385, 1, 0, 0, 0, 1324, 1325, 3, 201, 98, 0, 1325, 1326, 3, 239, 117, 0, 1326, 1327, 3, 201, 98, 0, 1327, 1328, 3, 227, 111, 0, 1328, 1385, 1, 0, 0, 0, 1329, 1330, 3, 201, 98, 0, 1330, 1331, 3, 239, 117, 0, 1331, 1332, 3, 201, 98, 0, 1332, 1333, 3, 227, 111, 0, 1333, 1334, 5, 50, 0, 0, 1334, 1385, 1, 0, 0, 0, 1335, 1336, 3, 205, 100, 0, 1336, 1337, 3, 209, 102, 0, 1337, 1338, 3, 217, 106, 0, 1338, 1339, 3, 223, 109, 0, 1339, 1385, 1, 0, 0, 0, 1340, 1341, 3, 205, 100, 0, 1341, 1342, 3, 229, 112, 0, 1342, 1343, 3, 237, 116, 0, 1343, 1385, 1, 0, 0, 0, 1344, 1345, 3, 205, 100, 0, 1345, 1346, 3, 229, 112, 0, 1346, 1347, 3, 237, 116, 0, 1347, 1348, 3, 215, 105, 0, 1348, 1385, 1, 0, 0, 0, 1349, 1350, 3, 211, 103, 0, 1350, 1351, 3, 223, 109, 0, 1351, 1352, 3, 229, 112, 0, 1352, 1353, 3, 229, 112, 0, 1353, 1354, 3, 235, 115, 0, 1354, 1385, 1, 0, 0, 0, 1355, 1356, 3, 223, 109, 0, 1356, 1357, 3, 239, 117, 0, 1357, 1358, 3, 235, 115, 0, 1358, 1359, 3, 217, 106, 0, 1359, 1360, 3, 225, 110, 0, 1360, 1385, 1, 0, 0, 0, 1361, 1362, 3, 237, 116, 0, 1362, 1363, 3, 217, 106, 0, 1363, 1364, 3, 227, 111, 0, 1364, 1385, 1, 0, 0, 0, 1365, 1366, 3, 237, 116, 0, 1366, 1367, 3, 217, 106, 0, 1367, 1368, 3, 227, 111, 0, 1368, 1369, 3, 215, 105, 0, 1369, 1385, 1, 0, 0, 0, 1370, 1371, 3, 237, 116, 0, 1371, 1372, 3, 233, 114, 0, 1372, 1373, 3, 235, 115, 0, 1373, 1374, 3, 239, 117, 0, 1374, 1385, 1, 0, 0, 0, 1375, 1376, 3, 239, 117, 0, 1376, 1377, 3, 201, 98, 0, 1377, 1378, 3, 227, 111, 0, 1378, 1385, 1, 0, 0, 0, 1379, 1380, 3, 239, 117, 0, 1380, 1381, 3, 201, 98, 0, 1381, 1382, 3, 227, 111, 0, 1382, 1383, 3, 215, 105, 0, 1383, 1385, 1, 0, 0, 0, 1384, 1233, 1, 0, 0, 0, 1384, 1237, 1, 0, 0, 0, 1384, 1241, 1, 0, 0, 0, 1384, 1245, 1, 0, 0, 0, 1384, 1249, 1, 0, 0, 0, 1384, 1255, 1, 0, 0, 0, 1384, 1270, 1, 0, 0, 0, 1384, 1281, 1, 0, 0, 0, 1384, 1288, 1, 0, 0, 0, 1384, 1314, 1, 0, 0, 0, 1384, 1319, 1, 0, 0, 0, 1384, 1324, 1, 0, 0, 0, 1384, 1329, 1, 0, 0, 0, 1384, 1335, 1, 0, 0, 0, 1384, 1340, 1, 0, 0, 0, 1384, 1344, 1, 0, 0, 0, 1384, 1349, 1, 0, 0, 0, 1384, 1355, 1, 0, 0, 0, 1384, 1361, 1, 0, 0, 0, 1384, 1365, 1, 0, 0, 0, 1384, 1370, 1, 0, 0, 0, 1384, 1375, 1, 0, 0, 0, 1384, 1379, 1, 0, 0, 0, 1385, 140, 1, 0, 0, 0, 1386, 1387, 3, 205, 100, 0, 1387, 1388, 3, 217, 106, 0, 1388, 1389, 3, 207, 101, 0, 1389, 1390, 3, 235, 115, 0, 1390, 1391, 3, 109, 52, 0, 1391, 1392, 3, 225, 110, 0, 1392, 1393, 3, 201, 98, 0, 1393, 1394, 3, 239, 117, 0, 1394, 1395, 3, 205, 100, 0, 1395, 1396, 3, 215, 105, 0, 1396, 142, 1, 0, 0, 0, 1397, 1404, 3, 59, 27, 0, 1398, 1403, 3, 59, 27, 0, 1399, 1403, 3, 57, 26, 0, 1400, 1403, 5, 95, 0, 0, 1401, 1403, 3, 123, 59, 0, 1402, 1398, 1, 0, 0, 0, 1402, 1399, 1, 0, 0, 0, 1402, 1400, 1, 0, 0, 0, 1402, 1401, 1, 0, 0, 0, 1403, 1406, 1, 0, 0, 0, 1404, 1402, 1, 0, 0, 0, 1404, 1405, 1, 0, 0, 0, 1405, 1417, 1, 0, 0, 0, 1406, 1404, 1, 0, 0, 0, 1407, 1412, 7, 8, 0, 0, 1408, 1413, 3, 59, 27, 0, 1409, 1413, 3, 57, 26, 0, 1410, 1413, 5, 95, 0, 0, 1411, 1413, 3, 123, 59, 0, 1412, 1408, 1, 0, 0, 0, 1412, 1409, 1, 0, 0, 0, 1412, 1410, 1, 0, 0, 0, 1412, 1411, 1, 0, 0, 0, 1413, 1414, 1, 0, 0, 0, 1414, 1412, 1, 0, 0, 0, 1414, 1415, 1, 0, 0, 0, 1415, 1417, 1, 0, 0, 0, 1416, 1397, 1, 0, 0, 0, 1416, 1407, 1, 0, 0, 0, 1417, 144, 1, 0, 0, 0, 1418, 1424, 5, 96, 0, 0, 1419, 1423, 8, 9, 0, 0, 1420, 1421, 5, 96, 0, 0, 1421, 1423, 5, 96, 0, 0, 1422, 1419, 1, 0, 0, 0, 1422, 1420, 1, 0, 0, 0, 1423, 1426, 1, 0, 0, 0, 1424, 1422, 1, 0, 0, 0, 1424, 1425, 1, 0, 0, 0, 1425, 1427, 1, 0, 0, 0, 1426, 1424, 1, 0, 0, 0, 1427, 1428, 5, 96, 0, 0, 1428, 146, 1, 0, 0, 0, 1429, 1430, 3, 39, 17, 0, 1430, 1431, 1, 0, 0, 0, 1431, 1432, 6, 71, 4, 0, 1432, 148, 1, 0, 0, 0, 1433, 1434, 3, 41, 18, 0, 1434, 1435, 1, 0, 0, 0, 1435, 1436, 6, 72, 4, 0, 1436, 150, 1, 0, 0, 0, 1437, 1438, 3, 43, 19, 0, 1438, 1439, 1, 0, 0, 0, 1439, 1440, 6, 73, 4, 0, 1440, 152, 1, 0, 0, 0, 1441, 1442, 5, 124, 0, 0, 1442, 1443, 1, 0, 0, 0, 1443, 1444, 6, 74, 7, 0, 1444, 1445, 6, 74, 8, 0, 1445, 154, 1, 0, 0, 0, 1446, 1447, 5, 91, 0, 0, 1447, 1448, 1, 0, 0, 0, 1448, 1449, 6, 75, 5, 0, 1449, 1450, 6, 75, 2, 0, 1450, 1451, 6, 75, 2, 0, 1451, 156, 1, 0, 0, 0, 1452, 1453, 5, 93, 0, 0, 1453, 1454, 1, 0, 0, 0, 1454, 1455, 6, 76, 8, 0, 1455, 1456, 6, 76, 8, 0, 1456, 1457, 6, 76, 9, 0, 1457, 158, 1, 0, 0, 0, 1458, 1459, 5, 44, 0, 0, 1459, 1460, 1, 0, 0, 0, 1460, 1461, 6, 77, 10, 0, 1461, 160, 1, 0, 0, 0, 1462, 1463, 5, 61, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1465, 6, 78, 11, 0, 1465, 162, 1, 0, 0, 0, 1466, 1467, 3, 225, 110, 0, 1467, 1468, 3, 209, 102, 0, 1468, 1469, 3, 239, 117, 0, 1469, 1470, 3, 201, 98, 0, 1470, 1471, 3, 207, 101, 0, 1471, 1472, 3, 201, 98, 0, 1472, 1473, 3, 239, 117, 0, 1473, 1474, 3, 201, 98, 0, 1474, 164, 1, 0, 0, 0, 1475, 1477, 3, 167, 81, 0, 1476, 1475, 1, 0, 0, 0, 1477, 1478, 1, 0, 0, 0, 1478, 1476, 1, 0, 0, 0, 1478, 1479, 1, 0, 0, 0, 1479, 166, 1, 0, 0, 0, 1480, 1482, 8, 10, 0, 0, 1481, 1480, 1, 0, 0, 0, 1482, 1483, 1, 0, 0, 0, 1483, 1481, 1, 0, 0, 0, 1483, 1484, 1, 0, 0, 0, 1484, 1488, 1, 0, 0, 0, 1485, 1486, 5, 47, 0, 0, 1486, 1488, 8, 11, 0, 0, 1487, 1481, 1, 0, 0, 0, 1487, 1485, 1, 0, 0, 0, 1488, 168, 1, 0, 0, 0, 1489, 1490, 3, 145, 70, 0, 1490, 170, 1, 0, 0, 0, 1491, 1492, 3, 39, 17, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1494, 6, 83, 4, 0, 1494, 172, 1, 0, 0, 0, 1495, 1496, 3, 41, 18, 0, 1496, 1497, 1, 0, 0, 0, 1497, 1498, 6, 84, 4, 0, 1498, 174, 1, 0, 0, 0, 1499, 1500, 3, 43, 19, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1502, 6, 85, 4, 0, 1502, 176, 1, 0, 0, 0, 1503, 1504, 3, 229, 112, 0, 1504, 1505, 3, 227, 111, 0, 1505, 178, 1, 0, 0, 0, 1506, 1507, 3, 245, 120, 0, 1507, 1508, 3, 217, 106, 0, 1508, 1509, 3, 239, 117, 0, 1509, 1510, 3, 215, 105, 0, 1510, 180, 1, 0, 0, 0, 1511, 1512, 5, 124, 0, 0, 1512, 1513, 1, 0, 0, 0, 1513, 1514, 6, 88, 7, 0, 1514, 1515, 6, 88, 8, 0, 1515, 182, 1, 0, 0, 0, 1516, 1517, 5, 93, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 1519, 6, 89, 8, 0, 1519, 1520, 6, 89, 8, 0, 1520, 1521, 6, 89, 9, 0, 1521, 184, 1, 0, 0, 0, 1522, 1523, 5, 44, 0, 0, 1523, 1524, 1, 0, 0, 0, 1524, 1525, 6, 90, 10, 0, 1525, 186, 1, 0, 0, 0, 1526, 1527, 5, 61, 0, 0, 1527, 1528, 1, 0, 0, 0, 1528, 1529, 6, 91, 11, 0, 1529, 188, 1, 0, 0, 0, 1530, 1532, 3, 191, 93, 0, 1531, 1530, 1, 0, 0, 0, 1532, 1533, 1, 0, 0, 0, 1533, 1531, 1, 0, 0, 0, 1533, 1534, 1, 0, 0, 0, 1534, 190, 1, 0, 0, 0, 1535, 1537, 8, 10, 0, 0, 1536, 1535, 1, 0, 0, 0, 1537, 1538, 1, 0, 0, 0, 1538, 1536, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1543, 1, 0, 0, 0, 1540, 1541, 5, 47, 0, 0, 1541, 1543, 8, 11, 0, 0, 1542, 1536, 1, 0, 0, 0, 1542, 1540, 1, 0, 0, 0, 1543, 192, 1, 0, 0, 0, 1544, 1545, 3, 145, 70, 0, 1545, 194, 1, 0, 0, 0, 1546, 1547, 3, 39, 17, 0, 1547, 1548, 1, 0, 0, 0, 1548, 1549, 6, 95, 4, 0, 1549, 196, 1, 0, 0, 0, 1550, 1551, 3, 41, 18, 0, 1551, 1552, 1, 0, 0, 0, 1552, 1553, 6, 96, 4, 0, 1553, 198, 1, 0, 0, 0, 1554, 1555, 3, 43, 19, 0, 1555, 1556, 1, 0, 0, 0, 1556, 1557, 6, 97, 4, 0, 1557, 200, 1, 0, 0, 0, 1558, 1559, 7, 12, 0, 0, 1559, 202, 1, 0, 0, 0, 1560, 1561, 7, 13, 0, 0, 1561, 204, 1, 0, 0, 0, 1562, 1563, 7, 14, 0, 0, 1563, 206, 1, 0, 0, 0, 1564, 1565, 7, 15, 0, 0, 1565, 208, 1, 0, 0, 0, 1566, 1567, 7, 6, 0, 0, 1567, 210, 1, 0, 0, 0, 1568, 1569, 7, 16, 0, 0, 1569, 212, 1, 0, 0, 0, 1570, 1571, 7, 17, 0, 0, 1571, 214, 1, 0, 0, 0, 1572, 1573, 7, 18, 0, 0, 1573, 216, 1, 0, 0, 0, 1574, 1575, 7, 19, 0, 0, 1575, 218, 1, 0, 0, 0, 1576, 1577, 7, 20, 0, 0, 1577, 220, 1, 0, 0, 0, 1578, 1579, 7, 21, 0, 0, 1579, 222, 1, 0, 0, 0, 1580, 1581, 7, 22, 0, 0, 1581, 224, 1, 0, 0, 0, 1582, 1583, 7, 23, 0, 0, 1583, 226, 1, 0, 0, 0, 1584, 1585, 7, 24, 0, 0, 1585, 228, 1, 0, 0, 0, 1586, 1587, 7, 25, 0, 0, 1587, 230, 1, 0, 0, 0, 1588, 1589, 7, 26, 0, 0, 1589, 232, 1, 0, 0, 0, 1590, 1591, 7, 27, 0, 0, 1591, 234, 1, 0, 0, 0, 1592, 1593, 7, 28, 0, 0, 1593, 236, 1, 0, 0, 0, 1594, 1595, 7, 29, 0, 0, 1595, 238, 1, 0, 0, 0, 1596, 1597, 7, 30, 0, 0, 1597, 240, 1, 0, 0, 0, 1598, 1599, 7, 31, 0, 0, 1599, 242, 1, 0, 0, 0, 1600, 1601, 7, 32, 0, 0, 1601, 244, 1, 0, 0, 0, 1602, 1603, 7, 33, 0, 0, 1603, 246, 1, 0, 0, 0, 1604, 1605, 7, 34, 0, 0, 1605, 248, 1, 0, 0, 0, 1606, 1607, 7, 35, 0, 0, 1607, 250, 1, 0, 0, 0, 1608, 1609, 7, 36, 0, 0, 1609, 252, 1, 0, 0, 0, 48, 0, 1, 2, 3, 4, 398, 402, 405, 414, 416, 427, 468, 473, 478, 480, 491, 499, 502, 504, 509, 514, 520, 527, 532, 538, 541, 549, 553, 652, 736, 748, 770, 787, 1231, 1384, 1402, 1404, 1412, 1414, 1416, 1422, 1424, 1478, 1483, 1487, 1533, 1538, 1542, 12, 5, 2, 0, 5, 1, 0, 5, 3, 0, 5, 4, 0, 0, 1, 0, 7, 35, 0, 5, 0, 0, 7, 24, 0, 4, 0, 0, 7, 36, 0, 7, 32, 0, 7, 31, 0] \ No newline at end of file diff --git a/packages/kbn-esql/src/antlr/.antlr/esql_lexer.java b/packages/kbn-esql/src/antlr/.antlr/esql_lexer.java new file mode 100644 index 0000000000000..ac37718a22bcc --- /dev/null +++ b/packages/kbn-esql/src/antlr/.antlr/esql_lexer.java @@ -0,0 +1,1150 @@ +// Generated from /Users/marcoliberati/Work/kibana/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class esql_lexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + DISSECT=1, GROK=2, EVAL=3, EXPLAIN=4, FROM=5, ROW=6, STATS=7, WHERE=8, + SORT=9, MV_EXPAND=10, LIMIT=11, PROJECT=12, DROP=13, RENAME=14, SHOW=15, + ENRICH=16, KEEP=17, LINE_COMMENT=18, MULTILINE_COMMENT=19, WS=20, EXPLAIN_WS=21, + EXPLAIN_LINE_COMMENT=22, EXPLAIN_MULTILINE_COMMENT=23, PIPE=24, STRING=25, + INTEGER_LITERAL=26, DECIMAL_LITERAL=27, BY=28, DATE_LITERAL=29, AND=30, + ASSIGN=31, COMMA=32, DOT=33, LP=34, OPENING_BRACKET=35, CLOSING_BRACKET=36, + NOT=37, LIKE=38, RLIKE=39, IN=40, IS=41, AS=42, NULL=43, OR=44, RP=45, + UNDERSCORE=46, INFO=47, FUNCTIONS=48, BOOLEAN_VALUE=49, COMPARISON_OPERATOR=50, + PLUS=51, MINUS=52, ASTERISK=53, SLASH=54, PERCENT=55, TEN=56, ORDERING=57, + NULLS_ORDERING=58, NULLS_ORDERING_DIRECTION=59, MATH_FUNCTION=60, UNARY_FUNCTION=61, + WHERE_FUNCTIONS=62, UNQUOTED_IDENTIFIER=63, QUOTED_IDENTIFIER=64, EXPR_LINE_COMMENT=65, + EXPR_MULTILINE_COMMENT=66, EXPR_WS=67, METADATA=68, SRC_UNQUOTED_IDENTIFIER=69, + SRC_QUOTED_IDENTIFIER=70, SRC_LINE_COMMENT=71, SRC_MULTILINE_COMMENT=72, + SRC_WS=73, ON=74, WITH=75, ENR_UNQUOTED_IDENTIFIER=76, ENR_QUOTED_IDENTIFIER=77, + ENR_LINE_COMMENT=78, ENR_MULTILINE_COMMENT=79, ENR_WS=80, EXPLAIN_PIPE=81; + public static final int + EXPLAIN_MODE=1, EXPRESSION=2, SOURCE_IDENTIFIERS=3, ENRICH_IDENTIFIERS=4; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE", "EXPLAIN_MODE", "EXPRESSION", "SOURCE_IDENTIFIERS", "ENRICH_IDENTIFIERS" + }; + + private static String[] makeRuleNames() { + return new String[] { + "DISSECT", "GROK", "EVAL", "EXPLAIN", "FROM", "ROW", "STATS", "WHERE", + "SORT", "MV_EXPAND", "LIMIT", "PROJECT", "DROP", "RENAME", "SHOW", "ENRICH", + "KEEP", "LINE_COMMENT", "MULTILINE_COMMENT", "WS", "EXPLAIN_OPENING_BRACKET", + "EXPLAIN_PIPE", "EXPLAIN_WS", "EXPLAIN_LINE_COMMENT", "EXPLAIN_MULTILINE_COMMENT", + "PIPE", "DIGIT", "LETTER", "ESCAPE_SEQUENCE", "UNESCAPED_CHARS", "EXPONENT", + "STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", "BY", "DATE_LITERAL", + "AND", "ASSIGN", "COMMA", "DOT", "LP", "OPENING_BRACKET", "CLOSING_BRACKET", + "NOT", "LIKE", "RLIKE", "IN", "IS", "AS", "NULL", "OR", "RP", "UNDERSCORE", + "INFO", "FUNCTIONS", "BOOLEAN_VALUE", "COMPARISON_OPERATOR", "PLUS", + "MINUS", "ASTERISK", "SLASH", "PERCENT", "TEN", "ORDERING", "NULLS_ORDERING", + "NULLS_ORDERING_DIRECTION", "MATH_FUNCTION", "UNARY_FUNCTION", "WHERE_FUNCTIONS", + "UNQUOTED_IDENTIFIER", "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", + "EXPR_WS", "SRC_PIPE", "SRC_OPENING_BRACKET", "SRC_CLOSING_BRACKET", + "SRC_COMMA", "SRC_ASSIGN", "METADATA", "SRC_UNQUOTED_IDENTIFIER", "SRC_UNQUOTED_IDENTIFIER_PART", + "SRC_QUOTED_IDENTIFIER", "SRC_LINE_COMMENT", "SRC_MULTILINE_COMMENT", + "SRC_WS", "ON", "WITH", "ENR_PIPE", "ENR_CLOSING_BRACKET", "ENR_COMMA", + "ENR_ASSIGN", "ENR_UNQUOTED_IDENTIFIER", "ENR_UNQUOTED_IDENTIFIER_PART", + "ENR_QUOTED_IDENTIFIER", "ENR_LINE_COMMENT", "ENR_MULTILINE_COMMENT", + "ENR_WS", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", + "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, "'by'", null, "'and'", null, null, "'.'", "'('", + null, "']'", null, null, null, null, null, null, null, "'or'", "')'", + "'_'", "'info'", "'functions'", null, null, "'+'", "'-'", "'*'", "'/'", + "'%'", "'10'", null, "'nulls'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "DISSECT", "GROK", "EVAL", "EXPLAIN", "FROM", "ROW", "STATS", "WHERE", + "SORT", "MV_EXPAND", "LIMIT", "PROJECT", "DROP", "RENAME", "SHOW", "ENRICH", + "KEEP", "LINE_COMMENT", "MULTILINE_COMMENT", "WS", "EXPLAIN_WS", "EXPLAIN_LINE_COMMENT", + "EXPLAIN_MULTILINE_COMMENT", "PIPE", "STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", + "BY", "DATE_LITERAL", "AND", "ASSIGN", "COMMA", "DOT", "LP", "OPENING_BRACKET", + "CLOSING_BRACKET", "NOT", "LIKE", "RLIKE", "IN", "IS", "AS", "NULL", + "OR", "RP", "UNDERSCORE", "INFO", "FUNCTIONS", "BOOLEAN_VALUE", "COMPARISON_OPERATOR", + "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", "TEN", "ORDERING", "NULLS_ORDERING", + "NULLS_ORDERING_DIRECTION", "MATH_FUNCTION", "UNARY_FUNCTION", "WHERE_FUNCTIONS", + "UNQUOTED_IDENTIFIER", "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", + "EXPR_WS", "METADATA", "SRC_UNQUOTED_IDENTIFIER", "SRC_QUOTED_IDENTIFIER", + "SRC_LINE_COMMENT", "SRC_MULTILINE_COMMENT", "SRC_WS", "ON", "WITH", + "ENR_UNQUOTED_IDENTIFIER", "ENR_QUOTED_IDENTIFIER", "ENR_LINE_COMMENT", + "ENR_MULTILINE_COMMENT", "ENR_WS", "EXPLAIN_PIPE" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public esql_lexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "esql_lexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000Q\u064a\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff\uffff"+ + "\u0006\uffff\uffff\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+ + "\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+ + "\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+ + "\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+ + "\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+ + "\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+ + "\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+ + "!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+ + "&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+ + "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+ + "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+ + "5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+ + ":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+ + "?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007"+ + "D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007"+ + "I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007"+ + "N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007"+ + "S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007"+ + "X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007"+ + "]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007"+ + "b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007"+ + "g\u0002h\u0007h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007"+ + "l\u0002m\u0007m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007"+ + "q\u0002r\u0007r\u0002s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007"+ + "v\u0002w\u0007w\u0002x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007"+ + "{\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006"+ + "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+ + "\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0011\u0005\u0011\u018d\b\u0011\n\u0011\f\u0011"+ + "\u0190\t\u0011\u0001\u0011\u0003\u0011\u0193\b\u0011\u0001\u0011\u0003"+ + "\u0011\u0196\b\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001"+ + "\u0012\u0001\u0012\u0001\u0012\u0005\u0012\u019f\b\u0012\n\u0012\f\u0012"+ + "\u01a2\t\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+ + "\u0001\u0013\u0004\u0013\u01aa\b\u0013\u000b\u0013\f\u0013\u01ab\u0001"+ + "\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ + "\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001"+ + "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+ + "\u001d\u0001\u001e\u0001\u001e\u0003\u001e\u01d5\b\u001e\u0001\u001e\u0004"+ + "\u001e\u01d8\b\u001e\u000b\u001e\f\u001e\u01d9\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0005\u001f\u01df\b\u001f\n\u001f\f\u001f\u01e2\t\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0005"+ + "\u001f\u01ea\b\u001f\n\u001f\f\u001f\u01ed\t\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u01f4\b\u001f\u0001\u001f"+ + "\u0003\u001f\u01f7\b\u001f\u0003\u001f\u01f9\b\u001f\u0001 \u0004 \u01fc"+ + "\b \u000b \f \u01fd\u0001!\u0004!\u0201\b!\u000b!\f!\u0202\u0001!\u0001"+ + "!\u0005!\u0207\b!\n!\f!\u020a\t!\u0001!\u0001!\u0004!\u020e\b!\u000b!"+ + "\f!\u020f\u0001!\u0004!\u0213\b!\u000b!\f!\u0214\u0001!\u0001!\u0005!"+ + "\u0219\b!\n!\f!\u021c\t!\u0003!\u021e\b!\u0001!\u0001!\u0001!\u0001!\u0004"+ + "!\u0224\b!\u000b!\f!\u0225\u0001!\u0001!\u0003!\u022a\b!\u0001\"\u0001"+ + "\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0003#\u028d\b#\u0001$\u0001$\u0001"+ + "$\u0001$\u0001%\u0001%\u0001&\u0001&\u0001\'\u0001\'\u0001(\u0001(\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+ + "+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001"+ + "-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001/\u0001/\u0001"+ + "/\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u0001"+ + "2\u00012\u00013\u00013\u00014\u00014\u00015\u00015\u00015\u00015\u0001"+ + "5\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ + "6\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0003"+ + "7\u02e1\b7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00038\u02ed\b8\u00019\u00019\u0001:\u0001:\u0001;\u0001;\u0001"+ + "<\u0001<\u0001=\u0001=\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001?\u0001?\u0003?\u0303\b?\u0001@\u0001@\u0001@\u0001@\u0001"+ + "@\u0001@\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+ + "A\u0003A\u0314\bA\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001B\u0001B\u0003B\u04d0\bB\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0003C\u0569\bC\u0001"+ + "D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001"+ + "D\u0001E\u0001E\u0001E\u0001E\u0001E\u0005E\u057b\bE\nE\fE\u057e\tE\u0001"+ + "E\u0001E\u0001E\u0001E\u0001E\u0004E\u0585\bE\u000bE\fE\u0586\u0003E\u0589"+ + "\bE\u0001F\u0001F\u0001F\u0001F\u0005F\u058f\bF\nF\fF\u0592\tF\u0001F"+ + "\u0001F\u0001G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001"+ + "I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001K\u0001"+ + "K\u0001K\u0001K\u0001K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ + "L\u0001M\u0001M\u0001M\u0001M\u0001N\u0001N\u0001N\u0001N\u0001O\u0001"+ + "O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001P\u0004P\u05c5"+ + "\bP\u000bP\fP\u05c6\u0001Q\u0004Q\u05ca\bQ\u000bQ\fQ\u05cb\u0001Q\u0001"+ + "Q\u0003Q\u05d0\bQ\u0001R\u0001R\u0001S\u0001S\u0001S\u0001S\u0001T\u0001"+ + "T\u0001T\u0001T\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001V\u0001"+ + "W\u0001W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ + "Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001"+ + "[\u0001[\u0001[\u0001[\u0001\\\u0004\\\u05fc\b\\\u000b\\\f\\\u05fd\u0001"+ + "]\u0004]\u0601\b]\u000b]\f]\u0602\u0001]\u0001]\u0003]\u0607\b]\u0001"+ + "^\u0001^\u0001_\u0001_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001`\u0001"+ + "a\u0001a\u0001a\u0001a\u0001b\u0001b\u0001c\u0001c\u0001d\u0001d\u0001"+ + "e\u0001e\u0001f\u0001f\u0001g\u0001g\u0001h\u0001h\u0001i\u0001i\u0001"+ + "j\u0001j\u0001k\u0001k\u0001l\u0001l\u0001m\u0001m\u0001n\u0001n\u0001"+ + "o\u0001o\u0001p\u0001p\u0001q\u0001q\u0001r\u0001r\u0001s\u0001s\u0001"+ + "t\u0001t\u0001u\u0001u\u0001v\u0001v\u0001w\u0001w\u0001x\u0001x\u0001"+ + "y\u0001y\u0001z\u0001z\u0001{\u0001{\u0002\u01a0\u01eb\u0000|\u0005\u0001"+ + "\u0007\u0002\t\u0003\u000b\u0004\r\u0005\u000f\u0006\u0011\u0007\u0013"+ + "\b\u0015\t\u0017\n\u0019\u000b\u001b\f\u001d\r\u001f\u000e!\u000f#\u0010"+ + "%\u0011\'\u0012)\u0013+\u0014-\u0000/Q1\u00153\u00165\u00177\u00189\u0000"+ + ";\u0000=\u0000?\u0000A\u0000C\u0019E\u001aG\u001bI\u001cK\u001dM\u001e"+ + "O\u001fQ S!U\"W#Y$[%]&_\'a(c)e*g+i,k-m.o/q0s1u2w3y4{5}6\u007f7\u00818"+ + "\u00839\u0085:\u0087;\u0089<\u008b=\u008d>\u008f?\u0091@\u0093A\u0095"+ + "B\u0097C\u0099\u0000\u009b\u0000\u009d\u0000\u009f\u0000\u00a1\u0000\u00a3"+ + "D\u00a5E\u00a7\u0000\u00a9F\u00abG\u00adH\u00afI\u00b1J\u00b3K\u00b5\u0000"+ + "\u00b7\u0000\u00b9\u0000\u00bb\u0000\u00bdL\u00bf\u0000\u00c1M\u00c3N"+ + "\u00c5O\u00c7P\u00c9\u0000\u00cb\u0000\u00cd\u0000\u00cf\u0000\u00d1\u0000"+ + "\u00d3\u0000\u00d5\u0000\u00d7\u0000\u00d9\u0000\u00db\u0000\u00dd\u0000"+ + "\u00df\u0000\u00e1\u0000\u00e3\u0000\u00e5\u0000\u00e7\u0000\u00e9\u0000"+ + "\u00eb\u0000\u00ed\u0000\u00ef\u0000\u00f1\u0000\u00f3\u0000\u00f5\u0000"+ + "\u00f7\u0000\u00f9\u0000\u00fb\u0000\u0005\u0000\u0001\u0002\u0003\u0004"+ + "%\u0002\u0000\n\n\r\r\u0003\u0000\t\n\r\r \u0001\u000009\u0002\u0000"+ + "AZaz\u0005\u0000\"\"\\\\nnrrtt\u0004\u0000\n\n\r\r\"\"\\\\\u0002\u0000"+ + "EEee\u0002\u0000++--\u0002\u0000@@__\u0001\u0000``\n\u0000\t\n\r\r ,"+ + ",//==[[]]``||\u0002\u0000**//\u0002\u0000AAaa\u0002\u0000BBbb\u0002\u0000"+ + "CCcc\u0002\u0000DDdd\u0002\u0000FFff\u0002\u0000GGgg\u0002\u0000HHhh\u0002"+ + "\u0000IIii\u0002\u0000JJjj\u0002\u0000KKkk\u0002\u0000LLll\u0002\u0000"+ + "MMmm\u0002\u0000NNnn\u0002\u0000OOoo\u0002\u0000PPpp\u0002\u0000QQqq\u0002"+ + "\u0000RRrr\u0002\u0000SSss\u0002\u0000TTtt\u0002\u0000UUuu\u0002\u0000"+ + "VVvv\u0002\u0000WWww\u0002\u0000XXxx\u0002\u0000YYyy\u0002\u0000ZZzz\u06af"+ + "\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000"+ + "\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000"+ + "\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011"+ + "\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015"+ + "\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019"+ + "\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d"+ + "\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001"+ + "\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000"+ + "\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000"+ + "\u0000+\u0001\u0000\u0000\u0000\u0001-\u0001\u0000\u0000\u0000\u0001/"+ + "\u0001\u0000\u0000\u0000\u00011\u0001\u0000\u0000\u0000\u00013\u0001\u0000"+ + "\u0000\u0000\u00015\u0001\u0000\u0000\u0000\u00027\u0001\u0000\u0000\u0000"+ + "\u0002C\u0001\u0000\u0000\u0000\u0002E\u0001\u0000\u0000\u0000\u0002G"+ + "\u0001\u0000\u0000\u0000\u0002I\u0001\u0000\u0000\u0000\u0002K\u0001\u0000"+ + "\u0000\u0000\u0002M\u0001\u0000\u0000\u0000\u0002O\u0001\u0000\u0000\u0000"+ + "\u0002Q\u0001\u0000\u0000\u0000\u0002S\u0001\u0000\u0000\u0000\u0002U"+ + "\u0001\u0000\u0000\u0000\u0002W\u0001\u0000\u0000\u0000\u0002Y\u0001\u0000"+ + "\u0000\u0000\u0002[\u0001\u0000\u0000\u0000\u0002]\u0001\u0000\u0000\u0000"+ + "\u0002_\u0001\u0000\u0000\u0000\u0002a\u0001\u0000\u0000\u0000\u0002c"+ + "\u0001\u0000\u0000\u0000\u0002e\u0001\u0000\u0000\u0000\u0002g\u0001\u0000"+ + "\u0000\u0000\u0002i\u0001\u0000\u0000\u0000\u0002k\u0001\u0000\u0000\u0000"+ + "\u0002m\u0001\u0000\u0000\u0000\u0002o\u0001\u0000\u0000\u0000\u0002q"+ + "\u0001\u0000\u0000\u0000\u0002s\u0001\u0000\u0000\u0000\u0002u\u0001\u0000"+ + "\u0000\u0000\u0002w\u0001\u0000\u0000\u0000\u0002y\u0001\u0000\u0000\u0000"+ + "\u0002{\u0001\u0000\u0000\u0000\u0002}\u0001\u0000\u0000\u0000\u0002\u007f"+ + "\u0001\u0000\u0000\u0000\u0002\u0081\u0001\u0000\u0000\u0000\u0002\u0083"+ + "\u0001\u0000\u0000\u0000\u0002\u0085\u0001\u0000\u0000\u0000\u0002\u0087"+ + "\u0001\u0000\u0000\u0000\u0002\u0089\u0001\u0000\u0000\u0000\u0002\u008b"+ + "\u0001\u0000\u0000\u0000\u0002\u008d\u0001\u0000\u0000\u0000\u0002\u008f"+ + "\u0001\u0000\u0000\u0000\u0002\u0091\u0001\u0000\u0000\u0000\u0002\u0093"+ + "\u0001\u0000\u0000\u0000\u0002\u0095\u0001\u0000\u0000\u0000\u0002\u0097"+ + "\u0001\u0000\u0000\u0000\u0003\u0099\u0001\u0000\u0000\u0000\u0003\u009b"+ + "\u0001\u0000\u0000\u0000\u0003\u009d\u0001\u0000\u0000\u0000\u0003\u009f"+ + "\u0001\u0000\u0000\u0000\u0003\u00a1\u0001\u0000\u0000\u0000\u0003\u00a3"+ + "\u0001\u0000\u0000\u0000\u0003\u00a5\u0001\u0000\u0000\u0000\u0003\u00a9"+ + "\u0001\u0000\u0000\u0000\u0003\u00ab\u0001\u0000\u0000\u0000\u0003\u00ad"+ + "\u0001\u0000\u0000\u0000\u0003\u00af\u0001\u0000\u0000\u0000\u0004\u00b1"+ + "\u0001\u0000\u0000\u0000\u0004\u00b3\u0001\u0000\u0000\u0000\u0004\u00b5"+ + "\u0001\u0000\u0000\u0000\u0004\u00b7\u0001\u0000\u0000\u0000\u0004\u00b9"+ + "\u0001\u0000\u0000\u0000\u0004\u00bb\u0001\u0000\u0000\u0000\u0004\u00bd"+ + "\u0001\u0000\u0000\u0000\u0004\u00c1\u0001\u0000\u0000\u0000\u0004\u00c3"+ + "\u0001\u0000\u0000\u0000\u0004\u00c5\u0001\u0000\u0000\u0000\u0004\u00c7"+ + "\u0001\u0000\u0000\u0000\u0005\u00fd\u0001\u0000\u0000\u0000\u0007\u0107"+ + "\u0001\u0000\u0000\u0000\t\u010e\u0001\u0000\u0000\u0000\u000b\u0115\u0001"+ + "\u0000\u0000\u0000\r\u011f\u0001\u0000\u0000\u0000\u000f\u0126\u0001\u0000"+ + "\u0000\u0000\u0011\u012c\u0001\u0000\u0000\u0000\u0013\u0134\u0001\u0000"+ + "\u0000\u0000\u0015\u013c\u0001\u0000\u0000\u0000\u0017\u0143\u0001\u0000"+ + "\u0000\u0000\u0019\u014f\u0001\u0000\u0000\u0000\u001b\u0157\u0001\u0000"+ + "\u0000\u0000\u001d\u0161\u0001\u0000\u0000\u0000\u001f\u0168\u0001\u0000"+ + "\u0000\u0000!\u0171\u0001\u0000\u0000\u0000#\u0178\u0001\u0000\u0000\u0000"+ + "%\u0181\u0001\u0000\u0000\u0000\'\u0188\u0001\u0000\u0000\u0000)\u0199"+ + "\u0001\u0000\u0000\u0000+\u01a9\u0001\u0000\u0000\u0000-\u01af\u0001\u0000"+ + "\u0000\u0000/\u01b4\u0001\u0000\u0000\u00001\u01b9\u0001\u0000\u0000\u0000"+ + "3\u01bd\u0001\u0000\u0000\u00005\u01c1\u0001\u0000\u0000\u00007\u01c5"+ + "\u0001\u0000\u0000\u00009\u01c9\u0001\u0000\u0000\u0000;\u01cb\u0001\u0000"+ + "\u0000\u0000=\u01cd\u0001\u0000\u0000\u0000?\u01d0\u0001\u0000\u0000\u0000"+ + "A\u01d2\u0001\u0000\u0000\u0000C\u01f8\u0001\u0000\u0000\u0000E\u01fb"+ + "\u0001\u0000\u0000\u0000G\u0229\u0001\u0000\u0000\u0000I\u022b\u0001\u0000"+ + "\u0000\u0000K\u028c\u0001\u0000\u0000\u0000M\u028e\u0001\u0000\u0000\u0000"+ + "O\u0292\u0001\u0000\u0000\u0000Q\u0294\u0001\u0000\u0000\u0000S\u0296"+ + "\u0001\u0000\u0000\u0000U\u0298\u0001\u0000\u0000\u0000W\u029a\u0001\u0000"+ + "\u0000\u0000Y\u029f\u0001\u0000\u0000\u0000[\u02a4\u0001\u0000\u0000\u0000"+ + "]\u02a8\u0001\u0000\u0000\u0000_\u02ad\u0001\u0000\u0000\u0000a\u02b3"+ + "\u0001\u0000\u0000\u0000c\u02b6\u0001\u0000\u0000\u0000e\u02b9\u0001\u0000"+ + "\u0000\u0000g\u02bc\u0001\u0000\u0000\u0000i\u02c1\u0001\u0000\u0000\u0000"+ + "k\u02c4\u0001\u0000\u0000\u0000m\u02c6\u0001\u0000\u0000\u0000o\u02c8"+ + "\u0001\u0000\u0000\u0000q\u02cd\u0001\u0000\u0000\u0000s\u02e0\u0001\u0000"+ + "\u0000\u0000u\u02ec\u0001\u0000\u0000\u0000w\u02ee\u0001\u0000\u0000\u0000"+ + "y\u02f0\u0001\u0000\u0000\u0000{\u02f2\u0001\u0000\u0000\u0000}\u02f4"+ + "\u0001\u0000\u0000\u0000\u007f\u02f6\u0001\u0000\u0000\u0000\u0081\u02f8"+ + "\u0001\u0000\u0000\u0000\u0083\u0302\u0001\u0000\u0000\u0000\u0085\u0304"+ + "\u0001\u0000\u0000\u0000\u0087\u0313\u0001\u0000\u0000\u0000\u0089\u04cf"+ + "\u0001\u0000\u0000\u0000\u008b\u0568\u0001\u0000\u0000\u0000\u008d\u056a"+ + "\u0001\u0000\u0000\u0000\u008f\u0588\u0001\u0000\u0000\u0000\u0091\u058a"+ + "\u0001\u0000\u0000\u0000\u0093\u0595\u0001\u0000\u0000\u0000\u0095\u0599"+ + "\u0001\u0000\u0000\u0000\u0097\u059d\u0001\u0000\u0000\u0000\u0099\u05a1"+ + "\u0001\u0000\u0000\u0000\u009b\u05a6\u0001\u0000\u0000\u0000\u009d\u05ac"+ + "\u0001\u0000\u0000\u0000\u009f\u05b2\u0001\u0000\u0000\u0000\u00a1\u05b6"+ + "\u0001\u0000\u0000\u0000\u00a3\u05ba\u0001\u0000\u0000\u0000\u00a5\u05c4"+ + "\u0001\u0000\u0000\u0000\u00a7\u05cf\u0001\u0000\u0000\u0000\u00a9\u05d1"+ + "\u0001\u0000\u0000\u0000\u00ab\u05d3\u0001\u0000\u0000\u0000\u00ad\u05d7"+ + "\u0001\u0000\u0000\u0000\u00af\u05db\u0001\u0000\u0000\u0000\u00b1\u05df"+ + "\u0001\u0000\u0000\u0000\u00b3\u05e2\u0001\u0000\u0000\u0000\u00b5\u05e7"+ + "\u0001\u0000\u0000\u0000\u00b7\u05ec\u0001\u0000\u0000\u0000\u00b9\u05f2"+ + "\u0001\u0000\u0000\u0000\u00bb\u05f6\u0001\u0000\u0000\u0000\u00bd\u05fb"+ + "\u0001\u0000\u0000\u0000\u00bf\u0606\u0001\u0000\u0000\u0000\u00c1\u0608"+ + "\u0001\u0000\u0000\u0000\u00c3\u060a\u0001\u0000\u0000\u0000\u00c5\u060e"+ + "\u0001\u0000\u0000\u0000\u00c7\u0612\u0001\u0000\u0000\u0000\u00c9\u0616"+ + "\u0001\u0000\u0000\u0000\u00cb\u0618\u0001\u0000\u0000\u0000\u00cd\u061a"+ + "\u0001\u0000\u0000\u0000\u00cf\u061c\u0001\u0000\u0000\u0000\u00d1\u061e"+ + "\u0001\u0000\u0000\u0000\u00d3\u0620\u0001\u0000\u0000\u0000\u00d5\u0622"+ + "\u0001\u0000\u0000\u0000\u00d7\u0624\u0001\u0000\u0000\u0000\u00d9\u0626"+ + "\u0001\u0000\u0000\u0000\u00db\u0628\u0001\u0000\u0000\u0000\u00dd\u062a"+ + "\u0001\u0000\u0000\u0000\u00df\u062c\u0001\u0000\u0000\u0000\u00e1\u062e"+ + "\u0001\u0000\u0000\u0000\u00e3\u0630\u0001\u0000\u0000\u0000\u00e5\u0632"+ + "\u0001\u0000\u0000\u0000\u00e7\u0634\u0001\u0000\u0000\u0000\u00e9\u0636"+ + "\u0001\u0000\u0000\u0000\u00eb\u0638\u0001\u0000\u0000\u0000\u00ed\u063a"+ + "\u0001\u0000\u0000\u0000\u00ef\u063c\u0001\u0000\u0000\u0000\u00f1\u063e"+ + "\u0001\u0000\u0000\u0000\u00f3\u0640\u0001\u0000\u0000\u0000\u00f5\u0642"+ + "\u0001\u0000\u0000\u0000\u00f7\u0644\u0001\u0000\u0000\u0000\u00f9\u0646"+ + "\u0001\u0000\u0000\u0000\u00fb\u0648\u0001\u0000\u0000\u0000\u00fd\u00fe"+ + "\u0003\u00cfe\u0000\u00fe\u00ff\u0003\u00d9j\u0000\u00ff\u0100\u0003\u00ed"+ + "t\u0000\u0100\u0101\u0003\u00edt\u0000\u0101\u0102\u0003\u00d1f\u0000"+ + "\u0102\u0103\u0003\u00cdd\u0000\u0103\u0104\u0003\u00efu\u0000\u0104\u0105"+ + "\u0001\u0000\u0000\u0000\u0105\u0106\u0006\u0000\u0000\u0000\u0106\u0006"+ + "\u0001\u0000\u0000\u0000\u0107\u0108\u0003\u00d5h\u0000\u0108\u0109\u0003"+ + "\u00ebs\u0000\u0109\u010a\u0003\u00e5p\u0000\u010a\u010b\u0003\u00ddl"+ + "\u0000\u010b\u010c\u0001\u0000\u0000\u0000\u010c\u010d\u0006\u0001\u0000"+ + "\u0000\u010d\b\u0001\u0000\u0000\u0000\u010e\u010f\u0003\u00d1f\u0000"+ + "\u010f\u0110\u0003\u00f3w\u0000\u0110\u0111\u0003\u00c9b\u0000\u0111\u0112"+ + "\u0003\u00dfm\u0000\u0112\u0113\u0001\u0000\u0000\u0000\u0113\u0114\u0006"+ + "\u0002\u0000\u0000\u0114\n\u0001\u0000\u0000\u0000\u0115\u0116\u0003\u00d1"+ + "f\u0000\u0116\u0117\u0003\u00f7y\u0000\u0117\u0118\u0003\u00e7q\u0000"+ + "\u0118\u0119\u0003\u00dfm\u0000\u0119\u011a\u0003\u00c9b\u0000\u011a\u011b"+ + "\u0003\u00d9j\u0000\u011b\u011c\u0003\u00e3o\u0000\u011c\u011d\u0001\u0000"+ + "\u0000\u0000\u011d\u011e\u0006\u0003\u0001\u0000\u011e\f\u0001\u0000\u0000"+ + "\u0000\u011f\u0120\u0003\u00d3g\u0000\u0120\u0121\u0003\u00ebs\u0000\u0121"+ + "\u0122\u0003\u00e5p\u0000\u0122\u0123\u0003\u00e1n\u0000\u0123\u0124\u0001"+ + "\u0000\u0000\u0000\u0124\u0125\u0006\u0004\u0002\u0000\u0125\u000e\u0001"+ + "\u0000\u0000\u0000\u0126\u0127\u0003\u00ebs\u0000\u0127\u0128\u0003\u00e5"+ + "p\u0000\u0128\u0129\u0003\u00f5x\u0000\u0129\u012a\u0001\u0000\u0000\u0000"+ + "\u012a\u012b\u0006\u0005\u0000\u0000\u012b\u0010\u0001\u0000\u0000\u0000"+ + "\u012c\u012d\u0003\u00edt\u0000\u012d\u012e\u0003\u00efu\u0000\u012e\u012f"+ + "\u0003\u00c9b\u0000\u012f\u0130\u0003\u00efu\u0000\u0130\u0131\u0003\u00ed"+ + "t\u0000\u0131\u0132\u0001\u0000\u0000\u0000\u0132\u0133\u0006\u0006\u0000"+ + "\u0000\u0133\u0012\u0001\u0000\u0000\u0000\u0134\u0135\u0003\u00f5x\u0000"+ + "\u0135\u0136\u0003\u00d7i\u0000\u0136\u0137\u0003\u00d1f\u0000\u0137\u0138"+ + "\u0003\u00ebs\u0000\u0138\u0139\u0003\u00d1f\u0000\u0139\u013a\u0001\u0000"+ + "\u0000\u0000\u013a\u013b\u0006\u0007\u0000\u0000\u013b\u0014\u0001\u0000"+ + "\u0000\u0000\u013c\u013d\u0003\u00edt\u0000\u013d\u013e\u0003\u00e5p\u0000"+ + "\u013e\u013f\u0003\u00ebs\u0000\u013f\u0140\u0003\u00efu\u0000\u0140\u0141"+ + "\u0001\u0000\u0000\u0000\u0141\u0142\u0006\b\u0000\u0000\u0142\u0016\u0001"+ + "\u0000\u0000\u0000\u0143\u0144\u0003\u00e1n\u0000\u0144\u0145\u0003\u00f3"+ + "w\u0000\u0145\u0146\u0003m4\u0000\u0146\u0147\u0003\u00d1f\u0000\u0147"+ + "\u0148\u0003\u00f7y\u0000\u0148\u0149\u0003\u00e7q\u0000\u0149\u014a\u0003"+ + "\u00c9b\u0000\u014a\u014b\u0003\u00e3o\u0000\u014b\u014c\u0003\u00cfe"+ + "\u0000\u014c\u014d\u0001\u0000\u0000\u0000\u014d\u014e\u0006\t\u0000\u0000"+ + "\u014e\u0018\u0001\u0000\u0000\u0000\u014f\u0150\u0003\u00dfm\u0000\u0150"+ + "\u0151\u0003\u00d9j\u0000\u0151\u0152\u0003\u00e1n\u0000\u0152\u0153\u0003"+ + "\u00d9j\u0000\u0153\u0154\u0003\u00efu\u0000\u0154\u0155\u0001\u0000\u0000"+ + "\u0000\u0155\u0156\u0006\n\u0000\u0000\u0156\u001a\u0001\u0000\u0000\u0000"+ + "\u0157\u0158\u0003\u00e7q\u0000\u0158\u0159\u0003\u00ebs\u0000\u0159\u015a"+ + "\u0003\u00e5p\u0000\u015a\u015b\u0003\u00dbk\u0000\u015b\u015c\u0003\u00d1"+ + "f\u0000\u015c\u015d\u0003\u00cdd\u0000\u015d\u015e\u0003\u00efu\u0000"+ + "\u015e\u015f\u0001\u0000\u0000\u0000\u015f\u0160\u0006\u000b\u0000\u0000"+ + "\u0160\u001c\u0001\u0000\u0000\u0000\u0161\u0162\u0003\u00cfe\u0000\u0162"+ + "\u0163\u0003\u00ebs\u0000\u0163\u0164\u0003\u00e5p\u0000\u0164\u0165\u0003"+ + "\u00e7q\u0000\u0165\u0166\u0001\u0000\u0000\u0000\u0166\u0167\u0006\f"+ + "\u0000\u0000\u0167\u001e\u0001\u0000\u0000\u0000\u0168\u0169\u0003\u00eb"+ + "s\u0000\u0169\u016a\u0003\u00d1f\u0000\u016a\u016b\u0003\u00e3o\u0000"+ + "\u016b\u016c\u0003\u00c9b\u0000\u016c\u016d\u0003\u00e1n\u0000\u016d\u016e"+ + "\u0003\u00d1f\u0000\u016e\u016f\u0001\u0000\u0000\u0000\u016f\u0170\u0006"+ + "\r\u0000\u0000\u0170 \u0001\u0000\u0000\u0000\u0171\u0172\u0003\u00ed"+ + "t\u0000\u0172\u0173\u0003\u00d7i\u0000\u0173\u0174\u0003\u00e5p\u0000"+ + "\u0174\u0175\u0003\u00f5x\u0000\u0175\u0176\u0001\u0000\u0000\u0000\u0176"+ + "\u0177\u0006\u000e\u0000\u0000\u0177\"\u0001\u0000\u0000\u0000\u0178\u0179"+ + "\u0003\u00d1f\u0000\u0179\u017a\u0003\u00e3o\u0000\u017a\u017b\u0003\u00eb"+ + "s\u0000\u017b\u017c\u0003\u00d9j\u0000\u017c\u017d\u0003\u00cdd\u0000"+ + "\u017d\u017e\u0003\u00d7i\u0000\u017e\u017f\u0001\u0000\u0000\u0000\u017f"+ + "\u0180\u0006\u000f\u0003\u0000\u0180$\u0001\u0000\u0000\u0000\u0181\u0182"+ + "\u0003\u00ddl\u0000\u0182\u0183\u0003\u00d1f\u0000\u0183\u0184\u0003\u00d1"+ + "f\u0000\u0184\u0185\u0003\u00e7q\u0000\u0185\u0186\u0001\u0000\u0000\u0000"+ + "\u0186\u0187\u0006\u0010\u0000\u0000\u0187&\u0001\u0000\u0000\u0000\u0188"+ + "\u0189\u0005/\u0000\u0000\u0189\u018a\u0005/\u0000\u0000\u018a\u018e\u0001"+ + "\u0000\u0000\u0000\u018b\u018d\b\u0000\u0000\u0000\u018c\u018b\u0001\u0000"+ + "\u0000\u0000\u018d\u0190\u0001\u0000\u0000\u0000\u018e\u018c\u0001\u0000"+ + "\u0000\u0000\u018e\u018f\u0001\u0000\u0000\u0000\u018f\u0192\u0001\u0000"+ + "\u0000\u0000\u0190\u018e\u0001\u0000\u0000\u0000\u0191\u0193\u0005\r\u0000"+ + "\u0000\u0192\u0191\u0001\u0000\u0000\u0000\u0192\u0193\u0001\u0000\u0000"+ + "\u0000\u0193\u0195\u0001\u0000\u0000\u0000\u0194\u0196\u0005\n\u0000\u0000"+ + "\u0195\u0194\u0001\u0000\u0000\u0000\u0195\u0196\u0001\u0000\u0000\u0000"+ + "\u0196\u0197\u0001\u0000\u0000\u0000\u0197\u0198\u0006\u0011\u0004\u0000"+ + "\u0198(\u0001\u0000\u0000\u0000\u0199\u019a\u0005/\u0000\u0000\u019a\u019b"+ + "\u0005*\u0000\u0000\u019b\u01a0\u0001\u0000\u0000\u0000\u019c\u019f\u0003"+ + ")\u0012\u0000\u019d\u019f\t\u0000\u0000\u0000\u019e\u019c\u0001\u0000"+ + "\u0000\u0000\u019e\u019d\u0001\u0000\u0000\u0000\u019f\u01a2\u0001\u0000"+ + "\u0000\u0000\u01a0\u01a1\u0001\u0000\u0000\u0000\u01a0\u019e\u0001\u0000"+ + "\u0000\u0000\u01a1\u01a3\u0001\u0000\u0000\u0000\u01a2\u01a0\u0001\u0000"+ + "\u0000\u0000\u01a3\u01a4\u0005*\u0000\u0000\u01a4\u01a5\u0005/\u0000\u0000"+ + "\u01a5\u01a6\u0001\u0000\u0000\u0000\u01a6\u01a7\u0006\u0012\u0004\u0000"+ + "\u01a7*\u0001\u0000\u0000\u0000\u01a8\u01aa\u0007\u0001\u0000\u0000\u01a9"+ + "\u01a8\u0001\u0000\u0000\u0000\u01aa\u01ab\u0001\u0000\u0000\u0000\u01ab"+ + "\u01a9\u0001\u0000\u0000\u0000\u01ab\u01ac\u0001\u0000\u0000\u0000\u01ac"+ + "\u01ad\u0001\u0000\u0000\u0000\u01ad\u01ae\u0006\u0013\u0004\u0000\u01ae"+ + ",\u0001\u0000\u0000\u0000\u01af\u01b0\u0005[\u0000\u0000\u01b0\u01b1\u0001"+ + "\u0000\u0000\u0000\u01b1\u01b2\u0006\u0014\u0005\u0000\u01b2\u01b3\u0006"+ + "\u0014\u0006\u0000\u01b3.\u0001\u0000\u0000\u0000\u01b4\u01b5\u0005|\u0000"+ + "\u0000\u01b5\u01b6\u0001\u0000\u0000\u0000\u01b6\u01b7\u0006\u0015\u0007"+ + "\u0000\u01b7\u01b8\u0006\u0015\b\u0000\u01b80\u0001\u0000\u0000\u0000"+ + "\u01b9\u01ba\u0003+\u0013\u0000\u01ba\u01bb\u0001\u0000\u0000\u0000\u01bb"+ + "\u01bc\u0006\u0016\u0004\u0000\u01bc2\u0001\u0000\u0000\u0000\u01bd\u01be"+ + "\u0003\'\u0011\u0000\u01be\u01bf\u0001\u0000\u0000\u0000\u01bf\u01c0\u0006"+ + "\u0017\u0004\u0000\u01c04\u0001\u0000\u0000\u0000\u01c1\u01c2\u0003)\u0012"+ + "\u0000\u01c2\u01c3\u0001\u0000\u0000\u0000\u01c3\u01c4\u0006\u0018\u0004"+ + "\u0000\u01c46\u0001\u0000\u0000\u0000\u01c5\u01c6\u0005|\u0000\u0000\u01c6"+ + "\u01c7\u0001\u0000\u0000\u0000\u01c7\u01c8\u0006\u0019\b\u0000\u01c88"+ + "\u0001\u0000\u0000\u0000\u01c9\u01ca\u0007\u0002\u0000\u0000\u01ca:\u0001"+ + "\u0000\u0000\u0000\u01cb\u01cc\u0007\u0003\u0000\u0000\u01cc<\u0001\u0000"+ + "\u0000\u0000\u01cd\u01ce\u0005\\\u0000\u0000\u01ce\u01cf\u0007\u0004\u0000"+ + "\u0000\u01cf>\u0001\u0000\u0000\u0000\u01d0\u01d1\b\u0005\u0000\u0000"+ + "\u01d1@\u0001\u0000\u0000\u0000\u01d2\u01d4\u0007\u0006\u0000\u0000\u01d3"+ + "\u01d5\u0007\u0007\u0000\u0000\u01d4\u01d3\u0001\u0000\u0000\u0000\u01d4"+ + "\u01d5\u0001\u0000\u0000\u0000\u01d5\u01d7\u0001\u0000\u0000\u0000\u01d6"+ + "\u01d8\u00039\u001a\u0000\u01d7\u01d6\u0001\u0000\u0000\u0000\u01d8\u01d9"+ + "\u0001\u0000\u0000\u0000\u01d9\u01d7\u0001\u0000\u0000\u0000\u01d9\u01da"+ + "\u0001\u0000\u0000\u0000\u01daB\u0001\u0000\u0000\u0000\u01db\u01e0\u0005"+ + "\"\u0000\u0000\u01dc\u01df\u0003=\u001c\u0000\u01dd\u01df\u0003?\u001d"+ + "\u0000\u01de\u01dc\u0001\u0000\u0000\u0000\u01de\u01dd\u0001\u0000\u0000"+ + "\u0000\u01df\u01e2\u0001\u0000\u0000\u0000\u01e0\u01de\u0001\u0000\u0000"+ + "\u0000\u01e0\u01e1\u0001\u0000\u0000\u0000\u01e1\u01e3\u0001\u0000\u0000"+ + "\u0000\u01e2\u01e0\u0001\u0000\u0000\u0000\u01e3\u01f9\u0005\"\u0000\u0000"+ + "\u01e4\u01e5\u0005\"\u0000\u0000\u01e5\u01e6\u0005\"\u0000\u0000\u01e6"+ + "\u01e7\u0005\"\u0000\u0000\u01e7\u01eb\u0001\u0000\u0000\u0000\u01e8\u01ea"+ + "\b\u0000\u0000\u0000\u01e9\u01e8\u0001\u0000\u0000\u0000\u01ea\u01ed\u0001"+ + "\u0000\u0000\u0000\u01eb\u01ec\u0001\u0000\u0000\u0000\u01eb\u01e9\u0001"+ + "\u0000\u0000\u0000\u01ec\u01ee\u0001\u0000\u0000\u0000\u01ed\u01eb\u0001"+ + "\u0000\u0000\u0000\u01ee\u01ef\u0005\"\u0000\u0000\u01ef\u01f0\u0005\""+ + "\u0000\u0000\u01f0\u01f1\u0005\"\u0000\u0000\u01f1\u01f3\u0001\u0000\u0000"+ + "\u0000\u01f2\u01f4\u0005\"\u0000\u0000\u01f3\u01f2\u0001\u0000\u0000\u0000"+ + "\u01f3\u01f4\u0001\u0000\u0000\u0000\u01f4\u01f6\u0001\u0000\u0000\u0000"+ + "\u01f5\u01f7\u0005\"\u0000\u0000\u01f6\u01f5\u0001\u0000\u0000\u0000\u01f6"+ + "\u01f7\u0001\u0000\u0000\u0000\u01f7\u01f9\u0001\u0000\u0000\u0000\u01f8"+ + "\u01db\u0001\u0000\u0000\u0000\u01f8\u01e4\u0001\u0000\u0000\u0000\u01f9"+ + "D\u0001\u0000\u0000\u0000\u01fa\u01fc\u00039\u001a\u0000\u01fb\u01fa\u0001"+ + "\u0000\u0000\u0000\u01fc\u01fd\u0001\u0000\u0000\u0000\u01fd\u01fb\u0001"+ + "\u0000\u0000\u0000\u01fd\u01fe\u0001\u0000\u0000\u0000\u01feF\u0001\u0000"+ + "\u0000\u0000\u01ff\u0201\u00039\u001a\u0000\u0200\u01ff\u0001\u0000\u0000"+ + "\u0000\u0201\u0202\u0001\u0000\u0000\u0000\u0202\u0200\u0001\u0000\u0000"+ + "\u0000\u0202\u0203\u0001\u0000\u0000\u0000\u0203\u0204\u0001\u0000\u0000"+ + "\u0000\u0204\u0208\u0003S\'\u0000\u0205\u0207\u00039\u001a\u0000\u0206"+ + "\u0205\u0001\u0000\u0000\u0000\u0207\u020a\u0001\u0000\u0000\u0000\u0208"+ + "\u0206\u0001\u0000\u0000\u0000\u0208\u0209\u0001\u0000\u0000\u0000\u0209"+ + "\u022a\u0001\u0000\u0000\u0000\u020a\u0208\u0001\u0000\u0000\u0000\u020b"+ + "\u020d\u0003S\'\u0000\u020c\u020e\u00039\u001a\u0000\u020d\u020c\u0001"+ + "\u0000\u0000\u0000\u020e\u020f\u0001\u0000\u0000\u0000\u020f\u020d\u0001"+ + "\u0000\u0000\u0000\u020f\u0210\u0001\u0000\u0000\u0000\u0210\u022a\u0001"+ + "\u0000\u0000\u0000\u0211\u0213\u00039\u001a\u0000\u0212\u0211\u0001\u0000"+ + "\u0000\u0000\u0213\u0214\u0001\u0000\u0000\u0000\u0214\u0212\u0001\u0000"+ + "\u0000\u0000\u0214\u0215\u0001\u0000\u0000\u0000\u0215\u021d\u0001\u0000"+ + "\u0000\u0000\u0216\u021a\u0003S\'\u0000\u0217\u0219\u00039\u001a\u0000"+ + "\u0218\u0217\u0001\u0000\u0000\u0000\u0219\u021c\u0001\u0000\u0000\u0000"+ + "\u021a\u0218\u0001\u0000\u0000\u0000\u021a\u021b\u0001\u0000\u0000\u0000"+ + "\u021b\u021e\u0001\u0000\u0000\u0000\u021c\u021a\u0001\u0000\u0000\u0000"+ + "\u021d\u0216\u0001\u0000\u0000\u0000\u021d\u021e\u0001\u0000\u0000\u0000"+ + "\u021e\u021f\u0001\u0000\u0000\u0000\u021f\u0220\u0003A\u001e\u0000\u0220"+ + "\u022a\u0001\u0000\u0000\u0000\u0221\u0223\u0003S\'\u0000\u0222\u0224"+ + "\u00039\u001a\u0000\u0223\u0222\u0001\u0000\u0000\u0000\u0224\u0225\u0001"+ + "\u0000\u0000\u0000\u0225\u0223\u0001\u0000\u0000\u0000\u0225\u0226\u0001"+ + "\u0000\u0000\u0000\u0226\u0227\u0001\u0000\u0000\u0000\u0227\u0228\u0003"+ + "A\u001e\u0000\u0228\u022a\u0001\u0000\u0000\u0000\u0229\u0200\u0001\u0000"+ + "\u0000\u0000\u0229\u020b\u0001\u0000\u0000\u0000\u0229\u0212\u0001\u0000"+ + "\u0000\u0000\u0229\u0221\u0001\u0000\u0000\u0000\u022aH\u0001\u0000\u0000"+ + "\u0000\u022b\u022c\u0005b\u0000\u0000\u022c\u022d\u0005y\u0000\u0000\u022d"+ + "J\u0001\u0000\u0000\u0000\u022e\u022f\u0005y\u0000\u0000\u022f\u0230\u0005"+ + "e\u0000\u0000\u0230\u0231\u0005a\u0000\u0000\u0231\u028d\u0005r\u0000"+ + "\u0000\u0232\u0233\u0005m\u0000\u0000\u0233\u0234\u0005o\u0000\u0000\u0234"+ + "\u0235\u0005n\u0000\u0000\u0235\u0236\u0005t\u0000\u0000\u0236\u028d\u0005"+ + "h\u0000\u0000\u0237\u0238\u0005d\u0000\u0000\u0238\u0239\u0005a\u0000"+ + "\u0000\u0239\u028d\u0005y\u0000\u0000\u023a\u023b\u0005s\u0000\u0000\u023b"+ + "\u023c\u0005e\u0000\u0000\u023c\u023d\u0005c\u0000\u0000\u023d\u023e\u0005"+ + "o\u0000\u0000\u023e\u023f\u0005n\u0000\u0000\u023f\u028d\u0005d\u0000"+ + "\u0000\u0240\u0241\u0005m\u0000\u0000\u0241\u0242\u0005i\u0000\u0000\u0242"+ + "\u0243\u0005n\u0000\u0000\u0243\u0244\u0005u\u0000\u0000\u0244\u0245\u0005"+ + "t\u0000\u0000\u0245\u028d\u0005e\u0000\u0000\u0246\u0247\u0005h\u0000"+ + "\u0000\u0247\u0248\u0005o\u0000\u0000\u0248\u0249\u0005u\u0000\u0000\u0249"+ + "\u028d\u0005r\u0000\u0000\u024a\u024b\u0005w\u0000\u0000\u024b\u024c\u0005"+ + "e\u0000\u0000\u024c\u024d\u0005e\u0000\u0000\u024d\u028d\u0005k\u0000"+ + "\u0000\u024e\u024f\u0005m\u0000\u0000\u024f\u0250\u0005i\u0000\u0000\u0250"+ + "\u0251\u0005l\u0000\u0000\u0251\u0252\u0005l\u0000\u0000\u0252\u0253\u0005"+ + "i\u0000\u0000\u0253\u0254\u0005s\u0000\u0000\u0254\u0255\u0005e\u0000"+ + "\u0000\u0255\u0256\u0005c\u0000\u0000\u0256\u0257\u0005o\u0000\u0000\u0257"+ + "\u0258\u0005n\u0000\u0000\u0258\u028d\u0005d\u0000\u0000\u0259\u025a\u0005"+ + "y\u0000\u0000\u025a\u025b\u0005e\u0000\u0000\u025b\u025c\u0005a\u0000"+ + "\u0000\u025c\u025d\u0005r\u0000\u0000\u025d\u028d\u0005s\u0000\u0000\u025e"+ + "\u025f\u0005m\u0000\u0000\u025f\u0260\u0005o\u0000\u0000\u0260\u0261\u0005"+ + "n\u0000\u0000\u0261\u0262\u0005t\u0000\u0000\u0262\u0263\u0005h\u0000"+ + "\u0000\u0263\u028d\u0005s\u0000\u0000\u0264\u0265\u0005d\u0000\u0000\u0265"+ + "\u0266\u0005a\u0000\u0000\u0266\u0267\u0005y\u0000\u0000\u0267\u028d\u0005"+ + "s\u0000\u0000\u0268\u0269\u0005s\u0000\u0000\u0269\u026a\u0005e\u0000"+ + "\u0000\u026a\u026b\u0005c\u0000\u0000\u026b\u026c\u0005o\u0000\u0000\u026c"+ + "\u026d\u0005n\u0000\u0000\u026d\u026e\u0005d\u0000\u0000\u026e\u028d\u0005"+ + "s\u0000\u0000\u026f\u0270\u0005m\u0000\u0000\u0270\u0271\u0005i\u0000"+ + "\u0000\u0271\u0272\u0005n\u0000\u0000\u0272\u0273\u0005u\u0000\u0000\u0273"+ + "\u0274\u0005t\u0000\u0000\u0274\u0275\u0005e\u0000\u0000\u0275\u028d\u0005"+ + "s\u0000\u0000\u0276\u0277\u0005h\u0000\u0000\u0277\u0278\u0005o\u0000"+ + "\u0000\u0278\u0279\u0005u\u0000\u0000\u0279\u027a\u0005r\u0000\u0000\u027a"+ + "\u028d\u0005s\u0000\u0000\u027b\u027c\u0005w\u0000\u0000\u027c\u027d\u0005"+ + "e\u0000\u0000\u027d\u027e\u0005e\u0000\u0000\u027e\u027f\u0005k\u0000"+ + "\u0000\u027f\u028d\u0005s\u0000\u0000\u0280\u0281\u0005m\u0000\u0000\u0281"+ + "\u0282\u0005i\u0000\u0000\u0282\u0283\u0005l\u0000\u0000\u0283\u0284\u0005"+ + "l\u0000\u0000\u0284\u0285\u0005i\u0000\u0000\u0285\u0286\u0005s\u0000"+ + "\u0000\u0286\u0287\u0005e\u0000\u0000\u0287\u0288\u0005c\u0000\u0000\u0288"+ + "\u0289\u0005o\u0000\u0000\u0289\u028a\u0005n\u0000\u0000\u028a\u028b\u0005"+ + "d\u0000\u0000\u028b\u028d\u0005s\u0000\u0000\u028c\u022e\u0001\u0000\u0000"+ + "\u0000\u028c\u0232\u0001\u0000\u0000\u0000\u028c\u0237\u0001\u0000\u0000"+ + "\u0000\u028c\u023a\u0001\u0000\u0000\u0000\u028c\u0240\u0001\u0000\u0000"+ + "\u0000\u028c\u0246\u0001\u0000\u0000\u0000\u028c\u024a\u0001\u0000\u0000"+ + "\u0000\u028c\u024e\u0001\u0000\u0000\u0000\u028c\u0259\u0001\u0000\u0000"+ + "\u0000\u028c\u025e\u0001\u0000\u0000\u0000\u028c\u0264\u0001\u0000\u0000"+ + "\u0000\u028c\u0268\u0001\u0000\u0000\u0000\u028c\u026f\u0001\u0000\u0000"+ + "\u0000\u028c\u0276\u0001\u0000\u0000\u0000\u028c\u027b\u0001\u0000\u0000"+ + "\u0000\u028c\u0280\u0001\u0000\u0000\u0000\u028dL\u0001\u0000\u0000\u0000"+ + "\u028e\u028f\u0005a\u0000\u0000\u028f\u0290\u0005n\u0000\u0000\u0290\u0291"+ + "\u0005d\u0000\u0000\u0291N\u0001\u0000\u0000\u0000\u0292\u0293\u0005="+ + "\u0000\u0000\u0293P\u0001\u0000\u0000\u0000\u0294\u0295\u0005,\u0000\u0000"+ + "\u0295R\u0001\u0000\u0000\u0000\u0296\u0297\u0005.\u0000\u0000\u0297T"+ + "\u0001\u0000\u0000\u0000\u0298\u0299\u0005(\u0000\u0000\u0299V\u0001\u0000"+ + "\u0000\u0000\u029a\u029b\u0005[\u0000\u0000\u029b\u029c\u0001\u0000\u0000"+ + "\u0000\u029c\u029d\u0006)\u0000\u0000\u029d\u029e\u0006)\u0000\u0000\u029e"+ + "X\u0001\u0000\u0000\u0000\u029f\u02a0\u0005]\u0000\u0000\u02a0\u02a1\u0001"+ + "\u0000\u0000\u0000\u02a1\u02a2\u0006*\b\u0000\u02a2\u02a3\u0006*\b\u0000"+ + "\u02a3Z\u0001\u0000\u0000\u0000\u02a4\u02a5\u0003\u00e3o\u0000\u02a5\u02a6"+ + "\u0003\u00e5p\u0000\u02a6\u02a7\u0003\u00efu\u0000\u02a7\\\u0001\u0000"+ + "\u0000\u0000\u02a8\u02a9\u0003\u00dfm\u0000\u02a9\u02aa\u0003\u00d9j\u0000"+ + "\u02aa\u02ab\u0003\u00ddl\u0000\u02ab\u02ac\u0003\u00d1f\u0000\u02ac^"+ + "\u0001\u0000\u0000\u0000\u02ad\u02ae\u0003\u00ebs\u0000\u02ae\u02af\u0003"+ + "\u00dfm\u0000\u02af\u02b0\u0003\u00d9j\u0000\u02b0\u02b1\u0003\u00ddl"+ + "\u0000\u02b1\u02b2\u0003\u00d1f\u0000\u02b2`\u0001\u0000\u0000\u0000\u02b3"+ + "\u02b4\u0003\u00d9j\u0000\u02b4\u02b5\u0003\u00e3o\u0000\u02b5b\u0001"+ + "\u0000\u0000\u0000\u02b6\u02b7\u0003\u00d9j\u0000\u02b7\u02b8\u0003\u00ed"+ + "t\u0000\u02b8d\u0001\u0000\u0000\u0000\u02b9\u02ba\u0003\u00c9b\u0000"+ + "\u02ba\u02bb\u0003\u00edt\u0000\u02bbf\u0001\u0000\u0000\u0000\u02bc\u02bd"+ + "\u0003\u00e3o\u0000\u02bd\u02be\u0003\u00f1v\u0000\u02be\u02bf\u0003\u00df"+ + "m\u0000\u02bf\u02c0\u0003\u00dfm\u0000\u02c0h\u0001\u0000\u0000\u0000"+ + "\u02c1\u02c2\u0005o\u0000\u0000\u02c2\u02c3\u0005r\u0000\u0000\u02c3j"+ + "\u0001\u0000\u0000\u0000\u02c4\u02c5\u0005)\u0000\u0000\u02c5l\u0001\u0000"+ + "\u0000\u0000\u02c6\u02c7\u0005_\u0000\u0000\u02c7n\u0001\u0000\u0000\u0000"+ + "\u02c8\u02c9\u0005i\u0000\u0000\u02c9\u02ca\u0005n\u0000\u0000\u02ca\u02cb"+ + "\u0005f\u0000\u0000\u02cb\u02cc\u0005o\u0000\u0000\u02ccp\u0001\u0000"+ + "\u0000\u0000\u02cd\u02ce\u0005f\u0000\u0000\u02ce\u02cf\u0005u\u0000\u0000"+ + "\u02cf\u02d0\u0005n\u0000\u0000\u02d0\u02d1\u0005c\u0000\u0000\u02d1\u02d2"+ + "\u0005t\u0000\u0000\u02d2\u02d3\u0005i\u0000\u0000\u02d3\u02d4\u0005o"+ + "\u0000\u0000\u02d4\u02d5\u0005n\u0000\u0000\u02d5\u02d6\u0005s\u0000\u0000"+ + "\u02d6r\u0001\u0000\u0000\u0000\u02d7\u02d8\u0005t\u0000\u0000\u02d8\u02d9"+ + "\u0005r\u0000\u0000\u02d9\u02da\u0005u\u0000\u0000\u02da\u02e1\u0005e"+ + "\u0000\u0000\u02db\u02dc\u0005f\u0000\u0000\u02dc\u02dd\u0005a\u0000\u0000"+ + "\u02dd\u02de\u0005l\u0000\u0000\u02de\u02df\u0005s\u0000\u0000\u02df\u02e1"+ + "\u0005e\u0000\u0000\u02e0\u02d7\u0001\u0000\u0000\u0000\u02e0\u02db\u0001"+ + "\u0000\u0000\u0000\u02e1t\u0001\u0000\u0000\u0000\u02e2\u02e3\u0005=\u0000"+ + "\u0000\u02e3\u02ed\u0005=\u0000\u0000\u02e4\u02e5\u0005!\u0000\u0000\u02e5"+ + "\u02ed\u0005=\u0000\u0000\u02e6\u02ed\u0005<\u0000\u0000\u02e7\u02e8\u0005"+ + "<\u0000\u0000\u02e8\u02ed\u0005=\u0000\u0000\u02e9\u02ed\u0005>\u0000"+ + "\u0000\u02ea\u02eb\u0005>\u0000\u0000\u02eb\u02ed\u0005=\u0000\u0000\u02ec"+ + "\u02e2\u0001\u0000\u0000\u0000\u02ec\u02e4\u0001\u0000\u0000\u0000\u02ec"+ + "\u02e6\u0001\u0000\u0000\u0000\u02ec\u02e7\u0001\u0000\u0000\u0000\u02ec"+ + "\u02e9\u0001\u0000\u0000\u0000\u02ec\u02ea\u0001\u0000\u0000\u0000\u02ed"+ + "v\u0001\u0000\u0000\u0000\u02ee\u02ef\u0005+\u0000\u0000\u02efx\u0001"+ + "\u0000\u0000\u0000\u02f0\u02f1\u0005-\u0000\u0000\u02f1z\u0001\u0000\u0000"+ + "\u0000\u02f2\u02f3\u0005*\u0000\u0000\u02f3|\u0001\u0000\u0000\u0000\u02f4"+ + "\u02f5\u0005/\u0000\u0000\u02f5~\u0001\u0000\u0000\u0000\u02f6\u02f7\u0005"+ + "%\u0000\u0000\u02f7\u0080\u0001\u0000\u0000\u0000\u02f8\u02f9\u00051\u0000"+ + "\u0000\u02f9\u02fa\u00050\u0000\u0000\u02fa\u0082\u0001\u0000\u0000\u0000"+ + "\u02fb\u02fc\u0005a\u0000\u0000\u02fc\u02fd\u0005s\u0000\u0000\u02fd\u0303"+ + "\u0005c\u0000\u0000\u02fe\u02ff\u0005d\u0000\u0000\u02ff\u0300\u0005e"+ + "\u0000\u0000\u0300\u0301\u0005s\u0000\u0000\u0301\u0303\u0005c\u0000\u0000"+ + "\u0302\u02fb\u0001\u0000\u0000\u0000\u0302\u02fe\u0001\u0000\u0000\u0000"+ + "\u0303\u0084\u0001\u0000\u0000\u0000\u0304\u0305\u0005n\u0000\u0000\u0305"+ + "\u0306\u0005u\u0000\u0000\u0306\u0307\u0005l\u0000\u0000\u0307\u0308\u0005"+ + "l\u0000\u0000\u0308\u0309\u0005s\u0000\u0000\u0309\u0086\u0001\u0000\u0000"+ + "\u0000\u030a\u030b\u0005f\u0000\u0000\u030b\u030c\u0005i\u0000\u0000\u030c"+ + "\u030d\u0005r\u0000\u0000\u030d\u030e\u0005s\u0000\u0000\u030e\u0314\u0005"+ + "t\u0000\u0000\u030f\u0310\u0005l\u0000\u0000\u0310\u0311\u0005a\u0000"+ + "\u0000\u0311\u0312\u0005s\u0000\u0000\u0312\u0314\u0005t\u0000\u0000\u0313"+ + "\u030a\u0001\u0000\u0000\u0000\u0313\u030f\u0001\u0000\u0000\u0000\u0314"+ + "\u0088\u0001\u0000\u0000\u0000\u0315\u0316\u0003\u00ebs\u0000\u0316\u0317"+ + "\u0003\u00e5p\u0000\u0317\u0318\u0003\u00f1v\u0000\u0318\u0319\u0003\u00e3"+ + "o\u0000\u0319\u031a\u0003\u00cfe\u0000\u031a\u04d0\u0001\u0000\u0000\u0000"+ + "\u031b\u031c\u0003\u00c9b\u0000\u031c\u031d\u0003\u00cbc\u0000\u031d\u031e"+ + "\u0003\u00edt\u0000\u031e\u04d0\u0001\u0000\u0000\u0000\u031f\u0320\u0003"+ + "\u00e7q\u0000\u0320\u0321\u0003\u00e5p\u0000\u0321\u0322\u0003\u00f5x"+ + "\u0000\u0322\u04d0\u0001\u0000\u0000\u0000\u0323\u0324\u0003\u00dfm\u0000"+ + "\u0324\u0325\u0003\u00e5p\u0000\u0325\u0326\u0003\u00d5h\u0000\u0326\u0327"+ + "\u0003\u0081>\u0000\u0327\u04d0\u0001\u0000\u0000\u0000\u0328\u0329\u0003"+ + "\u00e7q\u0000\u0329\u032a\u0003\u00d9j\u0000\u032a\u04d0\u0001\u0000\u0000"+ + "\u0000\u032b\u032c\u0003\u00efu\u0000\u032c\u032d\u0003\u00c9b\u0000\u032d"+ + "\u032e\u0003\u00f1v\u0000\u032e\u04d0\u0001\u0000\u0000\u0000\u032f\u04d0"+ + "\u0003\u00d1f\u0000\u0330\u0331\u0003\u00edt\u0000\u0331\u0332\u0003\u00f1"+ + "v\u0000\u0332\u0333\u0003\u00cbc\u0000\u0333\u0334\u0003\u00edt\u0000"+ + "\u0334\u0335\u0003\u00efu\u0000\u0335\u0336\u0003\u00ebs\u0000\u0336\u0337"+ + "\u0003\u00d9j\u0000\u0337\u0338\u0003\u00e3o\u0000\u0338\u0339\u0003\u00d5"+ + "h\u0000\u0339\u04d0\u0001\u0000\u0000\u0000\u033a\u033b\u0003\u00efu\u0000"+ + "\u033b\u033c\u0003\u00ebs\u0000\u033c\u033d\u0003\u00d9j\u0000\u033d\u033e"+ + "\u0003\u00e1n\u0000\u033e\u04d0\u0001\u0000\u0000\u0000\u033f\u0340\u0003"+ + "\u00cdd\u0000\u0340\u0341\u0003\u00e5p\u0000\u0341\u0342\u0003\u00e3o"+ + "\u0000\u0342\u0343\u0003\u00cdd\u0000\u0343\u0344\u0003\u00c9b\u0000\u0344"+ + "\u0345\u0003\u00efu\u0000\u0345\u04d0\u0001\u0000\u0000\u0000\u0346\u0347"+ + "\u0003\u00cdd\u0000\u0347\u0348\u0003\u00e5p\u0000\u0348\u0349\u0003\u00c9"+ + "b\u0000\u0349\u034a\u0003\u00dfm\u0000\u034a\u034b\u0003\u00d1f\u0000"+ + "\u034b\u034c\u0003\u00edt\u0000\u034c\u034d\u0003\u00cdd\u0000\u034d\u034e"+ + "\u0003\u00d1f\u0000\u034e\u04d0\u0001\u0000\u0000\u0000\u034f\u0350\u0003"+ + "\u00d5h\u0000\u0350\u0351\u0003\u00ebs\u0000\u0351\u0352\u0003\u00d1f"+ + "\u0000\u0352\u0353\u0003\u00c9b\u0000\u0353\u0354\u0003\u00efu\u0000\u0354"+ + "\u0355\u0003\u00d1f\u0000\u0355\u0356\u0003\u00edt\u0000\u0356\u0357\u0003"+ + "\u00efu\u0000\u0357\u04d0\u0001\u0000\u0000\u0000\u0358\u0359\u0003\u00df"+ + "m\u0000\u0359\u035a\u0003\u00d1f\u0000\u035a\u035b\u0003\u00d3g\u0000"+ + "\u035b\u035c\u0003\u00efu\u0000\u035c\u04d0\u0001\u0000\u0000\u0000\u035d"+ + "\u035e\u0003\u00e3o\u0000\u035e\u035f\u0003\u00e5p\u0000\u035f\u0360\u0003"+ + "\u00f5x\u0000\u0360\u04d0\u0001\u0000\u0000\u0000\u0361\u0362\u0003\u00eb"+ + "s\u0000\u0362\u0363\u0003\u00d9j\u0000\u0363\u0364\u0003\u00d5h\u0000"+ + "\u0364\u0365\u0003\u00d7i\u0000\u0365\u0366\u0003\u00efu\u0000\u0366\u04d0"+ + "\u0001\u0000\u0000\u0000\u0367\u0368\u0003\u00edt\u0000\u0368\u0369\u0003"+ + "\u00efu\u0000\u0369\u036a\u0003\u00c9b\u0000\u036a\u036b\u0003\u00ebs"+ + "\u0000\u036b\u036c\u0003\u00efu\u0000\u036c\u036d\u0003\u00edt\u0000\u036d"+ + "\u036e\u0003m4\u0000\u036e\u036f\u0003\u00f5x\u0000\u036f\u0370\u0003"+ + "\u00d9j\u0000\u0370\u0371\u0003\u00efu\u0000\u0371\u0372\u0003\u00d7i"+ + "\u0000\u0372\u04d0\u0001\u0000\u0000\u0000\u0373\u0374\u0003\u00cfe\u0000"+ + "\u0374\u0375\u0003\u00c9b\u0000\u0375\u0376\u0003\u00efu\u0000\u0376\u0377"+ + "\u0003\u00d1f\u0000\u0377\u0378\u0003m4\u0000\u0378\u0379\u0003\u00d3"+ + "g\u0000\u0379\u037a\u0003\u00e5p\u0000\u037a\u037b\u0003\u00ebs\u0000"+ + "\u037b\u037c\u0003\u00e1n\u0000\u037c\u037d\u0003\u00c9b\u0000\u037d\u037e"+ + "\u0003\u00efu\u0000\u037e\u04d0\u0001\u0000\u0000\u0000\u037f\u0380\u0003"+ + "\u00cfe\u0000\u0380\u0381\u0003\u00c9b\u0000\u0381\u0382\u0003\u00efu"+ + "\u0000\u0382\u0383\u0003\u00d1f\u0000\u0383\u0384\u0003m4\u0000\u0384"+ + "\u0385\u0003\u00efu\u0000\u0385\u0386\u0003\u00ebs\u0000\u0386\u0387\u0003"+ + "\u00f1v\u0000\u0387\u0388\u0003\u00e3o\u0000\u0388\u0389\u0003\u00cdd"+ + "\u0000\u0389\u04d0\u0001\u0000\u0000\u0000\u038a\u038b\u0003\u00cfe\u0000"+ + "\u038b\u038c\u0003\u00c9b\u0000\u038c\u038d\u0003\u00efu\u0000\u038d\u038e"+ + "\u0003\u00d1f\u0000\u038e\u038f\u0003m4\u0000\u038f\u0390\u0003\u00e7"+ + "q\u0000\u0390\u0391\u0003\u00c9b\u0000\u0391\u0392\u0003\u00ebs\u0000"+ + "\u0392\u0393\u0003\u00edt\u0000\u0393\u0394\u0003\u00d1f\u0000\u0394\u04d0"+ + "\u0001\u0000\u0000\u0000\u0395\u0396\u0003\u00c9b\u0000\u0396\u0397\u0003"+ + "\u00f1v\u0000\u0397\u0398\u0003\u00efu\u0000\u0398\u0399\u0003\u00e5p"+ + "\u0000\u0399\u039a\u0003m4\u0000\u039a\u039b\u0003\u00cbc\u0000\u039b"+ + "\u039c\u0003\u00f1v\u0000\u039c\u039d\u0003\u00cdd\u0000\u039d\u039e\u0003"+ + "\u00ddl\u0000\u039e\u039f\u0003\u00d1f\u0000\u039f\u03a0\u0003\u00efu"+ + "\u0000\u03a0\u04d0\u0001\u0000\u0000\u0000\u03a1\u03a2\u0003\u00cfe\u0000"+ + "\u03a2\u03a3\u0003\u00c9b\u0000\u03a3\u03a4\u0003\u00efu\u0000\u03a4\u03a5"+ + "\u0003\u00d1f\u0000\u03a5\u03a6\u0003m4\u0000\u03a6\u03a7\u0003\u00d1"+ + "f\u0000\u03a7\u03a8\u0003\u00f7y\u0000\u03a8\u03a9\u0003\u00efu\u0000"+ + "\u03a9\u03aa\u0003\u00ebs\u0000\u03aa\u03ab\u0003\u00c9b\u0000\u03ab\u03ac"+ + "\u0003\u00cdd\u0000\u03ac\u03ad\u0003\u00efu\u0000\u03ad\u04d0\u0001\u0000"+ + "\u0000\u0000\u03ae\u03af\u0003\u00d9j\u0000\u03af\u03b0\u0003\u00edt\u0000"+ + "\u03b0\u03b1\u0003m4\u0000\u03b1\u03b2\u0003\u00d3g\u0000\u03b2\u03b3"+ + "\u0003\u00d9j\u0000\u03b3\u03b4\u0003\u00e3o\u0000\u03b4\u03b5\u0003\u00d9"+ + "j\u0000\u03b5\u03b6\u0003\u00efu\u0000\u03b6\u03b7\u0003\u00d1f\u0000"+ + "\u03b7\u04d0\u0001\u0000\u0000\u0000\u03b8\u03b9\u0003\u00d9j\u0000\u03b9"+ + "\u03ba\u0003\u00edt\u0000\u03ba\u03bb\u0003m4\u0000\u03bb\u03bc\u0003"+ + "\u00d9j\u0000\u03bc\u03bd\u0003\u00e3o\u0000\u03bd\u03be\u0003\u00d3g"+ + "\u0000\u03be\u03bf\u0003\u00d9j\u0000\u03bf\u03c0\u0003\u00e3o\u0000\u03c0"+ + "\u03c1\u0003\u00d9j\u0000\u03c1\u03c2\u0003\u00efu\u0000\u03c2\u03c3\u0003"+ + "\u00d1f\u0000\u03c3\u04d0\u0001\u0000\u0000\u0000\u03c4\u03c5\u0003\u00cd"+ + "d\u0000\u03c5\u03c6\u0003\u00c9b\u0000\u03c6\u03c7\u0003\u00edt\u0000"+ + "\u03c7\u03c8\u0003\u00d1f\u0000\u03c8\u04d0\u0001\u0000\u0000\u0000\u03c9"+ + "\u03ca\u0003\u00dfm\u0000\u03ca\u03cb\u0003\u00d1f\u0000\u03cb\u03cc\u0003"+ + "\u00e3o\u0000\u03cc\u03cd\u0003\u00d5h\u0000\u03cd\u03ce\u0003\u00efu"+ + "\u0000\u03ce\u03cf\u0003\u00d7i\u0000\u03cf\u04d0\u0001\u0000\u0000\u0000"+ + "\u03d0\u03d1\u0003\u00e1n\u0000\u03d1\u03d2\u0003\u00f3w\u0000\u03d2\u03d3"+ + "\u0003m4\u0000\u03d3\u03d4\u0003\u00e1n\u0000\u03d4\u03d5\u0003\u00c9"+ + "b\u0000\u03d5\u03d6\u0003\u00f7y\u0000\u03d6\u04d0\u0001\u0000\u0000\u0000"+ + "\u03d7\u03d8\u0003\u00e1n\u0000\u03d8\u03d9\u0003\u00f3w\u0000\u03d9\u03da"+ + "\u0003m4\u0000\u03da\u03db\u0003\u00e1n\u0000\u03db\u03dc\u0003\u00d9"+ + "j\u0000\u03dc\u03dd\u0003\u00e3o\u0000\u03dd\u04d0\u0001\u0000\u0000\u0000"+ + "\u03de\u03df\u0003\u00e1n\u0000\u03df\u03e0\u0003\u00f3w\u0000\u03e0\u03e1"+ + "\u0003m4\u0000\u03e1\u03e2\u0003\u00c9b\u0000\u03e2\u03e3\u0003\u00f3"+ + "w\u0000\u03e3\u03e4\u0003\u00d5h\u0000\u03e4\u04d0\u0001\u0000\u0000\u0000"+ + "\u03e5\u03e6\u0003\u00e1n\u0000\u03e6\u03e7\u0003\u00f3w\u0000\u03e7\u03e8"+ + "\u0003m4\u0000\u03e8\u03e9\u0003\u00edt\u0000\u03e9\u03ea\u0003\u00f1"+ + "v\u0000\u03ea\u03eb\u0003\u00e1n\u0000\u03eb\u04d0\u0001\u0000\u0000\u0000"+ + "\u03ec\u03ed\u0003\u00e1n\u0000\u03ed\u03ee\u0003\u00f3w\u0000\u03ee\u03ef"+ + "\u0003m4\u0000\u03ef\u03f0\u0003\u00cdd\u0000\u03f0\u03f1\u0003\u00e5"+ + "p\u0000\u03f1\u03f2\u0003\u00f1v\u0000\u03f2\u03f3\u0003\u00e3o\u0000"+ + "\u03f3\u03f4\u0003\u00efu\u0000\u03f4\u04d0\u0001\u0000\u0000\u0000\u03f5"+ + "\u03f6\u0003\u00e1n\u0000\u03f6\u03f7\u0003\u00f3w\u0000\u03f7\u03f8\u0003"+ + "m4\u0000\u03f8\u03f9\u0003\u00cdd\u0000\u03f9\u03fa\u0003\u00e5p\u0000"+ + "\u03fa\u03fb\u0003\u00e3o\u0000\u03fb\u03fc\u0003\u00cdd\u0000\u03fc\u03fd"+ + "\u0003\u00c9b\u0000\u03fd\u03fe\u0003\u00efu\u0000\u03fe\u04d0\u0001\u0000"+ + "\u0000\u0000\u03ff\u0400\u0003\u00e1n\u0000\u0400\u0401\u0003\u00f3w\u0000"+ + "\u0401\u0402\u0003m4\u0000\u0402\u0403\u0003\u00dbk\u0000\u0403\u0404"+ + "\u0003\u00e5p\u0000\u0404\u0405\u0003\u00d9j\u0000\u0405\u0406\u0003\u00e3"+ + "o\u0000\u0406\u04d0\u0001\u0000\u0000\u0000\u0407\u0408\u0003\u00e1n\u0000"+ + "\u0408\u0409\u0003\u00f3w\u0000\u0409\u040a\u0003m4\u0000\u040a\u040b"+ + "\u0003\u00e1n\u0000\u040b\u040c\u0003\u00d1f\u0000\u040c\u040d\u0003\u00cf"+ + "e\u0000\u040d\u040e\u0003\u00d9j\u0000\u040e\u040f\u0003\u00c9b\u0000"+ + "\u040f\u0410\u0003\u00e3o\u0000\u0410\u04d0\u0001\u0000\u0000\u0000\u0411"+ + "\u0412\u0003\u00e1n\u0000\u0412\u0413\u0003\u00f3w\u0000\u0413\u0414\u0003"+ + "m4\u0000\u0414\u0415\u0003\u00cfe\u0000\u0415\u0416\u0003\u00d1f\u0000"+ + "\u0416\u0417\u0003\u00cfe\u0000\u0417\u0418\u0003\u00f1v\u0000\u0418\u0419"+ + "\u0003\u00e7q\u0000\u0419\u041a\u0003\u00d1f\u0000\u041a\u04d0\u0001\u0000"+ + "\u0000\u0000\u041b\u041c\u0003\u00e1n\u0000\u041c\u041d\u0003\u00d1f\u0000"+ + "\u041d\u041e\u0003\u00efu\u0000\u041e\u041f\u0003\u00c9b\u0000\u041f\u0420"+ + "\u0003\u00cfe\u0000\u0420\u0421\u0003\u00c9b\u0000\u0421\u0422\u0003\u00ef"+ + "u\u0000\u0422\u0423\u0003\u00c9b\u0000\u0423\u04d0\u0001\u0000\u0000\u0000"+ + "\u0424\u0425\u0003\u00edt\u0000\u0425\u0426\u0003\u00e7q\u0000\u0426\u0427"+ + "\u0003\u00dfm\u0000\u0427\u0428\u0003\u00d9j\u0000\u0428\u0429\u0003\u00ef"+ + "u\u0000\u0429\u04d0\u0001\u0000\u0000\u0000\u042a\u042b\u0003\u00efu\u0000"+ + "\u042b\u042c\u0003\u00e5p\u0000\u042c\u042d\u0003m4\u0000\u042d\u042e"+ + "\u0003\u00edt\u0000\u042e\u042f\u0003\u00efu\u0000\u042f\u0430\u0003\u00eb"+ + "s\u0000\u0430\u0431\u0003\u00d9j\u0000\u0431\u0432\u0003\u00e3o\u0000"+ + "\u0432\u0433\u0003\u00d5h\u0000\u0433\u04d0\u0001\u0000\u0000\u0000\u0434"+ + "\u0435\u0003\u00efu\u0000\u0435\u0436\u0003\u00e5p\u0000\u0436\u0437\u0003"+ + "m4\u0000\u0437\u0438\u0003\u00edt\u0000\u0438\u0439\u0003\u00efu\u0000"+ + "\u0439\u043a\u0003\u00ebs\u0000\u043a\u04d0\u0001\u0000\u0000\u0000\u043b"+ + "\u043c\u0003\u00efu\u0000\u043c\u043d\u0003\u00e5p\u0000\u043d\u043e\u0003"+ + "m4\u0000\u043e\u043f\u0003\u00cbc\u0000\u043f\u0440\u0003\u00e5p\u0000"+ + "\u0440\u0441\u0003\u00e5p\u0000\u0441\u0442\u0003\u00dfm\u0000\u0442\u04d0"+ + "\u0001\u0000\u0000\u0000\u0443\u0444\u0003\u00efu\u0000\u0444\u0445\u0003"+ + "\u00e5p\u0000\u0445\u0446\u0003m4\u0000\u0446\u0447\u0003\u00cbc\u0000"+ + "\u0447\u0448\u0003\u00e5p\u0000\u0448\u0449\u0003\u00e5p\u0000\u0449\u044a"+ + "\u0003\u00dfm\u0000\u044a\u044b\u0003\u00d1f\u0000\u044b\u044c\u0003\u00c9"+ + "b\u0000\u044c\u044d\u0003\u00e3o\u0000\u044d\u04d0\u0001\u0000\u0000\u0000"+ + "\u044e\u044f\u0003\u00efu\u0000\u044f\u0450\u0003\u00e5p\u0000\u0450\u0451"+ + "\u0003m4\u0000\u0451\u0452\u0003\u00cfe\u0000\u0452\u0453\u0003\u00c9"+ + "b\u0000\u0453\u0454\u0003\u00efu\u0000\u0454\u0455\u0003\u00d1f\u0000"+ + "\u0455\u0456\u0003\u00efu\u0000\u0456\u0457\u0003\u00d9j\u0000\u0457\u0458"+ + "\u0003\u00e1n\u0000\u0458\u0459\u0003\u00d1f\u0000\u0459\u04d0\u0001\u0000"+ + "\u0000\u0000\u045a\u045b\u0003\u00efu\u0000\u045b\u045c\u0003\u00e5p\u0000"+ + "\u045c\u045d\u0003m4\u0000\u045d\u045e\u0003\u00cfe\u0000\u045e\u045f"+ + "\u0003\u00efu\u0000\u045f\u04d0\u0001\u0000\u0000\u0000\u0460\u0461\u0003"+ + "\u00efu\u0000\u0461\u0462\u0003\u00e5p\u0000\u0462\u0463\u0003m4\u0000"+ + "\u0463\u0464\u0003\u00cfe\u0000\u0464\u0465\u0003\u00cbc\u0000\u0465\u0466"+ + "\u0003\u00dfm\u0000\u0466\u04d0\u0001\u0000\u0000\u0000\u0467\u0468\u0003"+ + "\u00efu\u0000\u0468\u0469\u0003\u00e5p\u0000\u0469\u046a\u0003m4\u0000"+ + "\u046a\u046b\u0003\u00cfe\u0000\u046b\u046c\u0003\u00e5p\u0000\u046c\u046d"+ + "\u0003\u00f1v\u0000\u046d\u046e\u0003\u00cbc\u0000\u046e\u046f\u0003\u00df"+ + "m\u0000\u046f\u0470\u0003\u00d1f\u0000\u0470\u04d0\u0001\u0000\u0000\u0000"+ + "\u0471\u0472\u0003\u00efu\u0000\u0472\u0473\u0003\u00e5p\u0000\u0473\u0474"+ + "\u0003m4\u0000\u0474\u0475\u0003\u00cfe\u0000\u0475\u0476\u0003\u00d1"+ + "f\u0000\u0476\u0477\u0003\u00d5h\u0000\u0477\u0478\u0003\u00ebs\u0000"+ + "\u0478\u0479\u0003\u00d1f\u0000\u0479\u047a\u0003\u00d1f\u0000\u047a\u047b"+ + "\u0003\u00edt\u0000\u047b\u04d0\u0001\u0000\u0000\u0000\u047c\u047d\u0003"+ + "\u00efu\u0000\u047d\u047e\u0003\u00e5p\u0000\u047e\u047f\u0003m4\u0000"+ + "\u047f\u0480\u0003\u00d9j\u0000\u0480\u0481\u0003\u00e3o\u0000\u0481\u0482"+ + "\u0003\u00efu\u0000\u0482\u04d0\u0001\u0000\u0000\u0000\u0483\u0484\u0003"+ + "\u00efu\u0000\u0484\u0485\u0003\u00e5p\u0000\u0485\u0486\u0003m4\u0000"+ + "\u0486\u0487\u0003\u00d9j\u0000\u0487\u0488\u0003\u00e3o\u0000\u0488\u0489"+ + "\u0003\u00efu\u0000\u0489\u048a\u0003\u00d1f\u0000\u048a\u048b\u0003\u00d5"+ + "h\u0000\u048b\u048c\u0003\u00d1f\u0000\u048c\u048d\u0003\u00ebs\u0000"+ + "\u048d\u04d0\u0001\u0000\u0000\u0000\u048e\u048f\u0003\u00efu\u0000\u048f"+ + "\u0490\u0003\u00e5p\u0000\u0490\u0491\u0003m4\u0000\u0491\u0492\u0003"+ + "\u00d9j\u0000\u0492\u0493\u0003\u00e7q\u0000\u0493\u04d0\u0001\u0000\u0000"+ + "\u0000\u0494\u0495\u0003\u00efu\u0000\u0495\u0496\u0003\u00e5p\u0000\u0496"+ + "\u0497\u0003m4\u0000\u0497\u0498\u0003\u00dfm\u0000\u0498\u0499\u0003"+ + "\u00e5p\u0000\u0499\u049a\u0003\u00e3o\u0000\u049a\u049b\u0003\u00d5h"+ + "\u0000\u049b\u04d0\u0001\u0000\u0000\u0000\u049c\u049d\u0003\u00efu\u0000"+ + "\u049d\u049e\u0003\u00e5p\u0000\u049e\u049f\u0003m4\u0000\u049f\u04a0"+ + "\u0003\u00ebs\u0000\u04a0\u04a1\u0003\u00c9b\u0000\u04a1\u04a2\u0003\u00cf"+ + "e\u0000\u04a2\u04a3\u0003\u00d9j\u0000\u04a3\u04a4\u0003\u00c9b\u0000"+ + "\u04a4\u04a5\u0003\u00e3o\u0000\u04a5\u04a6\u0003\u00edt\u0000\u04a6\u04d0"+ + "\u0001\u0000\u0000\u0000\u04a7\u04a8\u0003\u00efu\u0000\u04a8\u04a9\u0003"+ + "\u00e5p\u0000\u04a9\u04aa\u0003m4\u0000\u04aa\u04ab\u0003\u00f3w\u0000"+ + "\u04ab\u04ac\u0003\u00d1f\u0000\u04ac\u04ad\u0003\u00ebs\u0000\u04ad\u04ae"+ + "\u0003\u00edt\u0000\u04ae\u04af\u0003\u00d9j\u0000\u04af\u04b0\u0003\u00e5"+ + "p\u0000\u04b0\u04b1\u0003\u00e3o\u0000\u04b1\u04d0\u0001\u0000\u0000\u0000"+ + "\u04b2\u04b3\u0003\u00efu\u0000\u04b3\u04b4\u0003\u00e5p\u0000\u04b4\u04b5"+ + "\u0003m4\u0000\u04b5\u04b6\u0003\u00f1v\u0000\u04b6\u04b7\u0003\u00e3"+ + "o\u0000\u04b7\u04b8\u0003\u00edt\u0000\u04b8\u04b9\u0003\u00d9j\u0000"+ + "\u04b9\u04ba\u0003\u00d5h\u0000\u04ba\u04bb\u0003\u00e3o\u0000\u04bb\u04bc"+ + "\u0003\u00d1f\u0000\u04bc\u04bd\u0003\u00cfe\u0000\u04bd\u04be\u0003m"+ + "4\u0000\u04be\u04bf\u0003\u00dfm\u0000\u04bf\u04c0\u0003\u00e5p\u0000"+ + "\u04c0\u04c1\u0003\u00e3o\u0000\u04c1\u04c2\u0003\u00d5h\u0000\u04c2\u04d0"+ + "\u0001\u0000\u0000\u0000\u04c3\u04c4\u0003\u00efu\u0000\u04c4\u04c5\u0003"+ + "\u00e5p\u0000\u04c5\u04c6\u0003m4\u0000\u04c6\u04c7\u0003\u00d5h\u0000"+ + "\u04c7\u04c8\u0003\u00d1f\u0000\u04c8\u04c9\u0003\u00e5p\u0000\u04c9\u04ca"+ + "\u0003\u00e7q\u0000\u04ca\u04cb\u0003\u00e5p\u0000\u04cb\u04cc\u0003\u00d9"+ + "j\u0000\u04cc\u04cd\u0003\u00e3o\u0000\u04cd\u04ce\u0003\u00efu\u0000"+ + "\u04ce\u04d0\u0001\u0000\u0000\u0000\u04cf\u0315\u0001\u0000\u0000\u0000"+ + "\u04cf\u031b\u0001\u0000\u0000\u0000\u04cf\u031f\u0001\u0000\u0000\u0000"+ + "\u04cf\u0323\u0001\u0000\u0000\u0000\u04cf\u0328\u0001\u0000\u0000\u0000"+ + "\u04cf\u032b\u0001\u0000\u0000\u0000\u04cf\u032f\u0001\u0000\u0000\u0000"+ + "\u04cf\u0330\u0001\u0000\u0000\u0000\u04cf\u033a\u0001\u0000\u0000\u0000"+ + "\u04cf\u033f\u0001\u0000\u0000\u0000\u04cf\u0346\u0001\u0000\u0000\u0000"+ + "\u04cf\u034f\u0001\u0000\u0000\u0000\u04cf\u0358\u0001\u0000\u0000\u0000"+ + "\u04cf\u035d\u0001\u0000\u0000\u0000\u04cf\u0361\u0001\u0000\u0000\u0000"+ + "\u04cf\u0367\u0001\u0000\u0000\u0000\u04cf\u0373\u0001\u0000\u0000\u0000"+ + "\u04cf\u037f\u0001\u0000\u0000\u0000\u04cf\u038a\u0001\u0000\u0000\u0000"+ + "\u04cf\u0395\u0001\u0000\u0000\u0000\u04cf\u03a1\u0001\u0000\u0000\u0000"+ + "\u04cf\u03ae\u0001\u0000\u0000\u0000\u04cf\u03b8\u0001\u0000\u0000\u0000"+ + "\u04cf\u03c4\u0001\u0000\u0000\u0000\u04cf\u03c9\u0001\u0000\u0000\u0000"+ + "\u04cf\u03d0\u0001\u0000\u0000\u0000\u04cf\u03d7\u0001\u0000\u0000\u0000"+ + "\u04cf\u03de\u0001\u0000\u0000\u0000\u04cf\u03e5\u0001\u0000\u0000\u0000"+ + "\u04cf\u03ec\u0001\u0000\u0000\u0000\u04cf\u03f5\u0001\u0000\u0000\u0000"+ + "\u04cf\u03ff\u0001\u0000\u0000\u0000\u04cf\u0407\u0001\u0000\u0000\u0000"+ + "\u04cf\u0411\u0001\u0000\u0000\u0000\u04cf\u041b\u0001\u0000\u0000\u0000"+ + "\u04cf\u0424\u0001\u0000\u0000\u0000\u04cf\u042a\u0001\u0000\u0000\u0000"+ + "\u04cf\u0434\u0001\u0000\u0000\u0000\u04cf\u043b\u0001\u0000\u0000\u0000"+ + "\u04cf\u0443\u0001\u0000\u0000\u0000\u04cf\u044e\u0001\u0000\u0000\u0000"+ + "\u04cf\u045a\u0001\u0000\u0000\u0000\u04cf\u0460\u0001\u0000\u0000\u0000"+ + "\u04cf\u0467\u0001\u0000\u0000\u0000\u04cf\u0471\u0001\u0000\u0000\u0000"+ + "\u04cf\u047c\u0001\u0000\u0000\u0000\u04cf\u0483\u0001\u0000\u0000\u0000"+ + "\u04cf\u048e\u0001\u0000\u0000\u0000\u04cf\u0494\u0001\u0000\u0000\u0000"+ + "\u04cf\u049c\u0001\u0000\u0000\u0000\u04cf\u04a7\u0001\u0000\u0000\u0000"+ + "\u04cf\u04b2\u0001\u0000\u0000\u0000\u04cf\u04c3\u0001\u0000\u0000\u0000"+ + "\u04d0\u008a\u0001\u0000\u0000\u0000\u04d1\u04d2\u0003\u00c9b\u0000\u04d2"+ + "\u04d3\u0003\u00f3w\u0000\u04d3\u04d4\u0003\u00d5h\u0000\u04d4\u0569\u0001"+ + "\u0000\u0000\u0000\u04d5\u04d6\u0003\u00e1n\u0000\u04d6\u04d7\u0003\u00d9"+ + "j\u0000\u04d7\u04d8\u0003\u00e3o\u0000\u04d8\u0569\u0001\u0000\u0000\u0000"+ + "\u04d9\u04da\u0003\u00e1n\u0000\u04da\u04db\u0003\u00c9b\u0000\u04db\u04dc"+ + "\u0003\u00f7y\u0000\u04dc\u0569\u0001\u0000\u0000\u0000\u04dd\u04de\u0003"+ + "\u00edt\u0000\u04de\u04df\u0003\u00f1v\u0000\u04df\u04e0\u0003\u00e1n"+ + "\u0000\u04e0\u0569\u0001\u0000\u0000\u0000\u04e1\u04e2\u0003\u00cdd\u0000"+ + "\u04e2\u04e3\u0003\u00e5p\u0000\u04e3\u04e4\u0003\u00f1v\u0000\u04e4\u04e5"+ + "\u0003\u00e3o\u0000\u04e5\u04e6\u0003\u00efu\u0000\u04e6\u0569\u0001\u0000"+ + "\u0000\u0000\u04e7\u04e8\u0003\u00cdd\u0000\u04e8\u04e9\u0003\u00e5p\u0000"+ + "\u04e9\u04ea\u0003\u00f1v\u0000\u04ea\u04eb\u0003\u00e3o\u0000\u04eb\u04ec"+ + "\u0003\u00efu\u0000\u04ec\u04ed\u0003m4\u0000\u04ed\u04ee\u0003\u00cf"+ + "e\u0000\u04ee\u04ef\u0003\u00d9j\u0000\u04ef\u04f0\u0003\u00edt\u0000"+ + "\u04f0\u04f1\u0003\u00efu\u0000\u04f1\u04f2\u0003\u00d9j\u0000\u04f2\u04f3"+ + "\u0003\u00e3o\u0000\u04f3\u04f4\u0003\u00cdd\u0000\u04f4\u04f5\u0003\u00ef"+ + "u\u0000\u04f5\u0569\u0001\u0000\u0000\u0000\u04f6\u04f7\u0003\u00e7q\u0000"+ + "\u04f7\u04f8\u0003\u00d1f\u0000\u04f8\u04f9\u0003\u00ebs\u0000\u04f9\u04fa"+ + "\u0003\u00cdd\u0000\u04fa\u04fb\u0003\u00d1f\u0000\u04fb\u04fc\u0003\u00e3"+ + "o\u0000\u04fc\u04fd\u0003\u00efu\u0000\u04fd\u04fe\u0003\u00d9j\u0000"+ + "\u04fe\u04ff\u0003\u00dfm\u0000\u04ff\u0500\u0003\u00d1f\u0000\u0500\u0569"+ + "\u0001\u0000\u0000\u0000\u0501\u0502\u0003\u00e1n\u0000\u0502\u0503\u0003"+ + "\u00d1f\u0000\u0503\u0504\u0003\u00cfe\u0000\u0504\u0505\u0003\u00d9j"+ + "\u0000\u0505\u0506\u0003\u00c9b\u0000\u0506\u0507\u0003\u00e3o\u0000\u0507"+ + "\u0569\u0001\u0000\u0000\u0000\u0508\u0509\u0003\u00e1n\u0000\u0509\u050a"+ + "\u0003\u00d1f\u0000\u050a\u050b\u0003\u00cfe\u0000\u050b\u050c\u0003\u00d9"+ + "j\u0000\u050c\u050d\u0003\u00c9b\u0000\u050d\u050e\u0003\u00e3o\u0000"+ + "\u050e\u050f\u0003m4\u0000\u050f\u0510\u0003\u00c9b\u0000\u0510\u0511"+ + "\u0003\u00cbc\u0000\u0511\u0512\u0003\u00edt\u0000\u0512\u0513\u0003\u00e5"+ + "p\u0000\u0513\u0514\u0003\u00dfm\u0000\u0514\u0515\u0003\u00f1v\u0000"+ + "\u0515\u0516\u0003\u00efu\u0000\u0516\u0517\u0003\u00d1f\u0000\u0517\u0518"+ + "\u0003m4\u0000\u0518\u0519\u0003\u00cfe\u0000\u0519\u051a\u0003\u00d1"+ + "f\u0000\u051a\u051b\u0003\u00f3w\u0000\u051b\u051c\u0003\u00d9j\u0000"+ + "\u051c\u051d\u0003\u00c9b\u0000\u051d\u051e\u0003\u00efu\u0000\u051e\u051f"+ + "\u0003\u00d9j\u0000\u051f\u0520\u0003\u00e5p\u0000\u0520\u0521\u0003\u00e3"+ + "o\u0000\u0521\u0569\u0001\u0000\u0000\u0000\u0522\u0523\u0003\u00c9b\u0000"+ + "\u0523\u0524\u0003\u00cdd\u0000\u0524\u0525\u0003\u00e5p\u0000\u0525\u0526"+ + "\u0003\u00edt\u0000\u0526\u0569\u0001\u0000\u0000\u0000\u0527\u0528\u0003"+ + "\u00c9b\u0000\u0528\u0529\u0003\u00edt\u0000\u0529\u052a\u0003\u00d9j"+ + "\u0000\u052a\u052b\u0003\u00e3o\u0000\u052b\u0569\u0001\u0000\u0000\u0000"+ + "\u052c\u052d\u0003\u00c9b\u0000\u052d\u052e\u0003\u00efu\u0000\u052e\u052f"+ + "\u0003\u00c9b\u0000\u052f\u0530\u0003\u00e3o\u0000\u0530\u0569\u0001\u0000"+ + "\u0000\u0000\u0531\u0532\u0003\u00c9b\u0000\u0532\u0533\u0003\u00efu\u0000"+ + "\u0533\u0534\u0003\u00c9b\u0000\u0534\u0535\u0003\u00e3o\u0000\u0535\u0536"+ + "\u00052\u0000\u0000\u0536\u0569\u0001\u0000\u0000\u0000\u0537\u0538\u0003"+ + "\u00cdd\u0000\u0538\u0539\u0003\u00d1f\u0000\u0539\u053a\u0003\u00d9j"+ + "\u0000\u053a\u053b\u0003\u00dfm\u0000\u053b\u0569\u0001\u0000\u0000\u0000"+ + "\u053c\u053d\u0003\u00cdd\u0000\u053d\u053e\u0003\u00e5p\u0000\u053e\u053f"+ + "\u0003\u00edt\u0000\u053f\u0569\u0001\u0000\u0000\u0000\u0540\u0541\u0003"+ + "\u00cdd\u0000\u0541\u0542\u0003\u00e5p\u0000\u0542\u0543\u0003\u00edt"+ + "\u0000\u0543\u0544\u0003\u00d7i\u0000\u0544\u0569\u0001\u0000\u0000\u0000"+ + "\u0545\u0546\u0003\u00d3g\u0000\u0546\u0547\u0003\u00dfm\u0000\u0547\u0548"+ + "\u0003\u00e5p\u0000\u0548\u0549\u0003\u00e5p\u0000\u0549\u054a\u0003\u00eb"+ + "s\u0000\u054a\u0569\u0001\u0000\u0000\u0000\u054b\u054c\u0003\u00dfm\u0000"+ + "\u054c\u054d\u0003\u00efu\u0000\u054d\u054e\u0003\u00ebs\u0000\u054e\u054f"+ + "\u0003\u00d9j\u0000\u054f\u0550\u0003\u00e1n\u0000\u0550\u0569\u0001\u0000"+ + "\u0000\u0000\u0551\u0552\u0003\u00edt\u0000\u0552\u0553\u0003\u00d9j\u0000"+ + "\u0553\u0554\u0003\u00e3o\u0000\u0554\u0569\u0001\u0000\u0000\u0000\u0555"+ + "\u0556\u0003\u00edt\u0000\u0556\u0557\u0003\u00d9j\u0000\u0557\u0558\u0003"+ + "\u00e3o\u0000\u0558\u0559\u0003\u00d7i\u0000\u0559\u0569\u0001\u0000\u0000"+ + "\u0000\u055a\u055b\u0003\u00edt\u0000\u055b\u055c\u0003\u00e9r\u0000\u055c"+ + "\u055d\u0003\u00ebs\u0000\u055d\u055e\u0003\u00efu\u0000\u055e\u0569\u0001"+ + "\u0000\u0000\u0000\u055f\u0560\u0003\u00efu\u0000\u0560\u0561\u0003\u00c9"+ + "b\u0000\u0561\u0562\u0003\u00e3o\u0000\u0562\u0569\u0001\u0000\u0000\u0000"+ + "\u0563\u0564\u0003\u00efu\u0000\u0564\u0565\u0003\u00c9b\u0000\u0565\u0566"+ + "\u0003\u00e3o\u0000\u0566\u0567\u0003\u00d7i\u0000\u0567\u0569\u0001\u0000"+ + "\u0000\u0000\u0568\u04d1\u0001\u0000\u0000\u0000\u0568\u04d5\u0001\u0000"+ + "\u0000\u0000\u0568\u04d9\u0001\u0000\u0000\u0000\u0568\u04dd\u0001\u0000"+ + "\u0000\u0000\u0568\u04e1\u0001\u0000\u0000\u0000\u0568\u04e7\u0001\u0000"+ + "\u0000\u0000\u0568\u04f6\u0001\u0000\u0000\u0000\u0568\u0501\u0001\u0000"+ + "\u0000\u0000\u0568\u0508\u0001\u0000\u0000\u0000\u0568\u0522\u0001\u0000"+ + "\u0000\u0000\u0568\u0527\u0001\u0000\u0000\u0000\u0568\u052c\u0001\u0000"+ + "\u0000\u0000\u0568\u0531\u0001\u0000\u0000\u0000\u0568\u0537\u0001\u0000"+ + "\u0000\u0000\u0568\u053c\u0001\u0000\u0000\u0000\u0568\u0540\u0001\u0000"+ + "\u0000\u0000\u0568\u0545\u0001\u0000\u0000\u0000\u0568\u054b\u0001\u0000"+ + "\u0000\u0000\u0568\u0551\u0001\u0000\u0000\u0000\u0568\u0555\u0001\u0000"+ + "\u0000\u0000\u0568\u055a\u0001\u0000\u0000\u0000\u0568\u055f\u0001\u0000"+ + "\u0000\u0000\u0568\u0563\u0001\u0000\u0000\u0000\u0569\u008c\u0001\u0000"+ + "\u0000\u0000\u056a\u056b\u0003\u00cdd\u0000\u056b\u056c\u0003\u00d9j\u0000"+ + "\u056c\u056d\u0003\u00cfe\u0000\u056d\u056e\u0003\u00ebs\u0000\u056e\u056f"+ + "\u0003m4\u0000\u056f\u0570\u0003\u00e1n\u0000\u0570\u0571\u0003\u00c9"+ + "b\u0000\u0571\u0572\u0003\u00efu\u0000\u0572\u0573\u0003\u00cdd\u0000"+ + "\u0573\u0574\u0003\u00d7i\u0000\u0574\u008e\u0001\u0000\u0000\u0000\u0575"+ + "\u057c\u0003;\u001b\u0000\u0576\u057b\u0003;\u001b\u0000\u0577\u057b\u0003"+ + "9\u001a\u0000\u0578\u057b\u0005_\u0000\u0000\u0579\u057b\u0003{;\u0000"+ + "\u057a\u0576\u0001\u0000\u0000\u0000\u057a\u0577\u0001\u0000\u0000\u0000"+ + "\u057a\u0578\u0001\u0000\u0000\u0000\u057a\u0579\u0001\u0000\u0000\u0000"+ + "\u057b\u057e\u0001\u0000\u0000\u0000\u057c\u057a\u0001\u0000\u0000\u0000"+ + "\u057c\u057d\u0001\u0000\u0000\u0000\u057d\u0589\u0001\u0000\u0000\u0000"+ + "\u057e\u057c\u0001\u0000\u0000\u0000\u057f\u0584\u0007\b\u0000\u0000\u0580"+ + "\u0585\u0003;\u001b\u0000\u0581\u0585\u00039\u001a\u0000\u0582\u0585\u0005"+ + "_\u0000\u0000\u0583\u0585\u0003{;\u0000\u0584\u0580\u0001\u0000\u0000"+ + "\u0000\u0584\u0581\u0001\u0000\u0000\u0000\u0584\u0582\u0001\u0000\u0000"+ + "\u0000\u0584\u0583\u0001\u0000\u0000\u0000\u0585\u0586\u0001\u0000\u0000"+ + "\u0000\u0586\u0584\u0001\u0000\u0000\u0000\u0586\u0587\u0001\u0000\u0000"+ + "\u0000\u0587\u0589\u0001\u0000\u0000\u0000\u0588\u0575\u0001\u0000\u0000"+ + "\u0000\u0588\u057f\u0001\u0000\u0000\u0000\u0589\u0090\u0001\u0000\u0000"+ + "\u0000\u058a\u0590\u0005`\u0000\u0000\u058b\u058f\b\t\u0000\u0000\u058c"+ + "\u058d\u0005`\u0000\u0000\u058d\u058f\u0005`\u0000\u0000\u058e\u058b\u0001"+ + "\u0000\u0000\u0000\u058e\u058c\u0001\u0000\u0000\u0000\u058f\u0592\u0001"+ + "\u0000\u0000\u0000\u0590\u058e\u0001\u0000\u0000\u0000\u0590\u0591\u0001"+ + "\u0000\u0000\u0000\u0591\u0593\u0001\u0000\u0000\u0000\u0592\u0590\u0001"+ + "\u0000\u0000\u0000\u0593\u0594\u0005`\u0000\u0000\u0594\u0092\u0001\u0000"+ + "\u0000\u0000\u0595\u0596\u0003\'\u0011\u0000\u0596\u0597\u0001\u0000\u0000"+ + "\u0000\u0597\u0598\u0006G\u0004\u0000\u0598\u0094\u0001\u0000\u0000\u0000"+ + "\u0599\u059a\u0003)\u0012\u0000\u059a\u059b\u0001\u0000\u0000\u0000\u059b"+ + "\u059c\u0006H\u0004\u0000\u059c\u0096\u0001\u0000\u0000\u0000\u059d\u059e"+ + "\u0003+\u0013\u0000\u059e\u059f\u0001\u0000\u0000\u0000\u059f\u05a0\u0006"+ + "I\u0004\u0000\u05a0\u0098\u0001\u0000\u0000\u0000\u05a1\u05a2\u0005|\u0000"+ + "\u0000\u05a2\u05a3\u0001\u0000\u0000\u0000\u05a3\u05a4\u0006J\u0007\u0000"+ + "\u05a4\u05a5\u0006J\b\u0000\u05a5\u009a\u0001\u0000\u0000\u0000\u05a6"+ + "\u05a7\u0005[\u0000\u0000\u05a7\u05a8\u0001\u0000\u0000\u0000\u05a8\u05a9"+ + "\u0006K\u0005\u0000\u05a9\u05aa\u0006K\u0002\u0000\u05aa\u05ab\u0006K"+ + "\u0002\u0000\u05ab\u009c\u0001\u0000\u0000\u0000\u05ac\u05ad\u0005]\u0000"+ + "\u0000\u05ad\u05ae\u0001\u0000\u0000\u0000\u05ae\u05af\u0006L\b\u0000"+ + "\u05af\u05b0\u0006L\b\u0000\u05b0\u05b1\u0006L\t\u0000\u05b1\u009e\u0001"+ + "\u0000\u0000\u0000\u05b2\u05b3\u0005,\u0000\u0000\u05b3\u05b4\u0001\u0000"+ + "\u0000\u0000\u05b4\u05b5\u0006M\n\u0000\u05b5\u00a0\u0001\u0000\u0000"+ + "\u0000\u05b6\u05b7\u0005=\u0000\u0000\u05b7\u05b8\u0001\u0000\u0000\u0000"+ + "\u05b8\u05b9\u0006N\u000b\u0000\u05b9\u00a2\u0001\u0000\u0000\u0000\u05ba"+ + "\u05bb\u0003\u00e1n\u0000\u05bb\u05bc\u0003\u00d1f\u0000\u05bc\u05bd\u0003"+ + "\u00efu\u0000\u05bd\u05be\u0003\u00c9b\u0000\u05be\u05bf\u0003\u00cfe"+ + "\u0000\u05bf\u05c0\u0003\u00c9b\u0000\u05c0\u05c1\u0003\u00efu\u0000\u05c1"+ + "\u05c2\u0003\u00c9b\u0000\u05c2\u00a4\u0001\u0000\u0000\u0000\u05c3\u05c5"+ + "\u0003\u00a7Q\u0000\u05c4\u05c3\u0001\u0000\u0000\u0000\u05c5\u05c6\u0001"+ + "\u0000\u0000\u0000\u05c6\u05c4\u0001\u0000\u0000\u0000\u05c6\u05c7\u0001"+ + "\u0000\u0000\u0000\u05c7\u00a6\u0001\u0000\u0000\u0000\u05c8\u05ca\b\n"+ + "\u0000\u0000\u05c9\u05c8\u0001\u0000\u0000\u0000\u05ca\u05cb\u0001\u0000"+ + "\u0000\u0000\u05cb\u05c9\u0001\u0000\u0000\u0000\u05cb\u05cc\u0001\u0000"+ + "\u0000\u0000\u05cc\u05d0\u0001\u0000\u0000\u0000\u05cd\u05ce\u0005/\u0000"+ + "\u0000\u05ce\u05d0\b\u000b\u0000\u0000\u05cf\u05c9\u0001\u0000\u0000\u0000"+ + "\u05cf\u05cd\u0001\u0000\u0000\u0000\u05d0\u00a8\u0001\u0000\u0000\u0000"+ + "\u05d1\u05d2\u0003\u0091F\u0000\u05d2\u00aa\u0001\u0000\u0000\u0000\u05d3"+ + "\u05d4\u0003\'\u0011\u0000\u05d4\u05d5\u0001\u0000\u0000\u0000\u05d5\u05d6"+ + "\u0006S\u0004\u0000\u05d6\u00ac\u0001\u0000\u0000\u0000\u05d7\u05d8\u0003"+ + ")\u0012\u0000\u05d8\u05d9\u0001\u0000\u0000\u0000\u05d9\u05da\u0006T\u0004"+ + "\u0000\u05da\u00ae\u0001\u0000\u0000\u0000\u05db\u05dc\u0003+\u0013\u0000"+ + "\u05dc\u05dd\u0001\u0000\u0000\u0000\u05dd\u05de\u0006U\u0004\u0000\u05de"+ + "\u00b0\u0001\u0000\u0000\u0000\u05df\u05e0\u0003\u00e5p\u0000\u05e0\u05e1"+ + "\u0003\u00e3o\u0000\u05e1\u00b2\u0001\u0000\u0000\u0000\u05e2\u05e3\u0003"+ + "\u00f5x\u0000\u05e3\u05e4\u0003\u00d9j\u0000\u05e4\u05e5\u0003\u00efu"+ + "\u0000\u05e5\u05e6\u0003\u00d7i\u0000\u05e6\u00b4\u0001\u0000\u0000\u0000"+ + "\u05e7\u05e8\u0005|\u0000\u0000\u05e8\u05e9\u0001\u0000\u0000\u0000\u05e9"+ + "\u05ea\u0006X\u0007\u0000\u05ea\u05eb\u0006X\b\u0000\u05eb\u00b6\u0001"+ + "\u0000\u0000\u0000\u05ec\u05ed\u0005]\u0000\u0000\u05ed\u05ee\u0001\u0000"+ + "\u0000\u0000\u05ee\u05ef\u0006Y\b\u0000\u05ef\u05f0\u0006Y\b\u0000\u05f0"+ + "\u05f1\u0006Y\t\u0000\u05f1\u00b8\u0001\u0000\u0000\u0000\u05f2\u05f3"+ + "\u0005,\u0000\u0000\u05f3\u05f4\u0001\u0000\u0000\u0000\u05f4\u05f5\u0006"+ + "Z\n\u0000\u05f5\u00ba\u0001\u0000\u0000\u0000\u05f6\u05f7\u0005=\u0000"+ + "\u0000\u05f7\u05f8\u0001\u0000\u0000\u0000\u05f8\u05f9\u0006[\u000b\u0000"+ + "\u05f9\u00bc\u0001\u0000\u0000\u0000\u05fa\u05fc\u0003\u00bf]\u0000\u05fb"+ + "\u05fa\u0001\u0000\u0000\u0000\u05fc\u05fd\u0001\u0000\u0000\u0000\u05fd"+ + "\u05fb\u0001\u0000\u0000\u0000\u05fd\u05fe\u0001\u0000\u0000\u0000\u05fe"+ + "\u00be\u0001\u0000\u0000\u0000\u05ff\u0601\b\n\u0000\u0000\u0600\u05ff"+ + "\u0001\u0000\u0000\u0000\u0601\u0602\u0001\u0000\u0000\u0000\u0602\u0600"+ + "\u0001\u0000\u0000\u0000\u0602\u0603\u0001\u0000\u0000\u0000\u0603\u0607"+ + "\u0001\u0000\u0000\u0000\u0604\u0605\u0005/\u0000\u0000\u0605\u0607\b"+ + "\u000b\u0000\u0000\u0606\u0600\u0001\u0000\u0000\u0000\u0606\u0604\u0001"+ + "\u0000\u0000\u0000\u0607\u00c0\u0001\u0000\u0000\u0000\u0608\u0609\u0003"+ + "\u0091F\u0000\u0609\u00c2\u0001\u0000\u0000\u0000\u060a\u060b\u0003\'"+ + "\u0011\u0000\u060b\u060c\u0001\u0000\u0000\u0000\u060c\u060d\u0006_\u0004"+ + "\u0000\u060d\u00c4\u0001\u0000\u0000\u0000\u060e\u060f\u0003)\u0012\u0000"+ + "\u060f\u0610\u0001\u0000\u0000\u0000\u0610\u0611\u0006`\u0004\u0000\u0611"+ + "\u00c6\u0001\u0000\u0000\u0000\u0612\u0613\u0003+\u0013\u0000\u0613\u0614"+ + "\u0001\u0000\u0000\u0000\u0614\u0615\u0006a\u0004\u0000\u0615\u00c8\u0001"+ + "\u0000\u0000\u0000\u0616\u0617\u0007\f\u0000\u0000\u0617\u00ca\u0001\u0000"+ + "\u0000\u0000\u0618\u0619\u0007\r\u0000\u0000\u0619\u00cc\u0001\u0000\u0000"+ + "\u0000\u061a\u061b\u0007\u000e\u0000\u0000\u061b\u00ce\u0001\u0000\u0000"+ + "\u0000\u061c\u061d\u0007\u000f\u0000\u0000\u061d\u00d0\u0001\u0000\u0000"+ + "\u0000\u061e\u061f\u0007\u0006\u0000\u0000\u061f\u00d2\u0001\u0000\u0000"+ + "\u0000\u0620\u0621\u0007\u0010\u0000\u0000\u0621\u00d4\u0001\u0000\u0000"+ + "\u0000\u0622\u0623\u0007\u0011\u0000\u0000\u0623\u00d6\u0001\u0000\u0000"+ + "\u0000\u0624\u0625\u0007\u0012\u0000\u0000\u0625\u00d8\u0001\u0000\u0000"+ + "\u0000\u0626\u0627\u0007\u0013\u0000\u0000\u0627\u00da\u0001\u0000\u0000"+ + "\u0000\u0628\u0629\u0007\u0014\u0000\u0000\u0629\u00dc\u0001\u0000\u0000"+ + "\u0000\u062a\u062b\u0007\u0015\u0000\u0000\u062b\u00de\u0001\u0000\u0000"+ + "\u0000\u062c\u062d\u0007\u0016\u0000\u0000\u062d\u00e0\u0001\u0000\u0000"+ + "\u0000\u062e\u062f\u0007\u0017\u0000\u0000\u062f\u00e2\u0001\u0000\u0000"+ + "\u0000\u0630\u0631\u0007\u0018\u0000\u0000\u0631\u00e4\u0001\u0000\u0000"+ + "\u0000\u0632\u0633\u0007\u0019\u0000\u0000\u0633\u00e6\u0001\u0000\u0000"+ + "\u0000\u0634\u0635\u0007\u001a\u0000\u0000\u0635\u00e8\u0001\u0000\u0000"+ + "\u0000\u0636\u0637\u0007\u001b\u0000\u0000\u0637\u00ea\u0001\u0000\u0000"+ + "\u0000\u0638\u0639\u0007\u001c\u0000\u0000\u0639\u00ec\u0001\u0000\u0000"+ + "\u0000\u063a\u063b\u0007\u001d\u0000\u0000\u063b\u00ee\u0001\u0000\u0000"+ + "\u0000\u063c\u063d\u0007\u001e\u0000\u0000\u063d\u00f0\u0001\u0000\u0000"+ + "\u0000\u063e\u063f\u0007\u001f\u0000\u0000\u063f\u00f2\u0001\u0000\u0000"+ + "\u0000\u0640\u0641\u0007 \u0000\u0000\u0641\u00f4\u0001\u0000\u0000\u0000"+ + "\u0642\u0643\u0007!\u0000\u0000\u0643\u00f6\u0001\u0000\u0000\u0000\u0644"+ + "\u0645\u0007\"\u0000\u0000\u0645\u00f8\u0001\u0000\u0000\u0000\u0646\u0647"+ + "\u0007#\u0000\u0000\u0647\u00fa\u0001\u0000\u0000\u0000\u0648\u0649\u0007"+ + "$\u0000\u0000\u0649\u00fc\u0001\u0000\u0000\u00000\u0000\u0001\u0002\u0003"+ + "\u0004\u018e\u0192\u0195\u019e\u01a0\u01ab\u01d4\u01d9\u01de\u01e0\u01eb"+ + "\u01f3\u01f6\u01f8\u01fd\u0202\u0208\u020f\u0214\u021a\u021d\u0225\u0229"+ + "\u028c\u02e0\u02ec\u0302\u0313\u04cf\u0568\u057a\u057c\u0584\u0586\u0588"+ + "\u058e\u0590\u05c6\u05cb\u05cf\u05fd\u0602\u0606\f\u0005\u0002\u0000\u0005"+ + "\u0001\u0000\u0005\u0003\u0000\u0005\u0004\u0000\u0000\u0001\u0000\u0007"+ + "#\u0000\u0005\u0000\u0000\u0007\u0018\u0000\u0004\u0000\u0000\u0007$\u0000"+ + "\u0007 \u0000\u0007\u001f\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/packages/kbn-esql/src/antlr/.antlr/esql_lexer.tokens b/packages/kbn-esql/src/antlr/.antlr/esql_lexer.tokens new file mode 100644 index 0000000000000..b72e97b9a2961 --- /dev/null +++ b/packages/kbn-esql/src/antlr/.antlr/esql_lexer.tokens @@ -0,0 +1,98 @@ +DISSECT=1 +GROK=2 +EVAL=3 +EXPLAIN=4 +FROM=5 +ROW=6 +STATS=7 +WHERE=8 +SORT=9 +MV_EXPAND=10 +LIMIT=11 +PROJECT=12 +DROP=13 +RENAME=14 +SHOW=15 +ENRICH=16 +KEEP=17 +LINE_COMMENT=18 +MULTILINE_COMMENT=19 +WS=20 +EXPLAIN_WS=21 +EXPLAIN_LINE_COMMENT=22 +EXPLAIN_MULTILINE_COMMENT=23 +PIPE=24 +STRING=25 +INTEGER_LITERAL=26 +DECIMAL_LITERAL=27 +BY=28 +DATE_LITERAL=29 +AND=30 +ASSIGN=31 +COMMA=32 +DOT=33 +LP=34 +OPENING_BRACKET=35 +CLOSING_BRACKET=36 +NOT=37 +LIKE=38 +RLIKE=39 +IN=40 +IS=41 +AS=42 +NULL=43 +OR=44 +RP=45 +UNDERSCORE=46 +INFO=47 +FUNCTIONS=48 +BOOLEAN_VALUE=49 +COMPARISON_OPERATOR=50 +PLUS=51 +MINUS=52 +ASTERISK=53 +SLASH=54 +PERCENT=55 +TEN=56 +ORDERING=57 +NULLS_ORDERING=58 +NULLS_ORDERING_DIRECTION=59 +MATH_FUNCTION=60 +UNARY_FUNCTION=61 +WHERE_FUNCTIONS=62 +UNQUOTED_IDENTIFIER=63 +QUOTED_IDENTIFIER=64 +EXPR_LINE_COMMENT=65 +EXPR_MULTILINE_COMMENT=66 +EXPR_WS=67 +METADATA=68 +SRC_UNQUOTED_IDENTIFIER=69 +SRC_QUOTED_IDENTIFIER=70 +SRC_LINE_COMMENT=71 +SRC_MULTILINE_COMMENT=72 +SRC_WS=73 +ON=74 +WITH=75 +ENR_UNQUOTED_IDENTIFIER=76 +ENR_QUOTED_IDENTIFIER=77 +ENR_LINE_COMMENT=78 +ENR_MULTILINE_COMMENT=79 +ENR_WS=80 +EXPLAIN_PIPE=81 +'by'=28 +'and'=30 +'.'=33 +'('=34 +']'=36 +'or'=44 +')'=45 +'_'=46 +'info'=47 +'functions'=48 +'+'=51 +'-'=52 +'*'=53 +'/'=54 +'%'=55 +'10'=56 +'nulls'=58 diff --git a/packages/kbn-esql/src/antlr/.antlr/esql_parser.interp b/packages/kbn-esql/src/antlr/.antlr/esql_parser.interp new file mode 100644 index 0000000000000..72a8d73c77d6d --- /dev/null +++ b/packages/kbn-esql/src/antlr/.antlr/esql_parser.interp @@ -0,0 +1,256 @@ +token literal names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'|' +null +null +null +null +null +null +'=' +',' +null +'.' +null +null +null +'(' +null +null +null +null +null +null +null +'?' +null +')' +null +'==' +'!=' +'<' +'<=' +'>' +'>=' +'+' +'-' +'*' +'/' +'%' +null +']' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +DISSECT +DROP +ENRICH +EVAL +EXPLAIN +FROM +GROK +INLINESTATS +KEEP +LIMIT +MV_EXPAND +PROJECT +RENAME +ROW +SHOW +SORT +STATS +WHERE +UNKNOWN_CMD +LINE_COMMENT +MULTILINE_COMMENT +WS +EXPLAIN_WS +EXPLAIN_LINE_COMMENT +EXPLAIN_MULTILINE_COMMENT +PIPE +STRING +INTEGER_LITERAL +DECIMAL_LITERAL +BY +AND +ASC +ASSIGN +COMMA +DESC +DOT +FALSE +FIRST +LAST +LP +IN +IS +LIKE +NOT +NULL +NULLS +OR +PARAM +RLIKE +RP +TRUE +EQ +NEQ +LT +LTE +GT +GTE +PLUS +MINUS +ASTERISK +SLASH +PERCENT +OPENING_BRACKET +CLOSING_BRACKET +UNQUOTED_IDENTIFIER +QUOTED_IDENTIFIER +EXPR_LINE_COMMENT +EXPR_MULTILINE_COMMENT +EXPR_WS +METADATA +FROM_UNQUOTED_IDENTIFIER +FROM_LINE_COMMENT +FROM_MULTILINE_COMMENT +FROM_WS +PROJECT_UNQUOTED_IDENTIFIER +PROJECT_LINE_COMMENT +PROJECT_MULTILINE_COMMENT +PROJECT_WS +AS +RENAME_LINE_COMMENT +RENAME_MULTILINE_COMMENT +RENAME_WS +ON +WITH +ENRICH_LINE_COMMENT +ENRICH_MULTILINE_COMMENT +ENRICH_WS +ENRICH_FIELD_LINE_COMMENT +ENRICH_FIELD_MULTILINE_COMMENT +ENRICH_FIELD_WS +MVEXPAND_LINE_COMMENT +MVEXPAND_MULTILINE_COMMENT +MVEXPAND_WS +INFO +FUNCTIONS +SHOW_LINE_COMMENT +SHOW_MULTILINE_COMMENT +SHOW_WS + +rule names: +singleStatement +query +sourceCommand +processingCommand +whereCommand +booleanExpression +regexBooleanExpression +valueExpression +operatorExpression +primaryExpression +functionExpression +rowCommand +fields +field +fromCommand +metadata +evalCommand +statsCommand +inlinestatsCommand +grouping +fromIdentifier +qualifiedName +qualifiedNamePattern +identifier +identifierPattern +constant +limitCommand +sortCommand +orderExpression +keepCommand +dropCommand +renameCommand +renameClause +dissectCommand +grokCommand +mvExpandCommand +commandOptions +commandOption +booleanValue +numericValue +decimalValue +integerValue +string +comparisonOperator +explainCommand +subqueryExpression +showCommand +enrichCommand +enrichWithClause + + +atn: +[4, 1, 98, 519, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 108, 8, 1, 10, 1, 12, 1, 111, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 117, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 132, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 144, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 151, 8, 5, 10, 5, 12, 5, 154, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 161, 8, 5, 1, 5, 1, 5, 3, 5, 165, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 173, 8, 5, 10, 5, 12, 5, 176, 9, 5, 1, 6, 1, 6, 3, 6, 180, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 187, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 192, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 199, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 205, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 213, 8, 8, 10, 8, 12, 8, 216, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 225, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 233, 8, 10, 10, 10, 12, 10, 236, 9, 10, 3, 10, 238, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 5, 12, 248, 8, 12, 10, 12, 12, 12, 251, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 258, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 264, 8, 14, 10, 14, 12, 14, 267, 9, 14, 1, 14, 3, 14, 270, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 277, 8, 15, 10, 15, 12, 15, 280, 9, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 3, 17, 289, 8, 17, 1, 17, 1, 17, 3, 17, 293, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 299, 8, 18, 1, 19, 1, 19, 1, 19, 5, 19, 304, 8, 19, 10, 19, 12, 19, 307, 9, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 5, 21, 314, 8, 21, 10, 21, 12, 21, 317, 9, 21, 1, 22, 1, 22, 1, 22, 5, 22, 322, 8, 22, 10, 22, 12, 22, 325, 9, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 344, 8, 25, 10, 25, 12, 25, 347, 9, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 355, 8, 25, 10, 25, 12, 25, 358, 9, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 366, 8, 25, 10, 25, 12, 25, 369, 9, 25, 1, 25, 1, 25, 3, 25, 373, 8, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 382, 8, 27, 10, 27, 12, 27, 385, 9, 27, 1, 28, 1, 28, 3, 28, 389, 8, 28, 1, 28, 1, 28, 3, 28, 393, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 399, 8, 29, 10, 29, 12, 29, 402, 9, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 408, 8, 29, 10, 29, 12, 29, 411, 9, 29, 3, 29, 413, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 419, 8, 30, 10, 30, 12, 30, 422, 9, 30, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 428, 8, 31, 10, 31, 12, 31, 431, 9, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 441, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 5, 36, 453, 8, 36, 10, 36, 12, 36, 456, 9, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 3, 39, 466, 8, 39, 1, 40, 3, 40, 469, 8, 40, 1, 40, 1, 40, 1, 41, 3, 41, 474, 8, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 493, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 499, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 505, 8, 47, 10, 47, 12, 47, 508, 9, 47, 3, 47, 510, 8, 47, 1, 48, 1, 48, 1, 48, 3, 48, 515, 8, 48, 1, 48, 1, 48, 1, 48, 0, 3, 2, 10, 16, 49, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 0, 9, 1, 0, 58, 59, 1, 0, 60, 62, 2, 0, 66, 66, 71, 71, 1, 0, 65, 66, 2, 0, 66, 66, 75, 75, 2, 0, 32, 32, 35, 35, 1, 0, 38, 39, 2, 0, 37, 37, 51, 51, 1, 0, 52, 57, 548, 0, 98, 1, 0, 0, 0, 2, 101, 1, 0, 0, 0, 4, 116, 1, 0, 0, 0, 6, 131, 1, 0, 0, 0, 8, 133, 1, 0, 0, 0, 10, 164, 1, 0, 0, 0, 12, 191, 1, 0, 0, 0, 14, 198, 1, 0, 0, 0, 16, 204, 1, 0, 0, 0, 18, 224, 1, 0, 0, 0, 20, 226, 1, 0, 0, 0, 22, 241, 1, 0, 0, 0, 24, 244, 1, 0, 0, 0, 26, 257, 1, 0, 0, 0, 28, 259, 1, 0, 0, 0, 30, 271, 1, 0, 0, 0, 32, 283, 1, 0, 0, 0, 34, 286, 1, 0, 0, 0, 36, 294, 1, 0, 0, 0, 38, 300, 1, 0, 0, 0, 40, 308, 1, 0, 0, 0, 42, 310, 1, 0, 0, 0, 44, 318, 1, 0, 0, 0, 46, 326, 1, 0, 0, 0, 48, 328, 1, 0, 0, 0, 50, 372, 1, 0, 0, 0, 52, 374, 1, 0, 0, 0, 54, 377, 1, 0, 0, 0, 56, 386, 1, 0, 0, 0, 58, 412, 1, 0, 0, 0, 60, 414, 1, 0, 0, 0, 62, 423, 1, 0, 0, 0, 64, 432, 1, 0, 0, 0, 66, 436, 1, 0, 0, 0, 68, 442, 1, 0, 0, 0, 70, 446, 1, 0, 0, 0, 72, 449, 1, 0, 0, 0, 74, 457, 1, 0, 0, 0, 76, 461, 1, 0, 0, 0, 78, 465, 1, 0, 0, 0, 80, 468, 1, 0, 0, 0, 82, 473, 1, 0, 0, 0, 84, 477, 1, 0, 0, 0, 86, 479, 1, 0, 0, 0, 88, 481, 1, 0, 0, 0, 90, 484, 1, 0, 0, 0, 92, 492, 1, 0, 0, 0, 94, 494, 1, 0, 0, 0, 96, 514, 1, 0, 0, 0, 98, 99, 3, 2, 1, 0, 99, 100, 5, 0, 0, 1, 100, 1, 1, 0, 0, 0, 101, 102, 6, 1, -1, 0, 102, 103, 3, 4, 2, 0, 103, 109, 1, 0, 0, 0, 104, 105, 10, 1, 0, 0, 105, 106, 5, 26, 0, 0, 106, 108, 3, 6, 3, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 3, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 117, 3, 88, 44, 0, 113, 117, 3, 28, 14, 0, 114, 117, 3, 22, 11, 0, 115, 117, 3, 92, 46, 0, 116, 112, 1, 0, 0, 0, 116, 113, 1, 0, 0, 0, 116, 114, 1, 0, 0, 0, 116, 115, 1, 0, 0, 0, 117, 5, 1, 0, 0, 0, 118, 132, 3, 32, 16, 0, 119, 132, 3, 36, 18, 0, 120, 132, 3, 52, 26, 0, 121, 132, 3, 58, 29, 0, 122, 132, 3, 54, 27, 0, 123, 132, 3, 34, 17, 0, 124, 132, 3, 8, 4, 0, 125, 132, 3, 60, 30, 0, 126, 132, 3, 62, 31, 0, 127, 132, 3, 66, 33, 0, 128, 132, 3, 68, 34, 0, 129, 132, 3, 94, 47, 0, 130, 132, 3, 70, 35, 0, 131, 118, 1, 0, 0, 0, 131, 119, 1, 0, 0, 0, 131, 120, 1, 0, 0, 0, 131, 121, 1, 0, 0, 0, 131, 122, 1, 0, 0, 0, 131, 123, 1, 0, 0, 0, 131, 124, 1, 0, 0, 0, 131, 125, 1, 0, 0, 0, 131, 126, 1, 0, 0, 0, 131, 127, 1, 0, 0, 0, 131, 128, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 131, 130, 1, 0, 0, 0, 132, 7, 1, 0, 0, 0, 133, 134, 5, 18, 0, 0, 134, 135, 3, 10, 5, 0, 135, 9, 1, 0, 0, 0, 136, 137, 6, 5, -1, 0, 137, 138, 5, 44, 0, 0, 138, 165, 3, 10, 5, 7, 139, 165, 3, 14, 7, 0, 140, 165, 3, 12, 6, 0, 141, 143, 3, 14, 7, 0, 142, 144, 5, 44, 0, 0, 143, 142, 1, 0, 0, 0, 143, 144, 1, 0, 0, 0, 144, 145, 1, 0, 0, 0, 145, 146, 5, 41, 0, 0, 146, 147, 5, 40, 0, 0, 147, 152, 3, 14, 7, 0, 148, 149, 5, 34, 0, 0, 149, 151, 3, 14, 7, 0, 150, 148, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 152, 1, 0, 0, 0, 155, 156, 5, 50, 0, 0, 156, 165, 1, 0, 0, 0, 157, 158, 3, 14, 7, 0, 158, 160, 5, 42, 0, 0, 159, 161, 5, 44, 0, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 163, 5, 45, 0, 0, 163, 165, 1, 0, 0, 0, 164, 136, 1, 0, 0, 0, 164, 139, 1, 0, 0, 0, 164, 140, 1, 0, 0, 0, 164, 141, 1, 0, 0, 0, 164, 157, 1, 0, 0, 0, 165, 174, 1, 0, 0, 0, 166, 167, 10, 4, 0, 0, 167, 168, 5, 31, 0, 0, 168, 173, 3, 10, 5, 5, 169, 170, 10, 3, 0, 0, 170, 171, 5, 47, 0, 0, 171, 173, 3, 10, 5, 4, 172, 166, 1, 0, 0, 0, 172, 169, 1, 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 174, 175, 1, 0, 0, 0, 175, 11, 1, 0, 0, 0, 176, 174, 1, 0, 0, 0, 177, 179, 3, 14, 7, 0, 178, 180, 5, 44, 0, 0, 179, 178, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 5, 43, 0, 0, 182, 183, 3, 84, 42, 0, 183, 192, 1, 0, 0, 0, 184, 186, 3, 14, 7, 0, 185, 187, 5, 44, 0, 0, 186, 185, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 189, 5, 49, 0, 0, 189, 190, 3, 84, 42, 0, 190, 192, 1, 0, 0, 0, 191, 177, 1, 0, 0, 0, 191, 184, 1, 0, 0, 0, 192, 13, 1, 0, 0, 0, 193, 199, 3, 16, 8, 0, 194, 195, 3, 16, 8, 0, 195, 196, 3, 86, 43, 0, 196, 197, 3, 16, 8, 0, 197, 199, 1, 0, 0, 0, 198, 193, 1, 0, 0, 0, 198, 194, 1, 0, 0, 0, 199, 15, 1, 0, 0, 0, 200, 201, 6, 8, -1, 0, 201, 205, 3, 18, 9, 0, 202, 203, 7, 0, 0, 0, 203, 205, 3, 16, 8, 3, 204, 200, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 214, 1, 0, 0, 0, 206, 207, 10, 2, 0, 0, 207, 208, 7, 1, 0, 0, 208, 213, 3, 16, 8, 3, 209, 210, 10, 1, 0, 0, 210, 211, 7, 0, 0, 0, 211, 213, 3, 16, 8, 2, 212, 206, 1, 0, 0, 0, 212, 209, 1, 0, 0, 0, 213, 216, 1, 0, 0, 0, 214, 212, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 17, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 217, 225, 3, 50, 25, 0, 218, 225, 3, 42, 21, 0, 219, 225, 3, 20, 10, 0, 220, 221, 5, 40, 0, 0, 221, 222, 3, 10, 5, 0, 222, 223, 5, 50, 0, 0, 223, 225, 1, 0, 0, 0, 224, 217, 1, 0, 0, 0, 224, 218, 1, 0, 0, 0, 224, 219, 1, 0, 0, 0, 224, 220, 1, 0, 0, 0, 225, 19, 1, 0, 0, 0, 226, 227, 3, 46, 23, 0, 227, 237, 5, 40, 0, 0, 228, 238, 5, 60, 0, 0, 229, 234, 3, 10, 5, 0, 230, 231, 5, 34, 0, 0, 231, 233, 3, 10, 5, 0, 232, 230, 1, 0, 0, 0, 233, 236, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 238, 1, 0, 0, 0, 236, 234, 1, 0, 0, 0, 237, 228, 1, 0, 0, 0, 237, 229, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 240, 5, 50, 0, 0, 240, 21, 1, 0, 0, 0, 241, 242, 5, 14, 0, 0, 242, 243, 3, 24, 12, 0, 243, 23, 1, 0, 0, 0, 244, 249, 3, 26, 13, 0, 245, 246, 5, 34, 0, 0, 246, 248, 3, 26, 13, 0, 247, 245, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 25, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 258, 3, 10, 5, 0, 253, 254, 3, 42, 21, 0, 254, 255, 5, 33, 0, 0, 255, 256, 3, 10, 5, 0, 256, 258, 1, 0, 0, 0, 257, 252, 1, 0, 0, 0, 257, 253, 1, 0, 0, 0, 258, 27, 1, 0, 0, 0, 259, 260, 5, 6, 0, 0, 260, 265, 3, 40, 20, 0, 261, 262, 5, 34, 0, 0, 262, 264, 3, 40, 20, 0, 263, 261, 1, 0, 0, 0, 264, 267, 1, 0, 0, 0, 265, 263, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 269, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 268, 270, 3, 30, 15, 0, 269, 268, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 29, 1, 0, 0, 0, 271, 272, 5, 63, 0, 0, 272, 273, 5, 70, 0, 0, 273, 278, 3, 40, 20, 0, 274, 275, 5, 34, 0, 0, 275, 277, 3, 40, 20, 0, 276, 274, 1, 0, 0, 0, 277, 280, 1, 0, 0, 0, 278, 276, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 281, 1, 0, 0, 0, 280, 278, 1, 0, 0, 0, 281, 282, 5, 64, 0, 0, 282, 31, 1, 0, 0, 0, 283, 284, 5, 4, 0, 0, 284, 285, 3, 24, 12, 0, 285, 33, 1, 0, 0, 0, 286, 288, 5, 17, 0, 0, 287, 289, 3, 24, 12, 0, 288, 287, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 291, 5, 30, 0, 0, 291, 293, 3, 38, 19, 0, 292, 290, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 35, 1, 0, 0, 0, 294, 295, 5, 8, 0, 0, 295, 298, 3, 24, 12, 0, 296, 297, 5, 30, 0, 0, 297, 299, 3, 38, 19, 0, 298, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 37, 1, 0, 0, 0, 300, 305, 3, 42, 21, 0, 301, 302, 5, 34, 0, 0, 302, 304, 3, 42, 21, 0, 303, 301, 1, 0, 0, 0, 304, 307, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 39, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 308, 309, 7, 2, 0, 0, 309, 41, 1, 0, 0, 0, 310, 315, 3, 46, 23, 0, 311, 312, 5, 36, 0, 0, 312, 314, 3, 46, 23, 0, 313, 311, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 43, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 323, 3, 48, 24, 0, 319, 320, 5, 36, 0, 0, 320, 322, 3, 48, 24, 0, 321, 319, 1, 0, 0, 0, 322, 325, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 45, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 326, 327, 7, 3, 0, 0, 327, 47, 1, 0, 0, 0, 328, 329, 7, 4, 0, 0, 329, 49, 1, 0, 0, 0, 330, 373, 5, 45, 0, 0, 331, 332, 3, 82, 41, 0, 332, 333, 5, 65, 0, 0, 333, 373, 1, 0, 0, 0, 334, 373, 3, 80, 40, 0, 335, 373, 3, 82, 41, 0, 336, 373, 3, 76, 38, 0, 337, 373, 5, 48, 0, 0, 338, 373, 3, 84, 42, 0, 339, 340, 5, 63, 0, 0, 340, 345, 3, 78, 39, 0, 341, 342, 5, 34, 0, 0, 342, 344, 3, 78, 39, 0, 343, 341, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 349, 5, 64, 0, 0, 349, 373, 1, 0, 0, 0, 350, 351, 5, 63, 0, 0, 351, 356, 3, 76, 38, 0, 352, 353, 5, 34, 0, 0, 353, 355, 3, 76, 38, 0, 354, 352, 1, 0, 0, 0, 355, 358, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 359, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 359, 360, 5, 64, 0, 0, 360, 373, 1, 0, 0, 0, 361, 362, 5, 63, 0, 0, 362, 367, 3, 84, 42, 0, 363, 364, 5, 34, 0, 0, 364, 366, 3, 84, 42, 0, 365, 363, 1, 0, 0, 0, 366, 369, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 370, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 370, 371, 5, 64, 0, 0, 371, 373, 1, 0, 0, 0, 372, 330, 1, 0, 0, 0, 372, 331, 1, 0, 0, 0, 372, 334, 1, 0, 0, 0, 372, 335, 1, 0, 0, 0, 372, 336, 1, 0, 0, 0, 372, 337, 1, 0, 0, 0, 372, 338, 1, 0, 0, 0, 372, 339, 1, 0, 0, 0, 372, 350, 1, 0, 0, 0, 372, 361, 1, 0, 0, 0, 373, 51, 1, 0, 0, 0, 374, 375, 5, 10, 0, 0, 375, 376, 5, 28, 0, 0, 376, 53, 1, 0, 0, 0, 377, 378, 5, 16, 0, 0, 378, 383, 3, 56, 28, 0, 379, 380, 5, 34, 0, 0, 380, 382, 3, 56, 28, 0, 381, 379, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 55, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 388, 3, 10, 5, 0, 387, 389, 7, 5, 0, 0, 388, 387, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 392, 1, 0, 0, 0, 390, 391, 5, 46, 0, 0, 391, 393, 7, 6, 0, 0, 392, 390, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 57, 1, 0, 0, 0, 394, 395, 5, 9, 0, 0, 395, 400, 3, 44, 22, 0, 396, 397, 5, 34, 0, 0, 397, 399, 3, 44, 22, 0, 398, 396, 1, 0, 0, 0, 399, 402, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 413, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 403, 404, 5, 12, 0, 0, 404, 409, 3, 44, 22, 0, 405, 406, 5, 34, 0, 0, 406, 408, 3, 44, 22, 0, 407, 405, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 407, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 413, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 412, 394, 1, 0, 0, 0, 412, 403, 1, 0, 0, 0, 413, 59, 1, 0, 0, 0, 414, 415, 5, 2, 0, 0, 415, 420, 3, 44, 22, 0, 416, 417, 5, 34, 0, 0, 417, 419, 3, 44, 22, 0, 418, 416, 1, 0, 0, 0, 419, 422, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 61, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 423, 424, 5, 13, 0, 0, 424, 429, 3, 64, 32, 0, 425, 426, 5, 34, 0, 0, 426, 428, 3, 64, 32, 0, 427, 425, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 63, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 433, 3, 44, 22, 0, 433, 434, 5, 79, 0, 0, 434, 435, 3, 44, 22, 0, 435, 65, 1, 0, 0, 0, 436, 437, 5, 1, 0, 0, 437, 438, 3, 18, 9, 0, 438, 440, 3, 84, 42, 0, 439, 441, 3, 72, 36, 0, 440, 439, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 67, 1, 0, 0, 0, 442, 443, 5, 7, 0, 0, 443, 444, 3, 18, 9, 0, 444, 445, 3, 84, 42, 0, 445, 69, 1, 0, 0, 0, 446, 447, 5, 11, 0, 0, 447, 448, 3, 42, 21, 0, 448, 71, 1, 0, 0, 0, 449, 454, 3, 74, 37, 0, 450, 451, 5, 34, 0, 0, 451, 453, 3, 74, 37, 0, 452, 450, 1, 0, 0, 0, 453, 456, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 73, 1, 0, 0, 0, 456, 454, 1, 0, 0, 0, 457, 458, 3, 46, 23, 0, 458, 459, 5, 33, 0, 0, 459, 460, 3, 50, 25, 0, 460, 75, 1, 0, 0, 0, 461, 462, 7, 7, 0, 0, 462, 77, 1, 0, 0, 0, 463, 466, 3, 80, 40, 0, 464, 466, 3, 82, 41, 0, 465, 463, 1, 0, 0, 0, 465, 464, 1, 0, 0, 0, 466, 79, 1, 0, 0, 0, 467, 469, 7, 0, 0, 0, 468, 467, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 470, 1, 0, 0, 0, 470, 471, 5, 29, 0, 0, 471, 81, 1, 0, 0, 0, 472, 474, 7, 0, 0, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 476, 5, 28, 0, 0, 476, 83, 1, 0, 0, 0, 477, 478, 5, 27, 0, 0, 478, 85, 1, 0, 0, 0, 479, 480, 7, 8, 0, 0, 480, 87, 1, 0, 0, 0, 481, 482, 5, 5, 0, 0, 482, 483, 3, 90, 45, 0, 483, 89, 1, 0, 0, 0, 484, 485, 5, 63, 0, 0, 485, 486, 3, 2, 1, 0, 486, 487, 5, 64, 0, 0, 487, 91, 1, 0, 0, 0, 488, 489, 5, 15, 0, 0, 489, 493, 5, 94, 0, 0, 490, 491, 5, 15, 0, 0, 491, 493, 5, 95, 0, 0, 492, 488, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 493, 93, 1, 0, 0, 0, 494, 495, 5, 3, 0, 0, 495, 498, 3, 40, 20, 0, 496, 497, 5, 83, 0, 0, 497, 499, 3, 44, 22, 0, 498, 496, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 509, 1, 0, 0, 0, 500, 501, 5, 84, 0, 0, 501, 506, 3, 96, 48, 0, 502, 503, 5, 34, 0, 0, 503, 505, 3, 96, 48, 0, 504, 502, 1, 0, 0, 0, 505, 508, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 510, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 509, 500, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 95, 1, 0, 0, 0, 511, 512, 3, 44, 22, 0, 512, 513, 5, 33, 0, 0, 513, 515, 1, 0, 0, 0, 514, 511, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 3, 44, 22, 0, 517, 97, 1, 0, 0, 0, 52, 109, 116, 131, 143, 152, 160, 164, 172, 174, 179, 186, 191, 198, 204, 212, 214, 224, 234, 237, 249, 257, 265, 269, 278, 288, 292, 298, 305, 315, 323, 345, 356, 367, 372, 383, 388, 392, 400, 409, 412, 420, 429, 440, 454, 465, 468, 473, 492, 498, 506, 509, 514] \ No newline at end of file diff --git a/packages/kbn-esql/src/antlr/.antlr/esql_parser.java b/packages/kbn-esql/src/antlr/.antlr/esql_parser.java new file mode 100644 index 0000000000000..c784cc891d6a0 --- /dev/null +++ b/packages/kbn-esql/src/antlr/.antlr/esql_parser.java @@ -0,0 +1,3914 @@ +// Generated from /Users/marcoliberati/Work/kibana/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class esql_parser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + DISSECT=1, DROP=2, ENRICH=3, EVAL=4, EXPLAIN=5, FROM=6, GROK=7, INLINESTATS=8, + KEEP=9, LIMIT=10, MV_EXPAND=11, PROJECT=12, RENAME=13, ROW=14, SHOW=15, + SORT=16, STATS=17, WHERE=18, UNKNOWN_CMD=19, LINE_COMMENT=20, MULTILINE_COMMENT=21, + WS=22, EXPLAIN_WS=23, EXPLAIN_LINE_COMMENT=24, EXPLAIN_MULTILINE_COMMENT=25, + PIPE=26, STRING=27, INTEGER_LITERAL=28, DECIMAL_LITERAL=29, BY=30, AND=31, + ASC=32, ASSIGN=33, COMMA=34, DESC=35, DOT=36, FALSE=37, FIRST=38, LAST=39, + LP=40, IN=41, IS=42, LIKE=43, NOT=44, NULL=45, NULLS=46, OR=47, PARAM=48, + RLIKE=49, RP=50, TRUE=51, EQ=52, NEQ=53, LT=54, LTE=55, GT=56, GTE=57, + PLUS=58, MINUS=59, ASTERISK=60, SLASH=61, PERCENT=62, OPENING_BRACKET=63, + CLOSING_BRACKET=64, UNQUOTED_IDENTIFIER=65, QUOTED_IDENTIFIER=66, EXPR_LINE_COMMENT=67, + EXPR_MULTILINE_COMMENT=68, EXPR_WS=69, METADATA=70, FROM_UNQUOTED_IDENTIFIER=71, + FROM_LINE_COMMENT=72, FROM_MULTILINE_COMMENT=73, FROM_WS=74, PROJECT_UNQUOTED_IDENTIFIER=75, + PROJECT_LINE_COMMENT=76, PROJECT_MULTILINE_COMMENT=77, PROJECT_WS=78, + AS=79, RENAME_LINE_COMMENT=80, RENAME_MULTILINE_COMMENT=81, RENAME_WS=82, + ON=83, WITH=84, ENRICH_LINE_COMMENT=85, ENRICH_MULTILINE_COMMENT=86, ENRICH_WS=87, + ENRICH_FIELD_LINE_COMMENT=88, ENRICH_FIELD_MULTILINE_COMMENT=89, ENRICH_FIELD_WS=90, + MVEXPAND_LINE_COMMENT=91, MVEXPAND_MULTILINE_COMMENT=92, MVEXPAND_WS=93, + INFO=94, FUNCTIONS=95, SHOW_LINE_COMMENT=96, SHOW_MULTILINE_COMMENT=97, + SHOW_WS=98; + public static final int + RULE_singleStatement = 0, RULE_query = 1, RULE_sourceCommand = 2, RULE_processingCommand = 3, + RULE_whereCommand = 4, RULE_booleanExpression = 5, RULE_regexBooleanExpression = 6, + RULE_valueExpression = 7, RULE_operatorExpression = 8, RULE_primaryExpression = 9, + RULE_functionExpression = 10, RULE_rowCommand = 11, RULE_fields = 12, + RULE_field = 13, RULE_fromCommand = 14, RULE_metadata = 15, RULE_evalCommand = 16, + RULE_statsCommand = 17, RULE_inlinestatsCommand = 18, RULE_grouping = 19, + RULE_fromIdentifier = 20, RULE_qualifiedName = 21, RULE_qualifiedNamePattern = 22, + RULE_identifier = 23, RULE_identifierPattern = 24, RULE_constant = 25, + RULE_limitCommand = 26, RULE_sortCommand = 27, RULE_orderExpression = 28, + RULE_keepCommand = 29, RULE_dropCommand = 30, RULE_renameCommand = 31, + RULE_renameClause = 32, RULE_dissectCommand = 33, RULE_grokCommand = 34, + RULE_mvExpandCommand = 35, RULE_commandOptions = 36, RULE_commandOption = 37, + RULE_booleanValue = 38, RULE_numericValue = 39, RULE_decimalValue = 40, + RULE_integerValue = 41, RULE_string = 42, RULE_comparisonOperator = 43, + RULE_explainCommand = 44, RULE_subqueryExpression = 45, RULE_showCommand = 46, + RULE_enrichCommand = 47, RULE_enrichWithClause = 48; + private static String[] makeRuleNames() { + return new String[] { + "singleStatement", "query", "sourceCommand", "processingCommand", "whereCommand", + "booleanExpression", "regexBooleanExpression", "valueExpression", "operatorExpression", + "primaryExpression", "functionExpression", "rowCommand", "fields", "field", + "fromCommand", "metadata", "evalCommand", "statsCommand", "inlinestatsCommand", + "grouping", "fromIdentifier", "qualifiedName", "qualifiedNamePattern", + "identifier", "identifierPattern", "constant", "limitCommand", "sortCommand", + "orderExpression", "keepCommand", "dropCommand", "renameCommand", "renameClause", + "dissectCommand", "grokCommand", "mvExpandCommand", "commandOptions", + "commandOption", "booleanValue", "numericValue", "decimalValue", "integerValue", + "string", "comparisonOperator", "explainCommand", "subqueryExpression", + "showCommand", "enrichCommand", "enrichWithClause" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, "'|'", null, null, null, null, null, null, "'='", "','", + null, "'.'", null, null, null, "'('", null, null, null, null, null, null, + null, "'?'", null, "')'", null, "'=='", "'!='", "'<'", "'<='", "'>'", + "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", null, "']'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "DISSECT", "DROP", "ENRICH", "EVAL", "EXPLAIN", "FROM", "GROK", + "INLINESTATS", "KEEP", "LIMIT", "MV_EXPAND", "PROJECT", "RENAME", "ROW", + "SHOW", "SORT", "STATS", "WHERE", "UNKNOWN_CMD", "LINE_COMMENT", "MULTILINE_COMMENT", + "WS", "EXPLAIN_WS", "EXPLAIN_LINE_COMMENT", "EXPLAIN_MULTILINE_COMMENT", + "PIPE", "STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", "BY", "AND", + "ASC", "ASSIGN", "COMMA", "DESC", "DOT", "FALSE", "FIRST", "LAST", "LP", + "IN", "IS", "LIKE", "NOT", "NULL", "NULLS", "OR", "PARAM", "RLIKE", "RP", + "TRUE", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", "OPENING_BRACKET", "CLOSING_BRACKET", "UNQUOTED_IDENTIFIER", + "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", "EXPR_WS", + "METADATA", "FROM_UNQUOTED_IDENTIFIER", "FROM_LINE_COMMENT", "FROM_MULTILINE_COMMENT", + "FROM_WS", "PROJECT_UNQUOTED_IDENTIFIER", "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", + "PROJECT_WS", "AS", "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", + "RENAME_WS", "ON", "WITH", "ENRICH_LINE_COMMENT", "ENRICH_MULTILINE_COMMENT", + "ENRICH_WS", "ENRICH_FIELD_LINE_COMMENT", "ENRICH_FIELD_MULTILINE_COMMENT", + "ENRICH_FIELD_WS", "MVEXPAND_LINE_COMMENT", "MVEXPAND_MULTILINE_COMMENT", + "MVEXPAND_WS", "INFO", "FUNCTIONS", "SHOW_LINE_COMMENT", "SHOW_MULTILINE_COMMENT", + "SHOW_WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "esql_parser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public esql_parser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class SingleStatementContext extends ParserRuleContext { + public QueryContext query() { + return getRuleContext(QueryContext.class,0); + } + public TerminalNode EOF() { return getToken(esql_parser.EOF, 0); } + public SingleStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_singleStatement; } + } + + public final SingleStatementContext singleStatement() throws RecognitionException { + SingleStatementContext _localctx = new SingleStatementContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_singleStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(98); + query(0); + setState(99); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class QueryContext extends ParserRuleContext { + public QueryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_query; } + + public QueryContext() { } + public void copyFrom(QueryContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class CompositeQueryContext extends QueryContext { + public QueryContext query() { + return getRuleContext(QueryContext.class,0); + } + public TerminalNode PIPE() { return getToken(esql_parser.PIPE, 0); } + public ProcessingCommandContext processingCommand() { + return getRuleContext(ProcessingCommandContext.class,0); + } + public CompositeQueryContext(QueryContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class SingleCommandQueryContext extends QueryContext { + public SourceCommandContext sourceCommand() { + return getRuleContext(SourceCommandContext.class,0); + } + public SingleCommandQueryContext(QueryContext ctx) { copyFrom(ctx); } + } + + public final QueryContext query() throws RecognitionException { + return query(0); + } + + private QueryContext query(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + QueryContext _localctx = new QueryContext(_ctx, _parentState); + QueryContext _prevctx = _localctx; + int _startState = 2; + enterRecursionRule(_localctx, 2, RULE_query, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new SingleCommandQueryContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(102); + sourceCommand(); + } + _ctx.stop = _input.LT(-1); + setState(109); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,0,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new CompositeQueryContext(new QueryContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_query); + setState(104); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(105); + match(PIPE); + setState(106); + processingCommand(); + } + } + } + setState(111); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,0,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SourceCommandContext extends ParserRuleContext { + public ExplainCommandContext explainCommand() { + return getRuleContext(ExplainCommandContext.class,0); + } + public FromCommandContext fromCommand() { + return getRuleContext(FromCommandContext.class,0); + } + public RowCommandContext rowCommand() { + return getRuleContext(RowCommandContext.class,0); + } + public ShowCommandContext showCommand() { + return getRuleContext(ShowCommandContext.class,0); + } + public SourceCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_sourceCommand; } + } + + public final SourceCommandContext sourceCommand() throws RecognitionException { + SourceCommandContext _localctx = new SourceCommandContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_sourceCommand); + try { + setState(116); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EXPLAIN: + enterOuterAlt(_localctx, 1); + { + setState(112); + explainCommand(); + } + break; + case FROM: + enterOuterAlt(_localctx, 2); + { + setState(113); + fromCommand(); + } + break; + case ROW: + enterOuterAlt(_localctx, 3); + { + setState(114); + rowCommand(); + } + break; + case SHOW: + enterOuterAlt(_localctx, 4); + { + setState(115); + showCommand(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ProcessingCommandContext extends ParserRuleContext { + public EvalCommandContext evalCommand() { + return getRuleContext(EvalCommandContext.class,0); + } + public InlinestatsCommandContext inlinestatsCommand() { + return getRuleContext(InlinestatsCommandContext.class,0); + } + public LimitCommandContext limitCommand() { + return getRuleContext(LimitCommandContext.class,0); + } + public KeepCommandContext keepCommand() { + return getRuleContext(KeepCommandContext.class,0); + } + public SortCommandContext sortCommand() { + return getRuleContext(SortCommandContext.class,0); + } + public StatsCommandContext statsCommand() { + return getRuleContext(StatsCommandContext.class,0); + } + public WhereCommandContext whereCommand() { + return getRuleContext(WhereCommandContext.class,0); + } + public DropCommandContext dropCommand() { + return getRuleContext(DropCommandContext.class,0); + } + public RenameCommandContext renameCommand() { + return getRuleContext(RenameCommandContext.class,0); + } + public DissectCommandContext dissectCommand() { + return getRuleContext(DissectCommandContext.class,0); + } + public GrokCommandContext grokCommand() { + return getRuleContext(GrokCommandContext.class,0); + } + public EnrichCommandContext enrichCommand() { + return getRuleContext(EnrichCommandContext.class,0); + } + public MvExpandCommandContext mvExpandCommand() { + return getRuleContext(MvExpandCommandContext.class,0); + } + public ProcessingCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_processingCommand; } + } + + public final ProcessingCommandContext processingCommand() throws RecognitionException { + ProcessingCommandContext _localctx = new ProcessingCommandContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_processingCommand); + try { + setState(131); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EVAL: + enterOuterAlt(_localctx, 1); + { + setState(118); + evalCommand(); + } + break; + case INLINESTATS: + enterOuterAlt(_localctx, 2); + { + setState(119); + inlinestatsCommand(); + } + break; + case LIMIT: + enterOuterAlt(_localctx, 3); + { + setState(120); + limitCommand(); + } + break; + case KEEP: + case PROJECT: + enterOuterAlt(_localctx, 4); + { + setState(121); + keepCommand(); + } + break; + case SORT: + enterOuterAlt(_localctx, 5); + { + setState(122); + sortCommand(); + } + break; + case STATS: + enterOuterAlt(_localctx, 6); + { + setState(123); + statsCommand(); + } + break; + case WHERE: + enterOuterAlt(_localctx, 7); + { + setState(124); + whereCommand(); + } + break; + case DROP: + enterOuterAlt(_localctx, 8); + { + setState(125); + dropCommand(); + } + break; + case RENAME: + enterOuterAlt(_localctx, 9); + { + setState(126); + renameCommand(); + } + break; + case DISSECT: + enterOuterAlt(_localctx, 10); + { + setState(127); + dissectCommand(); + } + break; + case GROK: + enterOuterAlt(_localctx, 11); + { + setState(128); + grokCommand(); + } + break; + case ENRICH: + enterOuterAlt(_localctx, 12); + { + setState(129); + enrichCommand(); + } + break; + case MV_EXPAND: + enterOuterAlt(_localctx, 13); + { + setState(130); + mvExpandCommand(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class WhereCommandContext extends ParserRuleContext { + public TerminalNode WHERE() { return getToken(esql_parser.WHERE, 0); } + public BooleanExpressionContext booleanExpression() { + return getRuleContext(BooleanExpressionContext.class,0); + } + public WhereCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whereCommand; } + } + + public final WhereCommandContext whereCommand() throws RecognitionException { + WhereCommandContext _localctx = new WhereCommandContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_whereCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(133); + match(WHERE); + setState(134); + booleanExpression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BooleanExpressionContext extends ParserRuleContext { + public BooleanExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_booleanExpression; } + + public BooleanExpressionContext() { } + public void copyFrom(BooleanExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LogicalNotContext extends BooleanExpressionContext { + public TerminalNode NOT() { return getToken(esql_parser.NOT, 0); } + public BooleanExpressionContext booleanExpression() { + return getRuleContext(BooleanExpressionContext.class,0); + } + public LogicalNotContext(BooleanExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class BooleanDefaultContext extends BooleanExpressionContext { + public ValueExpressionContext valueExpression() { + return getRuleContext(ValueExpressionContext.class,0); + } + public BooleanDefaultContext(BooleanExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class IsNullContext extends BooleanExpressionContext { + public ValueExpressionContext valueExpression() { + return getRuleContext(ValueExpressionContext.class,0); + } + public TerminalNode IS() { return getToken(esql_parser.IS, 0); } + public TerminalNode NULL() { return getToken(esql_parser.NULL, 0); } + public TerminalNode NOT() { return getToken(esql_parser.NOT, 0); } + public IsNullContext(BooleanExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class RegexExpressionContext extends BooleanExpressionContext { + public RegexBooleanExpressionContext regexBooleanExpression() { + return getRuleContext(RegexBooleanExpressionContext.class,0); + } + public RegexExpressionContext(BooleanExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class LogicalInContext extends BooleanExpressionContext { + public List valueExpression() { + return getRuleContexts(ValueExpressionContext.class); + } + public ValueExpressionContext valueExpression(int i) { + return getRuleContext(ValueExpressionContext.class,i); + } + public TerminalNode IN() { return getToken(esql_parser.IN, 0); } + public TerminalNode LP() { return getToken(esql_parser.LP, 0); } + public TerminalNode RP() { return getToken(esql_parser.RP, 0); } + public TerminalNode NOT() { return getToken(esql_parser.NOT, 0); } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public LogicalInContext(BooleanExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class LogicalBinaryContext extends BooleanExpressionContext { + public BooleanExpressionContext left; + public Token operator; + public BooleanExpressionContext right; + public List booleanExpression() { + return getRuleContexts(BooleanExpressionContext.class); + } + public BooleanExpressionContext booleanExpression(int i) { + return getRuleContext(BooleanExpressionContext.class,i); + } + public TerminalNode AND() { return getToken(esql_parser.AND, 0); } + public TerminalNode OR() { return getToken(esql_parser.OR, 0); } + public LogicalBinaryContext(BooleanExpressionContext ctx) { copyFrom(ctx); } + } + + public final BooleanExpressionContext booleanExpression() throws RecognitionException { + return booleanExpression(0); + } + + private BooleanExpressionContext booleanExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + BooleanExpressionContext _localctx = new BooleanExpressionContext(_ctx, _parentState); + BooleanExpressionContext _prevctx = _localctx; + int _startState = 10; + enterRecursionRule(_localctx, 10, RULE_booleanExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(164); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { + case 1: + { + _localctx = new LogicalNotContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(137); + match(NOT); + setState(138); + booleanExpression(7); + } + break; + case 2: + { + _localctx = new BooleanDefaultContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(139); + valueExpression(); + } + break; + case 3: + { + _localctx = new RegexExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(140); + regexBooleanExpression(); + } + break; + case 4: + { + _localctx = new LogicalInContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(141); + valueExpression(); + setState(143); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(142); + match(NOT); + } + } + + setState(145); + match(IN); + setState(146); + match(LP); + setState(147); + valueExpression(); + setState(152); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(148); + match(COMMA); + setState(149); + valueExpression(); + } + } + setState(154); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(155); + match(RP); + } + break; + case 5: + { + _localctx = new IsNullContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(157); + valueExpression(); + setState(158); + match(IS); + setState(160); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(159); + match(NOT); + } + } + + setState(162); + match(NULL); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(174); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,8,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(172); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { + case 1: + { + _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); + ((LogicalBinaryContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression); + setState(166); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(167); + ((LogicalBinaryContext)_localctx).operator = match(AND); + setState(168); + ((LogicalBinaryContext)_localctx).right = booleanExpression(5); + } + break; + case 2: + { + _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); + ((LogicalBinaryContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression); + setState(169); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(170); + ((LogicalBinaryContext)_localctx).operator = match(OR); + setState(171); + ((LogicalBinaryContext)_localctx).right = booleanExpression(4); + } + break; + } + } + } + setState(176); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,8,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RegexBooleanExpressionContext extends ParserRuleContext { + public Token kind; + public StringContext pattern; + public ValueExpressionContext valueExpression() { + return getRuleContext(ValueExpressionContext.class,0); + } + public TerminalNode LIKE() { return getToken(esql_parser.LIKE, 0); } + public StringContext string() { + return getRuleContext(StringContext.class,0); + } + public TerminalNode NOT() { return getToken(esql_parser.NOT, 0); } + public TerminalNode RLIKE() { return getToken(esql_parser.RLIKE, 0); } + public RegexBooleanExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_regexBooleanExpression; } + } + + public final RegexBooleanExpressionContext regexBooleanExpression() throws RecognitionException { + RegexBooleanExpressionContext _localctx = new RegexBooleanExpressionContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_regexBooleanExpression); + int _la; + try { + setState(191); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(177); + valueExpression(); + setState(179); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(178); + match(NOT); + } + } + + setState(181); + ((RegexBooleanExpressionContext)_localctx).kind = match(LIKE); + setState(182); + ((RegexBooleanExpressionContext)_localctx).pattern = string(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(184); + valueExpression(); + setState(186); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(185); + match(NOT); + } + } + + setState(188); + ((RegexBooleanExpressionContext)_localctx).kind = match(RLIKE); + setState(189); + ((RegexBooleanExpressionContext)_localctx).pattern = string(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ValueExpressionContext extends ParserRuleContext { + public ValueExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_valueExpression; } + + public ValueExpressionContext() { } + public void copyFrom(ValueExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ValueExpressionDefaultContext extends ValueExpressionContext { + public OperatorExpressionContext operatorExpression() { + return getRuleContext(OperatorExpressionContext.class,0); + } + public ValueExpressionDefaultContext(ValueExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ComparisonContext extends ValueExpressionContext { + public OperatorExpressionContext left; + public OperatorExpressionContext right; + public ComparisonOperatorContext comparisonOperator() { + return getRuleContext(ComparisonOperatorContext.class,0); + } + public List operatorExpression() { + return getRuleContexts(OperatorExpressionContext.class); + } + public OperatorExpressionContext operatorExpression(int i) { + return getRuleContext(OperatorExpressionContext.class,i); + } + public ComparisonContext(ValueExpressionContext ctx) { copyFrom(ctx); } + } + + public final ValueExpressionContext valueExpression() throws RecognitionException { + ValueExpressionContext _localctx = new ValueExpressionContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_valueExpression); + try { + setState(198); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { + case 1: + _localctx = new ValueExpressionDefaultContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(193); + operatorExpression(0); + } + break; + case 2: + _localctx = new ComparisonContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(194); + ((ComparisonContext)_localctx).left = operatorExpression(0); + setState(195); + comparisonOperator(); + setState(196); + ((ComparisonContext)_localctx).right = operatorExpression(0); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperatorExpressionContext extends ParserRuleContext { + public OperatorExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operatorExpression; } + + public OperatorExpressionContext() { } + public void copyFrom(OperatorExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OperatorExpressionDefaultContext extends OperatorExpressionContext { + public PrimaryExpressionContext primaryExpression() { + return getRuleContext(PrimaryExpressionContext.class,0); + } + public OperatorExpressionDefaultContext(OperatorExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ArithmeticBinaryContext extends OperatorExpressionContext { + public OperatorExpressionContext left; + public Token operator; + public OperatorExpressionContext right; + public List operatorExpression() { + return getRuleContexts(OperatorExpressionContext.class); + } + public OperatorExpressionContext operatorExpression(int i) { + return getRuleContext(OperatorExpressionContext.class,i); + } + public TerminalNode ASTERISK() { return getToken(esql_parser.ASTERISK, 0); } + public TerminalNode SLASH() { return getToken(esql_parser.SLASH, 0); } + public TerminalNode PERCENT() { return getToken(esql_parser.PERCENT, 0); } + public TerminalNode PLUS() { return getToken(esql_parser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(esql_parser.MINUS, 0); } + public ArithmeticBinaryContext(OperatorExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ArithmeticUnaryContext extends OperatorExpressionContext { + public Token operator; + public OperatorExpressionContext operatorExpression() { + return getRuleContext(OperatorExpressionContext.class,0); + } + public TerminalNode MINUS() { return getToken(esql_parser.MINUS, 0); } + public TerminalNode PLUS() { return getToken(esql_parser.PLUS, 0); } + public ArithmeticUnaryContext(OperatorExpressionContext ctx) { copyFrom(ctx); } + } + + public final OperatorExpressionContext operatorExpression() throws RecognitionException { + return operatorExpression(0); + } + + private OperatorExpressionContext operatorExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + OperatorExpressionContext _localctx = new OperatorExpressionContext(_ctx, _parentState); + OperatorExpressionContext _prevctx = _localctx; + int _startState = 16; + enterRecursionRule(_localctx, 16, RULE_operatorExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(204); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + case 1: + { + _localctx = new OperatorExpressionDefaultContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(201); + primaryExpression(); + } + break; + case 2: + { + _localctx = new ArithmeticUnaryContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(202); + ((ArithmeticUnaryContext)_localctx).operator = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==PLUS || _la==MINUS) ) { + ((ArithmeticUnaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(203); + operatorExpression(3); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(214); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(212); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + case 1: + { + _localctx = new ArithmeticBinaryContext(new OperatorExpressionContext(_parentctx, _parentState)); + ((ArithmeticBinaryContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_operatorExpression); + setState(206); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(207); + ((ArithmeticBinaryContext)_localctx).operator = _input.LT(1); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8070450532247928832L) != 0)) ) { + ((ArithmeticBinaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(208); + ((ArithmeticBinaryContext)_localctx).right = operatorExpression(3); + } + break; + case 2: + { + _localctx = new ArithmeticBinaryContext(new OperatorExpressionContext(_parentctx, _parentState)); + ((ArithmeticBinaryContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_operatorExpression); + setState(209); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(210); + ((ArithmeticBinaryContext)_localctx).operator = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==PLUS || _la==MINUS) ) { + ((ArithmeticBinaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(211); + ((ArithmeticBinaryContext)_localctx).right = operatorExpression(2); + } + break; + } + } + } + setState(216); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PrimaryExpressionContext extends ParserRuleContext { + public PrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_primaryExpression; } + + public PrimaryExpressionContext() { } + public void copyFrom(PrimaryExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DereferenceContext extends PrimaryExpressionContext { + public QualifiedNameContext qualifiedName() { + return getRuleContext(QualifiedNameContext.class,0); + } + public DereferenceContext(PrimaryExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ConstantDefaultContext extends PrimaryExpressionContext { + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public ConstantDefaultContext(PrimaryExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ParenthesizedExpressionContext extends PrimaryExpressionContext { + public TerminalNode LP() { return getToken(esql_parser.LP, 0); } + public BooleanExpressionContext booleanExpression() { + return getRuleContext(BooleanExpressionContext.class,0); + } + public TerminalNode RP() { return getToken(esql_parser.RP, 0); } + public ParenthesizedExpressionContext(PrimaryExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class FunctionContext extends PrimaryExpressionContext { + public FunctionExpressionContext functionExpression() { + return getRuleContext(FunctionExpressionContext.class,0); + } + public FunctionContext(PrimaryExpressionContext ctx) { copyFrom(ctx); } + } + + public final PrimaryExpressionContext primaryExpression() throws RecognitionException { + PrimaryExpressionContext _localctx = new PrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_primaryExpression); + try { + setState(224); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { + case 1: + _localctx = new ConstantDefaultContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(217); + constant(); + } + break; + case 2: + _localctx = new DereferenceContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(218); + qualifiedName(); + } + break; + case 3: + _localctx = new FunctionContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(219); + functionExpression(); + } + break; + case 4: + _localctx = new ParenthesizedExpressionContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(220); + match(LP); + setState(221); + booleanExpression(0); + setState(222); + match(RP); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionExpressionContext extends ParserRuleContext { + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public TerminalNode LP() { return getToken(esql_parser.LP, 0); } + public TerminalNode RP() { return getToken(esql_parser.RP, 0); } + public TerminalNode ASTERISK() { return getToken(esql_parser.ASTERISK, 0); } + public List booleanExpression() { + return getRuleContexts(BooleanExpressionContext.class); + } + public BooleanExpressionContext booleanExpression(int i) { + return getRuleContext(BooleanExpressionContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public FunctionExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionExpression; } + } + + public final FunctionExpressionContext functionExpression() throws RecognitionException { + FunctionExpressionContext _localctx = new FunctionExpressionContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_functionExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(226); + identifier(); + setState(227); + match(LP); + setState(237); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ASTERISK: + { + setState(228); + match(ASTERISK); + } + break; + case STRING: + case INTEGER_LITERAL: + case DECIMAL_LITERAL: + case FALSE: + case LP: + case NOT: + case NULL: + case PARAM: + case TRUE: + case PLUS: + case MINUS: + case OPENING_BRACKET: + case UNQUOTED_IDENTIFIER: + case QUOTED_IDENTIFIER: + { + { + setState(229); + booleanExpression(0); + setState(234); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(230); + match(COMMA); + setState(231); + booleanExpression(0); + } + } + setState(236); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + break; + case RP: + break; + default: + break; + } + setState(239); + match(RP); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RowCommandContext extends ParserRuleContext { + public TerminalNode ROW() { return getToken(esql_parser.ROW, 0); } + public FieldsContext fields() { + return getRuleContext(FieldsContext.class,0); + } + public RowCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_rowCommand; } + } + + public final RowCommandContext rowCommand() throws RecognitionException { + RowCommandContext _localctx = new RowCommandContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_rowCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(241); + match(ROW); + setState(242); + fields(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FieldsContext extends ParserRuleContext { + public List field() { + return getRuleContexts(FieldContext.class); + } + public FieldContext field(int i) { + return getRuleContext(FieldContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public FieldsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fields; } + } + + public final FieldsContext fields() throws RecognitionException { + FieldsContext _localctx = new FieldsContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_fields); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(244); + field(); + setState(249); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,19,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(245); + match(COMMA); + setState(246); + field(); + } + } + } + setState(251); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,19,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FieldContext extends ParserRuleContext { + public BooleanExpressionContext booleanExpression() { + return getRuleContext(BooleanExpressionContext.class,0); + } + public QualifiedNameContext qualifiedName() { + return getRuleContext(QualifiedNameContext.class,0); + } + public TerminalNode ASSIGN() { return getToken(esql_parser.ASSIGN, 0); } + public FieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_field; } + } + + public final FieldContext field() throws RecognitionException { + FieldContext _localctx = new FieldContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_field); + try { + setState(257); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(252); + booleanExpression(0); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(253); + qualifiedName(); + setState(254); + match(ASSIGN); + setState(255); + booleanExpression(0); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FromCommandContext extends ParserRuleContext { + public TerminalNode FROM() { return getToken(esql_parser.FROM, 0); } + public List fromIdentifier() { + return getRuleContexts(FromIdentifierContext.class); + } + public FromIdentifierContext fromIdentifier(int i) { + return getRuleContext(FromIdentifierContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public MetadataContext metadata() { + return getRuleContext(MetadataContext.class,0); + } + public FromCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fromCommand; } + } + + public final FromCommandContext fromCommand() throws RecognitionException { + FromCommandContext _localctx = new FromCommandContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_fromCommand); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(259); + match(FROM); + setState(260); + fromIdentifier(); + setState(265); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,21,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(261); + match(COMMA); + setState(262); + fromIdentifier(); + } + } + } + setState(267); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,21,_ctx); + } + setState(269); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { + case 1: + { + setState(268); + metadata(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MetadataContext extends ParserRuleContext { + public TerminalNode OPENING_BRACKET() { return getToken(esql_parser.OPENING_BRACKET, 0); } + public TerminalNode METADATA() { return getToken(esql_parser.METADATA, 0); } + public List fromIdentifier() { + return getRuleContexts(FromIdentifierContext.class); + } + public FromIdentifierContext fromIdentifier(int i) { + return getRuleContext(FromIdentifierContext.class,i); + } + public TerminalNode CLOSING_BRACKET() { return getToken(esql_parser.CLOSING_BRACKET, 0); } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public MetadataContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_metadata; } + } + + public final MetadataContext metadata() throws RecognitionException { + MetadataContext _localctx = new MetadataContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_metadata); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(271); + match(OPENING_BRACKET); + setState(272); + match(METADATA); + setState(273); + fromIdentifier(); + setState(278); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(274); + match(COMMA); + setState(275); + fromIdentifier(); + } + } + setState(280); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(281); + match(CLOSING_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EvalCommandContext extends ParserRuleContext { + public TerminalNode EVAL() { return getToken(esql_parser.EVAL, 0); } + public FieldsContext fields() { + return getRuleContext(FieldsContext.class,0); + } + public EvalCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_evalCommand; } + } + + public final EvalCommandContext evalCommand() throws RecognitionException { + EvalCommandContext _localctx = new EvalCommandContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_evalCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(283); + match(EVAL); + setState(284); + fields(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StatsCommandContext extends ParserRuleContext { + public TerminalNode STATS() { return getToken(esql_parser.STATS, 0); } + public FieldsContext fields() { + return getRuleContext(FieldsContext.class,0); + } + public TerminalNode BY() { return getToken(esql_parser.BY, 0); } + public GroupingContext grouping() { + return getRuleContext(GroupingContext.class,0); + } + public StatsCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statsCommand; } + } + + public final StatsCommandContext statsCommand() throws RecognitionException { + StatsCommandContext _localctx = new StatsCommandContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_statsCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(286); + match(STATS); + setState(288); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { + case 1: + { + setState(287); + fields(); + } + break; + } + setState(292); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) { + case 1: + { + setState(290); + match(BY); + setState(291); + grouping(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class InlinestatsCommandContext extends ParserRuleContext { + public TerminalNode INLINESTATS() { return getToken(esql_parser.INLINESTATS, 0); } + public FieldsContext fields() { + return getRuleContext(FieldsContext.class,0); + } + public TerminalNode BY() { return getToken(esql_parser.BY, 0); } + public GroupingContext grouping() { + return getRuleContext(GroupingContext.class,0); + } + public InlinestatsCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inlinestatsCommand; } + } + + public final InlinestatsCommandContext inlinestatsCommand() throws RecognitionException { + InlinestatsCommandContext _localctx = new InlinestatsCommandContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_inlinestatsCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(294); + match(INLINESTATS); + setState(295); + fields(); + setState(298); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { + case 1: + { + setState(296); + match(BY); + setState(297); + grouping(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GroupingContext extends ParserRuleContext { + public List qualifiedName() { + return getRuleContexts(QualifiedNameContext.class); + } + public QualifiedNameContext qualifiedName(int i) { + return getRuleContext(QualifiedNameContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public GroupingContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_grouping; } + } + + public final GroupingContext grouping() throws RecognitionException { + GroupingContext _localctx = new GroupingContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_grouping); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(300); + qualifiedName(); + setState(305); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,27,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(301); + match(COMMA); + setState(302); + qualifiedName(); + } + } + } + setState(307); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,27,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FromIdentifierContext extends ParserRuleContext { + public TerminalNode FROM_UNQUOTED_IDENTIFIER() { return getToken(esql_parser.FROM_UNQUOTED_IDENTIFIER, 0); } + public TerminalNode QUOTED_IDENTIFIER() { return getToken(esql_parser.QUOTED_IDENTIFIER, 0); } + public FromIdentifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fromIdentifier; } + } + + public final FromIdentifierContext fromIdentifier() throws RecognitionException { + FromIdentifierContext _localctx = new FromIdentifierContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_fromIdentifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(308); + _la = _input.LA(1); + if ( !(_la==QUOTED_IDENTIFIER || _la==FROM_UNQUOTED_IDENTIFIER) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class QualifiedNameContext extends ParserRuleContext { + public List identifier() { + return getRuleContexts(IdentifierContext.class); + } + public IdentifierContext identifier(int i) { + return getRuleContext(IdentifierContext.class,i); + } + public List DOT() { return getTokens(esql_parser.DOT); } + public TerminalNode DOT(int i) { + return getToken(esql_parser.DOT, i); + } + public QualifiedNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_qualifiedName; } + } + + public final QualifiedNameContext qualifiedName() throws RecognitionException { + QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_qualifiedName); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(310); + identifier(); + setState(315); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,28,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(311); + match(DOT); + setState(312); + identifier(); + } + } + } + setState(317); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,28,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class QualifiedNamePatternContext extends ParserRuleContext { + public List identifierPattern() { + return getRuleContexts(IdentifierPatternContext.class); + } + public IdentifierPatternContext identifierPattern(int i) { + return getRuleContext(IdentifierPatternContext.class,i); + } + public List DOT() { return getTokens(esql_parser.DOT); } + public TerminalNode DOT(int i) { + return getToken(esql_parser.DOT, i); + } + public QualifiedNamePatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_qualifiedNamePattern; } + } + + public final QualifiedNamePatternContext qualifiedNamePattern() throws RecognitionException { + QualifiedNamePatternContext _localctx = new QualifiedNamePatternContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_qualifiedNamePattern); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(318); + identifierPattern(); + setState(323); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(319); + match(DOT); + setState(320); + identifierPattern(); + } + } + } + setState(325); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdentifierContext extends ParserRuleContext { + public TerminalNode UNQUOTED_IDENTIFIER() { return getToken(esql_parser.UNQUOTED_IDENTIFIER, 0); } + public TerminalNode QUOTED_IDENTIFIER() { return getToken(esql_parser.QUOTED_IDENTIFIER, 0); } + public IdentifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identifier; } + } + + public final IdentifierContext identifier() throws RecognitionException { + IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_identifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(326); + _la = _input.LA(1); + if ( !(_la==UNQUOTED_IDENTIFIER || _la==QUOTED_IDENTIFIER) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdentifierPatternContext extends ParserRuleContext { + public TerminalNode PROJECT_UNQUOTED_IDENTIFIER() { return getToken(esql_parser.PROJECT_UNQUOTED_IDENTIFIER, 0); } + public TerminalNode QUOTED_IDENTIFIER() { return getToken(esql_parser.QUOTED_IDENTIFIER, 0); } + public IdentifierPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identifierPattern; } + } + + public final IdentifierPatternContext identifierPattern() throws RecognitionException { + IdentifierPatternContext _localctx = new IdentifierPatternContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_identifierPattern); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(328); + _la = _input.LA(1); + if ( !(_la==QUOTED_IDENTIFIER || _la==PROJECT_UNQUOTED_IDENTIFIER) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConstantContext extends ParserRuleContext { + public ConstantContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constant; } + + public ConstantContext() { } + public void copyFrom(ConstantContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BooleanArrayLiteralContext extends ConstantContext { + public TerminalNode OPENING_BRACKET() { return getToken(esql_parser.OPENING_BRACKET, 0); } + public List booleanValue() { + return getRuleContexts(BooleanValueContext.class); + } + public BooleanValueContext booleanValue(int i) { + return getRuleContext(BooleanValueContext.class,i); + } + public TerminalNode CLOSING_BRACKET() { return getToken(esql_parser.CLOSING_BRACKET, 0); } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public BooleanArrayLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class DecimalLiteralContext extends ConstantContext { + public DecimalValueContext decimalValue() { + return getRuleContext(DecimalValueContext.class,0); + } + public DecimalLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class NullLiteralContext extends ConstantContext { + public TerminalNode NULL() { return getToken(esql_parser.NULL, 0); } + public NullLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class QualifiedIntegerLiteralContext extends ConstantContext { + public IntegerValueContext integerValue() { + return getRuleContext(IntegerValueContext.class,0); + } + public TerminalNode UNQUOTED_IDENTIFIER() { return getToken(esql_parser.UNQUOTED_IDENTIFIER, 0); } + public QualifiedIntegerLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class StringArrayLiteralContext extends ConstantContext { + public TerminalNode OPENING_BRACKET() { return getToken(esql_parser.OPENING_BRACKET, 0); } + public List string() { + return getRuleContexts(StringContext.class); + } + public StringContext string(int i) { + return getRuleContext(StringContext.class,i); + } + public TerminalNode CLOSING_BRACKET() { return getToken(esql_parser.CLOSING_BRACKET, 0); } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public StringArrayLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class StringLiteralContext extends ConstantContext { + public StringContext string() { + return getRuleContext(StringContext.class,0); + } + public StringLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class NumericArrayLiteralContext extends ConstantContext { + public TerminalNode OPENING_BRACKET() { return getToken(esql_parser.OPENING_BRACKET, 0); } + public List numericValue() { + return getRuleContexts(NumericValueContext.class); + } + public NumericValueContext numericValue(int i) { + return getRuleContext(NumericValueContext.class,i); + } + public TerminalNode CLOSING_BRACKET() { return getToken(esql_parser.CLOSING_BRACKET, 0); } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public NumericArrayLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class InputParamContext extends ConstantContext { + public TerminalNode PARAM() { return getToken(esql_parser.PARAM, 0); } + public InputParamContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class IntegerLiteralContext extends ConstantContext { + public IntegerValueContext integerValue() { + return getRuleContext(IntegerValueContext.class,0); + } + public IntegerLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class BooleanLiteralContext extends ConstantContext { + public BooleanValueContext booleanValue() { + return getRuleContext(BooleanValueContext.class,0); + } + public BooleanLiteralContext(ConstantContext ctx) { copyFrom(ctx); } + } + + public final ConstantContext constant() throws RecognitionException { + ConstantContext _localctx = new ConstantContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_constant); + int _la; + try { + setState(372); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { + case 1: + _localctx = new NullLiteralContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(330); + match(NULL); + } + break; + case 2: + _localctx = new QualifiedIntegerLiteralContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(331); + integerValue(); + setState(332); + match(UNQUOTED_IDENTIFIER); + } + break; + case 3: + _localctx = new DecimalLiteralContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(334); + decimalValue(); + } + break; + case 4: + _localctx = new IntegerLiteralContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(335); + integerValue(); + } + break; + case 5: + _localctx = new BooleanLiteralContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(336); + booleanValue(); + } + break; + case 6: + _localctx = new InputParamContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(337); + match(PARAM); + } + break; + case 7: + _localctx = new StringLiteralContext(_localctx); + enterOuterAlt(_localctx, 7); + { + setState(338); + string(); + } + break; + case 8: + _localctx = new NumericArrayLiteralContext(_localctx); + enterOuterAlt(_localctx, 8); + { + setState(339); + match(OPENING_BRACKET); + setState(340); + numericValue(); + setState(345); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(341); + match(COMMA); + setState(342); + numericValue(); + } + } + setState(347); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(348); + match(CLOSING_BRACKET); + } + break; + case 9: + _localctx = new BooleanArrayLiteralContext(_localctx); + enterOuterAlt(_localctx, 9); + { + setState(350); + match(OPENING_BRACKET); + setState(351); + booleanValue(); + setState(356); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(352); + match(COMMA); + setState(353); + booleanValue(); + } + } + setState(358); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(359); + match(CLOSING_BRACKET); + } + break; + case 10: + _localctx = new StringArrayLiteralContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(361); + match(OPENING_BRACKET); + setState(362); + string(); + setState(367); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(363); + match(COMMA); + setState(364); + string(); + } + } + setState(369); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(370); + match(CLOSING_BRACKET); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LimitCommandContext extends ParserRuleContext { + public TerminalNode LIMIT() { return getToken(esql_parser.LIMIT, 0); } + public TerminalNode INTEGER_LITERAL() { return getToken(esql_parser.INTEGER_LITERAL, 0); } + public LimitCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_limitCommand; } + } + + public final LimitCommandContext limitCommand() throws RecognitionException { + LimitCommandContext _localctx = new LimitCommandContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_limitCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(374); + match(LIMIT); + setState(375); + match(INTEGER_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SortCommandContext extends ParserRuleContext { + public TerminalNode SORT() { return getToken(esql_parser.SORT, 0); } + public List orderExpression() { + return getRuleContexts(OrderExpressionContext.class); + } + public OrderExpressionContext orderExpression(int i) { + return getRuleContext(OrderExpressionContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public SortCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_sortCommand; } + } + + public final SortCommandContext sortCommand() throws RecognitionException { + SortCommandContext _localctx = new SortCommandContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_sortCommand); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(377); + match(SORT); + setState(378); + orderExpression(); + setState(383); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(379); + match(COMMA); + setState(380); + orderExpression(); + } + } + } + setState(385); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OrderExpressionContext extends ParserRuleContext { + public Token ordering; + public Token nullOrdering; + public BooleanExpressionContext booleanExpression() { + return getRuleContext(BooleanExpressionContext.class,0); + } + public TerminalNode NULLS() { return getToken(esql_parser.NULLS, 0); } + public TerminalNode ASC() { return getToken(esql_parser.ASC, 0); } + public TerminalNode DESC() { return getToken(esql_parser.DESC, 0); } + public TerminalNode FIRST() { return getToken(esql_parser.FIRST, 0); } + public TerminalNode LAST() { return getToken(esql_parser.LAST, 0); } + public OrderExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_orderExpression; } + } + + public final OrderExpressionContext orderExpression() throws RecognitionException { + OrderExpressionContext _localctx = new OrderExpressionContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_orderExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(386); + booleanExpression(0); + setState(388); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + case 1: + { + setState(387); + ((OrderExpressionContext)_localctx).ordering = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==ASC || _la==DESC) ) { + ((OrderExpressionContext)_localctx).ordering = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + setState(392); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { + case 1: + { + setState(390); + match(NULLS); + setState(391); + ((OrderExpressionContext)_localctx).nullOrdering = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==FIRST || _la==LAST) ) { + ((OrderExpressionContext)_localctx).nullOrdering = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class KeepCommandContext extends ParserRuleContext { + public TerminalNode KEEP() { return getToken(esql_parser.KEEP, 0); } + public List qualifiedNamePattern() { + return getRuleContexts(QualifiedNamePatternContext.class); + } + public QualifiedNamePatternContext qualifiedNamePattern(int i) { + return getRuleContext(QualifiedNamePatternContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public TerminalNode PROJECT() { return getToken(esql_parser.PROJECT, 0); } + public KeepCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_keepCommand; } + } + + public final KeepCommandContext keepCommand() throws RecognitionException { + KeepCommandContext _localctx = new KeepCommandContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_keepCommand); + try { + int _alt; + setState(412); + _errHandler.sync(this); + switch (_input.LA(1)) { + case KEEP: + enterOuterAlt(_localctx, 1); + { + setState(394); + match(KEEP); + setState(395); + qualifiedNamePattern(); + setState(400); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(396); + match(COMMA); + setState(397); + qualifiedNamePattern(); + } + } + } + setState(402); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + } + } + break; + case PROJECT: + enterOuterAlt(_localctx, 2); + { + setState(403); + match(PROJECT); + setState(404); + qualifiedNamePattern(); + setState(409); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,38,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(405); + match(COMMA); + setState(406); + qualifiedNamePattern(); + } + } + } + setState(411); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,38,_ctx); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DropCommandContext extends ParserRuleContext { + public TerminalNode DROP() { return getToken(esql_parser.DROP, 0); } + public List qualifiedNamePattern() { + return getRuleContexts(QualifiedNamePatternContext.class); + } + public QualifiedNamePatternContext qualifiedNamePattern(int i) { + return getRuleContext(QualifiedNamePatternContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public DropCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dropCommand; } + } + + public final DropCommandContext dropCommand() throws RecognitionException { + DropCommandContext _localctx = new DropCommandContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_dropCommand); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(414); + match(DROP); + setState(415); + qualifiedNamePattern(); + setState(420); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(416); + match(COMMA); + setState(417); + qualifiedNamePattern(); + } + } + } + setState(422); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RenameCommandContext extends ParserRuleContext { + public TerminalNode RENAME() { return getToken(esql_parser.RENAME, 0); } + public List renameClause() { + return getRuleContexts(RenameClauseContext.class); + } + public RenameClauseContext renameClause(int i) { + return getRuleContext(RenameClauseContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public RenameCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_renameCommand; } + } + + public final RenameCommandContext renameCommand() throws RecognitionException { + RenameCommandContext _localctx = new RenameCommandContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_renameCommand); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(423); + match(RENAME); + setState(424); + renameClause(); + setState(429); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(425); + match(COMMA); + setState(426); + renameClause(); + } + } + } + setState(431); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RenameClauseContext extends ParserRuleContext { + public QualifiedNamePatternContext oldName; + public QualifiedNamePatternContext newName; + public TerminalNode AS() { return getToken(esql_parser.AS, 0); } + public List qualifiedNamePattern() { + return getRuleContexts(QualifiedNamePatternContext.class); + } + public QualifiedNamePatternContext qualifiedNamePattern(int i) { + return getRuleContext(QualifiedNamePatternContext.class,i); + } + public RenameClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_renameClause; } + } + + public final RenameClauseContext renameClause() throws RecognitionException { + RenameClauseContext _localctx = new RenameClauseContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_renameClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(432); + ((RenameClauseContext)_localctx).oldName = qualifiedNamePattern(); + setState(433); + match(AS); + setState(434); + ((RenameClauseContext)_localctx).newName = qualifiedNamePattern(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DissectCommandContext extends ParserRuleContext { + public TerminalNode DISSECT() { return getToken(esql_parser.DISSECT, 0); } + public PrimaryExpressionContext primaryExpression() { + return getRuleContext(PrimaryExpressionContext.class,0); + } + public StringContext string() { + return getRuleContext(StringContext.class,0); + } + public CommandOptionsContext commandOptions() { + return getRuleContext(CommandOptionsContext.class,0); + } + public DissectCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dissectCommand; } + } + + public final DissectCommandContext dissectCommand() throws RecognitionException { + DissectCommandContext _localctx = new DissectCommandContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_dissectCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(436); + match(DISSECT); + setState(437); + primaryExpression(); + setState(438); + string(); + setState(440); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { + case 1: + { + setState(439); + commandOptions(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class GrokCommandContext extends ParserRuleContext { + public TerminalNode GROK() { return getToken(esql_parser.GROK, 0); } + public PrimaryExpressionContext primaryExpression() { + return getRuleContext(PrimaryExpressionContext.class,0); + } + public StringContext string() { + return getRuleContext(StringContext.class,0); + } + public GrokCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_grokCommand; } + } + + public final GrokCommandContext grokCommand() throws RecognitionException { + GrokCommandContext _localctx = new GrokCommandContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_grokCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(442); + match(GROK); + setState(443); + primaryExpression(); + setState(444); + string(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MvExpandCommandContext extends ParserRuleContext { + public TerminalNode MV_EXPAND() { return getToken(esql_parser.MV_EXPAND, 0); } + public QualifiedNameContext qualifiedName() { + return getRuleContext(QualifiedNameContext.class,0); + } + public MvExpandCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_mvExpandCommand; } + } + + public final MvExpandCommandContext mvExpandCommand() throws RecognitionException { + MvExpandCommandContext _localctx = new MvExpandCommandContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_mvExpandCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(446); + match(MV_EXPAND); + setState(447); + qualifiedName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CommandOptionsContext extends ParserRuleContext { + public List commandOption() { + return getRuleContexts(CommandOptionContext.class); + } + public CommandOptionContext commandOption(int i) { + return getRuleContext(CommandOptionContext.class,i); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public CommandOptionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_commandOptions; } + } + + public final CommandOptionsContext commandOptions() throws RecognitionException { + CommandOptionsContext _localctx = new CommandOptionsContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_commandOptions); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(449); + commandOption(); + setState(454); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(450); + match(COMMA); + setState(451); + commandOption(); + } + } + } + setState(456); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CommandOptionContext extends ParserRuleContext { + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public TerminalNode ASSIGN() { return getToken(esql_parser.ASSIGN, 0); } + public ConstantContext constant() { + return getRuleContext(ConstantContext.class,0); + } + public CommandOptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_commandOption; } + } + + public final CommandOptionContext commandOption() throws RecognitionException { + CommandOptionContext _localctx = new CommandOptionContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_commandOption); + try { + enterOuterAlt(_localctx, 1); + { + setState(457); + identifier(); + setState(458); + match(ASSIGN); + setState(459); + constant(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BooleanValueContext extends ParserRuleContext { + public TerminalNode TRUE() { return getToken(esql_parser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(esql_parser.FALSE, 0); } + public BooleanValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_booleanValue; } + } + + public final BooleanValueContext booleanValue() throws RecognitionException { + BooleanValueContext _localctx = new BooleanValueContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_booleanValue); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(461); + _la = _input.LA(1); + if ( !(_la==FALSE || _la==TRUE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NumericValueContext extends ParserRuleContext { + public DecimalValueContext decimalValue() { + return getRuleContext(DecimalValueContext.class,0); + } + public IntegerValueContext integerValue() { + return getRuleContext(IntegerValueContext.class,0); + } + public NumericValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_numericValue; } + } + + public final NumericValueContext numericValue() throws RecognitionException { + NumericValueContext _localctx = new NumericValueContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_numericValue); + try { + setState(465); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,44,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(463); + decimalValue(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(464); + integerValue(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DecimalValueContext extends ParserRuleContext { + public TerminalNode DECIMAL_LITERAL() { return getToken(esql_parser.DECIMAL_LITERAL, 0); } + public TerminalNode PLUS() { return getToken(esql_parser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(esql_parser.MINUS, 0); } + public DecimalValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_decimalValue; } + } + + public final DecimalValueContext decimalValue() throws RecognitionException { + DecimalValueContext _localctx = new DecimalValueContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_decimalValue); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(468); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PLUS || _la==MINUS) { + { + setState(467); + _la = _input.LA(1); + if ( !(_la==PLUS || _la==MINUS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(470); + match(DECIMAL_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IntegerValueContext extends ParserRuleContext { + public TerminalNode INTEGER_LITERAL() { return getToken(esql_parser.INTEGER_LITERAL, 0); } + public TerminalNode PLUS() { return getToken(esql_parser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(esql_parser.MINUS, 0); } + public IntegerValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_integerValue; } + } + + public final IntegerValueContext integerValue() throws RecognitionException { + IntegerValueContext _localctx = new IntegerValueContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_integerValue); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(473); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PLUS || _la==MINUS) { + { + setState(472); + _la = _input.LA(1); + if ( !(_la==PLUS || _la==MINUS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(475); + match(INTEGER_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StringContext extends ParserRuleContext { + public TerminalNode STRING() { return getToken(esql_parser.STRING, 0); } + public StringContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_string; } + } + + public final StringContext string() throws RecognitionException { + StringContext _localctx = new StringContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_string); + try { + enterOuterAlt(_localctx, 1); + { + setState(477); + match(STRING); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ComparisonOperatorContext extends ParserRuleContext { + public TerminalNode EQ() { return getToken(esql_parser.EQ, 0); } + public TerminalNode NEQ() { return getToken(esql_parser.NEQ, 0); } + public TerminalNode LT() { return getToken(esql_parser.LT, 0); } + public TerminalNode LTE() { return getToken(esql_parser.LTE, 0); } + public TerminalNode GT() { return getToken(esql_parser.GT, 0); } + public TerminalNode GTE() { return getToken(esql_parser.GTE, 0); } + public ComparisonOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_comparisonOperator; } + } + + public final ComparisonOperatorContext comparisonOperator() throws RecognitionException { + ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_comparisonOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(479); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 283726776524341248L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExplainCommandContext extends ParserRuleContext { + public TerminalNode EXPLAIN() { return getToken(esql_parser.EXPLAIN, 0); } + public SubqueryExpressionContext subqueryExpression() { + return getRuleContext(SubqueryExpressionContext.class,0); + } + public ExplainCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_explainCommand; } + } + + public final ExplainCommandContext explainCommand() throws RecognitionException { + ExplainCommandContext _localctx = new ExplainCommandContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_explainCommand); + try { + enterOuterAlt(_localctx, 1); + { + setState(481); + match(EXPLAIN); + setState(482); + subqueryExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SubqueryExpressionContext extends ParserRuleContext { + public TerminalNode OPENING_BRACKET() { return getToken(esql_parser.OPENING_BRACKET, 0); } + public QueryContext query() { + return getRuleContext(QueryContext.class,0); + } + public TerminalNode CLOSING_BRACKET() { return getToken(esql_parser.CLOSING_BRACKET, 0); } + public SubqueryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subqueryExpression; } + } + + public final SubqueryExpressionContext subqueryExpression() throws RecognitionException { + SubqueryExpressionContext _localctx = new SubqueryExpressionContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_subqueryExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(484); + match(OPENING_BRACKET); + setState(485); + query(0); + setState(486); + match(CLOSING_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ShowCommandContext extends ParserRuleContext { + public ShowCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_showCommand; } + + public ShowCommandContext() { } + public void copyFrom(ShowCommandContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ShowInfoContext extends ShowCommandContext { + public TerminalNode SHOW() { return getToken(esql_parser.SHOW, 0); } + public TerminalNode INFO() { return getToken(esql_parser.INFO, 0); } + public ShowInfoContext(ShowCommandContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ShowFunctionsContext extends ShowCommandContext { + public TerminalNode SHOW() { return getToken(esql_parser.SHOW, 0); } + public TerminalNode FUNCTIONS() { return getToken(esql_parser.FUNCTIONS, 0); } + public ShowFunctionsContext(ShowCommandContext ctx) { copyFrom(ctx); } + } + + public final ShowCommandContext showCommand() throws RecognitionException { + ShowCommandContext _localctx = new ShowCommandContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_showCommand); + try { + setState(492); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { + case 1: + _localctx = new ShowInfoContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(488); + match(SHOW); + setState(489); + match(INFO); + } + break; + case 2: + _localctx = new ShowFunctionsContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(490); + match(SHOW); + setState(491); + match(FUNCTIONS); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EnrichCommandContext extends ParserRuleContext { + public FromIdentifierContext policyName; + public QualifiedNamePatternContext matchField; + public TerminalNode ENRICH() { return getToken(esql_parser.ENRICH, 0); } + public FromIdentifierContext fromIdentifier() { + return getRuleContext(FromIdentifierContext.class,0); + } + public TerminalNode ON() { return getToken(esql_parser.ON, 0); } + public TerminalNode WITH() { return getToken(esql_parser.WITH, 0); } + public List enrichWithClause() { + return getRuleContexts(EnrichWithClauseContext.class); + } + public EnrichWithClauseContext enrichWithClause(int i) { + return getRuleContext(EnrichWithClauseContext.class,i); + } + public QualifiedNamePatternContext qualifiedNamePattern() { + return getRuleContext(QualifiedNamePatternContext.class,0); + } + public List COMMA() { return getTokens(esql_parser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(esql_parser.COMMA, i); + } + public EnrichCommandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enrichCommand; } + } + + public final EnrichCommandContext enrichCommand() throws RecognitionException { + EnrichCommandContext _localctx = new EnrichCommandContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_enrichCommand); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(494); + match(ENRICH); + setState(495); + ((EnrichCommandContext)_localctx).policyName = fromIdentifier(); + setState(498); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { + case 1: + { + setState(496); + match(ON); + setState(497); + ((EnrichCommandContext)_localctx).matchField = qualifiedNamePattern(); + } + break; + } + setState(509); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { + case 1: + { + setState(500); + match(WITH); + setState(501); + enrichWithClause(); + setState(506); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(502); + match(COMMA); + setState(503); + enrichWithClause(); + } + } + } + setState(508); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EnrichWithClauseContext extends ParserRuleContext { + public QualifiedNamePatternContext newName; + public QualifiedNamePatternContext enrichField; + public List qualifiedNamePattern() { + return getRuleContexts(QualifiedNamePatternContext.class); + } + public QualifiedNamePatternContext qualifiedNamePattern(int i) { + return getRuleContext(QualifiedNamePatternContext.class,i); + } + public TerminalNode ASSIGN() { return getToken(esql_parser.ASSIGN, 0); } + public EnrichWithClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enrichWithClause; } + } + + public final EnrichWithClauseContext enrichWithClause() throws RecognitionException { + EnrichWithClauseContext _localctx = new EnrichWithClauseContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_enrichWithClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(514); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { + case 1: + { + setState(511); + ((EnrichWithClauseContext)_localctx).newName = qualifiedNamePattern(); + setState(512); + match(ASSIGN); + } + break; + } + setState(516); + ((EnrichWithClauseContext)_localctx).enrichField = qualifiedNamePattern(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 1: + return query_sempred((QueryContext)_localctx, predIndex); + case 5: + return booleanExpression_sempred((BooleanExpressionContext)_localctx, predIndex); + case 8: + return operatorExpression_sempred((OperatorExpressionContext)_localctx, predIndex); + } + return true; + } + private boolean query_sempred(QueryContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 1); + } + return true; + } + private boolean booleanExpression_sempred(BooleanExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 4); + case 2: + return precpred(_ctx, 3); + } + return true; + } + private boolean operatorExpression_sempred(OperatorExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 3: + return precpred(_ctx, 2); + case 4: + return precpred(_ctx, 1); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001b\u0207\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ + "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ + "\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+ + "\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+ + "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+ + "\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+ + "\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+ + "\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+ + "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+ + "#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+ + "(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+ + "-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u0001\u0000\u0001\u0000"+ + "\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0005\u0001l\b\u0001\n\u0001\f\u0001o\t\u0001\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002u\b\u0002\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0003\u0003\u0084\b\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+ + "\u0003\u0005\u0090\b\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0005\u0005\u0097\b\u0005\n\u0005\f\u0005\u009a\t\u0005\u0001"+ + "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005\u00a1"+ + "\b\u0005\u0001\u0005\u0001\u0005\u0003\u0005\u00a5\b\u0005\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0005\u0005"+ + "\u00ad\b\u0005\n\u0005\f\u0005\u00b0\t\u0005\u0001\u0006\u0001\u0006\u0003"+ + "\u0006\u00b4\b\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0003\u0006\u00bb\b\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0003"+ + "\u0006\u00c0\b\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ + "\u0007\u0003\u0007\u00c7\b\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0003"+ + "\b\u00cd\b\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0005\b\u00d5"+ + "\b\b\n\b\f\b\u00d8\t\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t"+ + "\u0001\t\u0003\t\u00e1\b\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ + "\n\u0005\n\u00e9\b\n\n\n\f\n\u00ec\t\n\u0003\n\u00ee\b\n\u0001\n\u0001"+ + "\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0005\f"+ + "\u00f8\b\f\n\f\f\f\u00fb\t\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003"+ + "\r\u0102\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0005\u000e"+ + "\u0108\b\u000e\n\u000e\f\u000e\u010b\t\u000e\u0001\u000e\u0003\u000e\u010e"+ + "\b\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0005"+ + "\u000f\u0115\b\u000f\n\u000f\f\u000f\u0118\t\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0003\u0011"+ + "\u0121\b\u0011\u0001\u0011\u0001\u0011\u0003\u0011\u0125\b\u0011\u0001"+ + "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u012b\b\u0012\u0001"+ + "\u0013\u0001\u0013\u0001\u0013\u0005\u0013\u0130\b\u0013\n\u0013\f\u0013"+ + "\u0133\t\u0013\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015"+ + "\u0005\u0015\u013a\b\u0015\n\u0015\f\u0015\u013d\t\u0015\u0001\u0016\u0001"+ + "\u0016\u0001\u0016\u0005\u0016\u0142\b\u0016\n\u0016\f\u0016\u0145\t\u0016"+ + "\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005\u0019"+ + "\u0158\b\u0019\n\u0019\f\u0019\u015b\t\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005\u0019\u0163\b\u0019\n"+ + "\u0019\f\u0019\u0166\t\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0005\u0019\u016e\b\u0019\n\u0019\f\u0019"+ + "\u0171\t\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u0175\b\u0019\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0005\u001b\u017e\b\u001b\n\u001b\f\u001b\u0181\t\u001b\u0001\u001c"+ + "\u0001\u001c\u0003\u001c\u0185\b\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ + "\u0189\b\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d"+ + "\u018f\b\u001d\n\u001d\f\u001d\u0192\t\u001d\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0001\u001d\u0005\u001d\u0198\b\u001d\n\u001d\f\u001d\u019b\t\u001d"+ + "\u0003\u001d\u019d\b\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+ + "\u0005\u001e\u01a3\b\u001e\n\u001e\f\u001e\u01a6\t\u001e\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0005\u001f\u01ac\b\u001f\n\u001f\f\u001f"+ + "\u01af\t\u001f\u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001"+ + "!\u0003!\u01b9\b!\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001"+ + "#\u0001$\u0001$\u0001$\u0005$\u01c5\b$\n$\f$\u01c8\t$\u0001%\u0001%\u0001"+ + "%\u0001%\u0001&\u0001&\u0001\'\u0001\'\u0003\'\u01d2\b\'\u0001(\u0003"+ + "(\u01d5\b(\u0001(\u0001(\u0001)\u0003)\u01da\b)\u0001)\u0001)\u0001*\u0001"+ + "*\u0001+\u0001+\u0001,\u0001,\u0001,\u0001-\u0001-\u0001-\u0001-\u0001"+ + ".\u0001.\u0001.\u0001.\u0003.\u01ed\b.\u0001/\u0001/\u0001/\u0001/\u0003"+ + "/\u01f3\b/\u0001/\u0001/\u0001/\u0001/\u0005/\u01f9\b/\n/\f/\u01fc\t/"+ + "\u0003/\u01fe\b/\u00010\u00010\u00010\u00030\u0203\b0\u00010\u00010\u0001"+ + "0\u0000\u0003\u0002\n\u00101\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010"+ + "\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPR"+ + "TVXZ\\^`\u0000\t\u0001\u0000:;\u0001\u0000<>\u0002\u0000BBGG\u0001\u0000"+ + "AB\u0002\u0000BBKK\u0002\u0000 ##\u0001\u0000&\'\u0002\u0000%%33\u0001"+ + "\u000049\u0224\u0000b\u0001\u0000\u0000\u0000\u0002e\u0001\u0000\u0000"+ + "\u0000\u0004t\u0001\u0000\u0000\u0000\u0006\u0083\u0001\u0000\u0000\u0000"+ + "\b\u0085\u0001\u0000\u0000\u0000\n\u00a4\u0001\u0000\u0000\u0000\f\u00bf"+ + "\u0001\u0000\u0000\u0000\u000e\u00c6\u0001\u0000\u0000\u0000\u0010\u00cc"+ + "\u0001\u0000\u0000\u0000\u0012\u00e0\u0001\u0000\u0000\u0000\u0014\u00e2"+ + "\u0001\u0000\u0000\u0000\u0016\u00f1\u0001\u0000\u0000\u0000\u0018\u00f4"+ + "\u0001\u0000\u0000\u0000\u001a\u0101\u0001\u0000\u0000\u0000\u001c\u0103"+ + "\u0001\u0000\u0000\u0000\u001e\u010f\u0001\u0000\u0000\u0000 \u011b\u0001"+ + "\u0000\u0000\u0000\"\u011e\u0001\u0000\u0000\u0000$\u0126\u0001\u0000"+ + "\u0000\u0000&\u012c\u0001\u0000\u0000\u0000(\u0134\u0001\u0000\u0000\u0000"+ + "*\u0136\u0001\u0000\u0000\u0000,\u013e\u0001\u0000\u0000\u0000.\u0146"+ + "\u0001\u0000\u0000\u00000\u0148\u0001\u0000\u0000\u00002\u0174\u0001\u0000"+ + "\u0000\u00004\u0176\u0001\u0000\u0000\u00006\u0179\u0001\u0000\u0000\u0000"+ + "8\u0182\u0001\u0000\u0000\u0000:\u019c\u0001\u0000\u0000\u0000<\u019e"+ + "\u0001\u0000\u0000\u0000>\u01a7\u0001\u0000\u0000\u0000@\u01b0\u0001\u0000"+ + "\u0000\u0000B\u01b4\u0001\u0000\u0000\u0000D\u01ba\u0001\u0000\u0000\u0000"+ + "F\u01be\u0001\u0000\u0000\u0000H\u01c1\u0001\u0000\u0000\u0000J\u01c9"+ + "\u0001\u0000\u0000\u0000L\u01cd\u0001\u0000\u0000\u0000N\u01d1\u0001\u0000"+ + "\u0000\u0000P\u01d4\u0001\u0000\u0000\u0000R\u01d9\u0001\u0000\u0000\u0000"+ + "T\u01dd\u0001\u0000\u0000\u0000V\u01df\u0001\u0000\u0000\u0000X\u01e1"+ + "\u0001\u0000\u0000\u0000Z\u01e4\u0001\u0000\u0000\u0000\\\u01ec\u0001"+ + "\u0000\u0000\u0000^\u01ee\u0001\u0000\u0000\u0000`\u0202\u0001\u0000\u0000"+ + "\u0000bc\u0003\u0002\u0001\u0000cd\u0005\u0000\u0000\u0001d\u0001\u0001"+ + "\u0000\u0000\u0000ef\u0006\u0001\uffff\uffff\u0000fg\u0003\u0004\u0002"+ + "\u0000gm\u0001\u0000\u0000\u0000hi\n\u0001\u0000\u0000ij\u0005\u001a\u0000"+ + "\u0000jl\u0003\u0006\u0003\u0000kh\u0001\u0000\u0000\u0000lo\u0001\u0000"+ + "\u0000\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000n\u0003"+ + "\u0001\u0000\u0000\u0000om\u0001\u0000\u0000\u0000pu\u0003X,\u0000qu\u0003"+ + "\u001c\u000e\u0000ru\u0003\u0016\u000b\u0000su\u0003\\.\u0000tp\u0001"+ + "\u0000\u0000\u0000tq\u0001\u0000\u0000\u0000tr\u0001\u0000\u0000\u0000"+ + "ts\u0001\u0000\u0000\u0000u\u0005\u0001\u0000\u0000\u0000v\u0084\u0003"+ + " \u0010\u0000w\u0084\u0003$\u0012\u0000x\u0084\u00034\u001a\u0000y\u0084"+ + "\u0003:\u001d\u0000z\u0084\u00036\u001b\u0000{\u0084\u0003\"\u0011\u0000"+ + "|\u0084\u0003\b\u0004\u0000}\u0084\u0003<\u001e\u0000~\u0084\u0003>\u001f"+ + "\u0000\u007f\u0084\u0003B!\u0000\u0080\u0084\u0003D\"\u0000\u0081\u0084"+ + "\u0003^/\u0000\u0082\u0084\u0003F#\u0000\u0083v\u0001\u0000\u0000\u0000"+ + "\u0083w\u0001\u0000\u0000\u0000\u0083x\u0001\u0000\u0000\u0000\u0083y"+ + "\u0001\u0000\u0000\u0000\u0083z\u0001\u0000\u0000\u0000\u0083{\u0001\u0000"+ + "\u0000\u0000\u0083|\u0001\u0000\u0000\u0000\u0083}\u0001\u0000\u0000\u0000"+ + "\u0083~\u0001\u0000\u0000\u0000\u0083\u007f\u0001\u0000\u0000\u0000\u0083"+ + "\u0080\u0001\u0000\u0000\u0000\u0083\u0081\u0001\u0000\u0000\u0000\u0083"+ + "\u0082\u0001\u0000\u0000\u0000\u0084\u0007\u0001\u0000\u0000\u0000\u0085"+ + "\u0086\u0005\u0012\u0000\u0000\u0086\u0087\u0003\n\u0005\u0000\u0087\t"+ + "\u0001\u0000\u0000\u0000\u0088\u0089\u0006\u0005\uffff\uffff\u0000\u0089"+ + "\u008a\u0005,\u0000\u0000\u008a\u00a5\u0003\n\u0005\u0007\u008b\u00a5"+ + "\u0003\u000e\u0007\u0000\u008c\u00a5\u0003\f\u0006\u0000\u008d\u008f\u0003"+ + "\u000e\u0007\u0000\u008e\u0090\u0005,\u0000\u0000\u008f\u008e\u0001\u0000"+ + "\u0000\u0000\u008f\u0090\u0001\u0000\u0000\u0000\u0090\u0091\u0001\u0000"+ + "\u0000\u0000\u0091\u0092\u0005)\u0000\u0000\u0092\u0093\u0005(\u0000\u0000"+ + "\u0093\u0098\u0003\u000e\u0007\u0000\u0094\u0095\u0005\"\u0000\u0000\u0095"+ + "\u0097\u0003\u000e\u0007\u0000\u0096\u0094\u0001\u0000\u0000\u0000\u0097"+ + "\u009a\u0001\u0000\u0000\u0000\u0098\u0096\u0001\u0000\u0000\u0000\u0098"+ + "\u0099\u0001\u0000\u0000\u0000\u0099\u009b\u0001\u0000\u0000\u0000\u009a"+ + "\u0098\u0001\u0000\u0000\u0000\u009b\u009c\u00052\u0000\u0000\u009c\u00a5"+ + "\u0001\u0000\u0000\u0000\u009d\u009e\u0003\u000e\u0007\u0000\u009e\u00a0"+ + "\u0005*\u0000\u0000\u009f\u00a1\u0005,\u0000\u0000\u00a0\u009f\u0001\u0000"+ + "\u0000\u0000\u00a0\u00a1\u0001\u0000\u0000\u0000\u00a1\u00a2\u0001\u0000"+ + "\u0000\u0000\u00a2\u00a3\u0005-\u0000\u0000\u00a3\u00a5\u0001\u0000\u0000"+ + "\u0000\u00a4\u0088\u0001\u0000\u0000\u0000\u00a4\u008b\u0001\u0000\u0000"+ + "\u0000\u00a4\u008c\u0001\u0000\u0000\u0000\u00a4\u008d\u0001\u0000\u0000"+ + "\u0000\u00a4\u009d\u0001\u0000\u0000\u0000\u00a5\u00ae\u0001\u0000\u0000"+ + "\u0000\u00a6\u00a7\n\u0004\u0000\u0000\u00a7\u00a8\u0005\u001f\u0000\u0000"+ + "\u00a8\u00ad\u0003\n\u0005\u0005\u00a9\u00aa\n\u0003\u0000\u0000\u00aa"+ + "\u00ab\u0005/\u0000\u0000\u00ab\u00ad\u0003\n\u0005\u0004\u00ac\u00a6"+ + "\u0001\u0000\u0000\u0000\u00ac\u00a9\u0001\u0000\u0000\u0000\u00ad\u00b0"+ + "\u0001\u0000\u0000\u0000\u00ae\u00ac\u0001\u0000\u0000\u0000\u00ae\u00af"+ + "\u0001\u0000\u0000\u0000\u00af\u000b\u0001\u0000\u0000\u0000\u00b0\u00ae"+ + "\u0001\u0000\u0000\u0000\u00b1\u00b3\u0003\u000e\u0007\u0000\u00b2\u00b4"+ + "\u0005,\u0000\u0000\u00b3\u00b2\u0001\u0000\u0000\u0000\u00b3\u00b4\u0001"+ + "\u0000\u0000\u0000\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u00b6\u0005"+ + "+\u0000\u0000\u00b6\u00b7\u0003T*\u0000\u00b7\u00c0\u0001\u0000\u0000"+ + "\u0000\u00b8\u00ba\u0003\u000e\u0007\u0000\u00b9\u00bb\u0005,\u0000\u0000"+ + "\u00ba\u00b9\u0001\u0000\u0000\u0000\u00ba\u00bb\u0001\u0000\u0000\u0000"+ + "\u00bb\u00bc\u0001\u0000\u0000\u0000\u00bc\u00bd\u00051\u0000\u0000\u00bd"+ + "\u00be\u0003T*\u0000\u00be\u00c0\u0001\u0000\u0000\u0000\u00bf\u00b1\u0001"+ + "\u0000\u0000\u0000\u00bf\u00b8\u0001\u0000\u0000\u0000\u00c0\r\u0001\u0000"+ + "\u0000\u0000\u00c1\u00c7\u0003\u0010\b\u0000\u00c2\u00c3\u0003\u0010\b"+ + "\u0000\u00c3\u00c4\u0003V+\u0000\u00c4\u00c5\u0003\u0010\b\u0000\u00c5"+ + "\u00c7\u0001\u0000\u0000\u0000\u00c6\u00c1\u0001\u0000\u0000\u0000\u00c6"+ + "\u00c2\u0001\u0000\u0000\u0000\u00c7\u000f\u0001\u0000\u0000\u0000\u00c8"+ + "\u00c9\u0006\b\uffff\uffff\u0000\u00c9\u00cd\u0003\u0012\t\u0000\u00ca"+ + "\u00cb\u0007\u0000\u0000\u0000\u00cb\u00cd\u0003\u0010\b\u0003\u00cc\u00c8"+ + "\u0001\u0000\u0000\u0000\u00cc\u00ca\u0001\u0000\u0000\u0000\u00cd\u00d6"+ + "\u0001\u0000\u0000\u0000\u00ce\u00cf\n\u0002\u0000\u0000\u00cf\u00d0\u0007"+ + "\u0001\u0000\u0000\u00d0\u00d5\u0003\u0010\b\u0003\u00d1\u00d2\n\u0001"+ + "\u0000\u0000\u00d2\u00d3\u0007\u0000\u0000\u0000\u00d3\u00d5\u0003\u0010"+ + "\b\u0002\u00d4\u00ce\u0001\u0000\u0000\u0000\u00d4\u00d1\u0001\u0000\u0000"+ + "\u0000\u00d5\u00d8\u0001\u0000\u0000\u0000\u00d6\u00d4\u0001\u0000\u0000"+ + "\u0000\u00d6\u00d7\u0001\u0000\u0000\u0000\u00d7\u0011\u0001\u0000\u0000"+ + "\u0000\u00d8\u00d6\u0001\u0000\u0000\u0000\u00d9\u00e1\u00032\u0019\u0000"+ + "\u00da\u00e1\u0003*\u0015\u0000\u00db\u00e1\u0003\u0014\n\u0000\u00dc"+ + "\u00dd\u0005(\u0000\u0000\u00dd\u00de\u0003\n\u0005\u0000\u00de\u00df"+ + "\u00052\u0000\u0000\u00df\u00e1\u0001\u0000\u0000\u0000\u00e0\u00d9\u0001"+ + "\u0000\u0000\u0000\u00e0\u00da\u0001\u0000\u0000\u0000\u00e0\u00db\u0001"+ + "\u0000\u0000\u0000\u00e0\u00dc\u0001\u0000\u0000\u0000\u00e1\u0013\u0001"+ + "\u0000\u0000\u0000\u00e2\u00e3\u0003.\u0017\u0000\u00e3\u00ed\u0005(\u0000"+ + "\u0000\u00e4\u00ee\u0005<\u0000\u0000\u00e5\u00ea\u0003\n\u0005\u0000"+ + "\u00e6\u00e7\u0005\"\u0000\u0000\u00e7\u00e9\u0003\n\u0005\u0000\u00e8"+ + "\u00e6\u0001\u0000\u0000\u0000\u00e9\u00ec\u0001\u0000\u0000\u0000\u00ea"+ + "\u00e8\u0001\u0000\u0000\u0000\u00ea\u00eb\u0001\u0000\u0000\u0000\u00eb"+ + "\u00ee\u0001\u0000\u0000\u0000\u00ec\u00ea\u0001\u0000\u0000\u0000\u00ed"+ + "\u00e4\u0001\u0000\u0000\u0000\u00ed\u00e5\u0001\u0000\u0000\u0000\u00ed"+ + "\u00ee\u0001\u0000\u0000\u0000\u00ee\u00ef\u0001\u0000\u0000\u0000\u00ef"+ + "\u00f0\u00052\u0000\u0000\u00f0\u0015\u0001\u0000\u0000\u0000\u00f1\u00f2"+ + "\u0005\u000e\u0000\u0000\u00f2\u00f3\u0003\u0018\f\u0000\u00f3\u0017\u0001"+ + "\u0000\u0000\u0000\u00f4\u00f9\u0003\u001a\r\u0000\u00f5\u00f6\u0005\""+ + "\u0000\u0000\u00f6\u00f8\u0003\u001a\r\u0000\u00f7\u00f5\u0001\u0000\u0000"+ + "\u0000\u00f8\u00fb\u0001\u0000\u0000\u0000\u00f9\u00f7\u0001\u0000\u0000"+ + "\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa\u0019\u0001\u0000\u0000"+ + "\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fc\u0102\u0003\n\u0005\u0000"+ + "\u00fd\u00fe\u0003*\u0015\u0000\u00fe\u00ff\u0005!\u0000\u0000\u00ff\u0100"+ + "\u0003\n\u0005\u0000\u0100\u0102\u0001\u0000\u0000\u0000\u0101\u00fc\u0001"+ + "\u0000\u0000\u0000\u0101\u00fd\u0001\u0000\u0000\u0000\u0102\u001b\u0001"+ + "\u0000\u0000\u0000\u0103\u0104\u0005\u0006\u0000\u0000\u0104\u0109\u0003"+ + "(\u0014\u0000\u0105\u0106\u0005\"\u0000\u0000\u0106\u0108\u0003(\u0014"+ + "\u0000\u0107\u0105\u0001\u0000\u0000\u0000\u0108\u010b\u0001\u0000\u0000"+ + "\u0000\u0109\u0107\u0001\u0000\u0000\u0000\u0109\u010a\u0001\u0000\u0000"+ + "\u0000\u010a\u010d\u0001\u0000\u0000\u0000\u010b\u0109\u0001\u0000\u0000"+ + "\u0000\u010c\u010e\u0003\u001e\u000f\u0000\u010d\u010c\u0001\u0000\u0000"+ + "\u0000\u010d\u010e\u0001\u0000\u0000\u0000\u010e\u001d\u0001\u0000\u0000"+ + "\u0000\u010f\u0110\u0005?\u0000\u0000\u0110\u0111\u0005F\u0000\u0000\u0111"+ + "\u0116\u0003(\u0014\u0000\u0112\u0113\u0005\"\u0000\u0000\u0113\u0115"+ + "\u0003(\u0014\u0000\u0114\u0112\u0001\u0000\u0000\u0000\u0115\u0118\u0001"+ + "\u0000\u0000\u0000\u0116\u0114\u0001\u0000\u0000\u0000\u0116\u0117\u0001"+ + "\u0000\u0000\u0000\u0117\u0119\u0001\u0000\u0000\u0000\u0118\u0116\u0001"+ + "\u0000\u0000\u0000\u0119\u011a\u0005@\u0000\u0000\u011a\u001f\u0001\u0000"+ + "\u0000\u0000\u011b\u011c\u0005\u0004\u0000\u0000\u011c\u011d\u0003\u0018"+ + "\f\u0000\u011d!\u0001\u0000\u0000\u0000\u011e\u0120\u0005\u0011\u0000"+ + "\u0000\u011f\u0121\u0003\u0018\f\u0000\u0120\u011f\u0001\u0000\u0000\u0000"+ + "\u0120\u0121\u0001\u0000\u0000\u0000\u0121\u0124\u0001\u0000\u0000\u0000"+ + "\u0122\u0123\u0005\u001e\u0000\u0000\u0123\u0125\u0003&\u0013\u0000\u0124"+ + "\u0122\u0001\u0000\u0000\u0000\u0124\u0125\u0001\u0000\u0000\u0000\u0125"+ + "#\u0001\u0000\u0000\u0000\u0126\u0127\u0005\b\u0000\u0000\u0127\u012a"+ + "\u0003\u0018\f\u0000\u0128\u0129\u0005\u001e\u0000\u0000\u0129\u012b\u0003"+ + "&\u0013\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012a\u012b\u0001\u0000"+ + "\u0000\u0000\u012b%\u0001\u0000\u0000\u0000\u012c\u0131\u0003*\u0015\u0000"+ + "\u012d\u012e\u0005\"\u0000\u0000\u012e\u0130\u0003*\u0015\u0000\u012f"+ + "\u012d\u0001\u0000\u0000\u0000\u0130\u0133\u0001\u0000\u0000\u0000\u0131"+ + "\u012f\u0001\u0000\u0000\u0000\u0131\u0132\u0001\u0000\u0000\u0000\u0132"+ + "\'\u0001\u0000\u0000\u0000\u0133\u0131\u0001\u0000\u0000\u0000\u0134\u0135"+ + "\u0007\u0002\u0000\u0000\u0135)\u0001\u0000\u0000\u0000\u0136\u013b\u0003"+ + ".\u0017\u0000\u0137\u0138\u0005$\u0000\u0000\u0138\u013a\u0003.\u0017"+ + "\u0000\u0139\u0137\u0001\u0000\u0000\u0000\u013a\u013d\u0001\u0000\u0000"+ + "\u0000\u013b\u0139\u0001\u0000\u0000\u0000\u013b\u013c\u0001\u0000\u0000"+ + "\u0000\u013c+\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000"+ + "\u013e\u0143\u00030\u0018\u0000\u013f\u0140\u0005$\u0000\u0000\u0140\u0142"+ + "\u00030\u0018\u0000\u0141\u013f\u0001\u0000\u0000\u0000\u0142\u0145\u0001"+ + "\u0000\u0000\u0000\u0143\u0141\u0001\u0000\u0000\u0000\u0143\u0144\u0001"+ + "\u0000\u0000\u0000\u0144-\u0001\u0000\u0000\u0000\u0145\u0143\u0001\u0000"+ + "\u0000\u0000\u0146\u0147\u0007\u0003\u0000\u0000\u0147/\u0001\u0000\u0000"+ + "\u0000\u0148\u0149\u0007\u0004\u0000\u0000\u01491\u0001\u0000\u0000\u0000"+ + "\u014a\u0175\u0005-\u0000\u0000\u014b\u014c\u0003R)\u0000\u014c\u014d"+ + "\u0005A\u0000\u0000\u014d\u0175\u0001\u0000\u0000\u0000\u014e\u0175\u0003"+ + "P(\u0000\u014f\u0175\u0003R)\u0000\u0150\u0175\u0003L&\u0000\u0151\u0175"+ + "\u00050\u0000\u0000\u0152\u0175\u0003T*\u0000\u0153\u0154\u0005?\u0000"+ + "\u0000\u0154\u0159\u0003N\'\u0000\u0155\u0156\u0005\"\u0000\u0000\u0156"+ + "\u0158\u0003N\'\u0000\u0157\u0155\u0001\u0000\u0000\u0000\u0158\u015b"+ + "\u0001\u0000\u0000\u0000\u0159\u0157\u0001\u0000\u0000\u0000\u0159\u015a"+ + "\u0001\u0000\u0000\u0000\u015a\u015c\u0001\u0000\u0000\u0000\u015b\u0159"+ + "\u0001\u0000\u0000\u0000\u015c\u015d\u0005@\u0000\u0000\u015d\u0175\u0001"+ + "\u0000\u0000\u0000\u015e\u015f\u0005?\u0000\u0000\u015f\u0164\u0003L&"+ + "\u0000\u0160\u0161\u0005\"\u0000\u0000\u0161\u0163\u0003L&\u0000\u0162"+ + "\u0160\u0001\u0000\u0000\u0000\u0163\u0166\u0001\u0000\u0000\u0000\u0164"+ + "\u0162\u0001\u0000\u0000\u0000\u0164\u0165\u0001\u0000\u0000\u0000\u0165"+ + "\u0167\u0001\u0000\u0000\u0000\u0166\u0164\u0001\u0000\u0000\u0000\u0167"+ + "\u0168\u0005@\u0000\u0000\u0168\u0175\u0001\u0000\u0000\u0000\u0169\u016a"+ + "\u0005?\u0000\u0000\u016a\u016f\u0003T*\u0000\u016b\u016c\u0005\"\u0000"+ + "\u0000\u016c\u016e\u0003T*\u0000\u016d\u016b\u0001\u0000\u0000\u0000\u016e"+ + "\u0171\u0001\u0000\u0000\u0000\u016f\u016d\u0001\u0000\u0000\u0000\u016f"+ + "\u0170\u0001\u0000\u0000\u0000\u0170\u0172\u0001\u0000\u0000\u0000\u0171"+ + "\u016f\u0001\u0000\u0000\u0000\u0172\u0173\u0005@\u0000\u0000\u0173\u0175"+ + "\u0001\u0000\u0000\u0000\u0174\u014a\u0001\u0000\u0000\u0000\u0174\u014b"+ + "\u0001\u0000\u0000\u0000\u0174\u014e\u0001\u0000\u0000\u0000\u0174\u014f"+ + "\u0001\u0000\u0000\u0000\u0174\u0150\u0001\u0000\u0000\u0000\u0174\u0151"+ + "\u0001\u0000\u0000\u0000\u0174\u0152\u0001\u0000\u0000\u0000\u0174\u0153"+ + "\u0001\u0000\u0000\u0000\u0174\u015e\u0001\u0000\u0000\u0000\u0174\u0169"+ + "\u0001\u0000\u0000\u0000\u01753\u0001\u0000\u0000\u0000\u0176\u0177\u0005"+ + "\n\u0000\u0000\u0177\u0178\u0005\u001c\u0000\u0000\u01785\u0001\u0000"+ + "\u0000\u0000\u0179\u017a\u0005\u0010\u0000\u0000\u017a\u017f\u00038\u001c"+ + "\u0000\u017b\u017c\u0005\"\u0000\u0000\u017c\u017e\u00038\u001c\u0000"+ + "\u017d\u017b\u0001\u0000\u0000\u0000\u017e\u0181\u0001\u0000\u0000\u0000"+ + "\u017f\u017d\u0001\u0000\u0000\u0000\u017f\u0180\u0001\u0000\u0000\u0000"+ + "\u01807\u0001\u0000\u0000\u0000\u0181\u017f\u0001\u0000\u0000\u0000\u0182"+ + "\u0184\u0003\n\u0005\u0000\u0183\u0185\u0007\u0005\u0000\u0000\u0184\u0183"+ + "\u0001\u0000\u0000\u0000\u0184\u0185\u0001\u0000\u0000\u0000\u0185\u0188"+ + "\u0001\u0000\u0000\u0000\u0186\u0187\u0005.\u0000\u0000\u0187\u0189\u0007"+ + "\u0006\u0000\u0000\u0188\u0186\u0001\u0000\u0000\u0000\u0188\u0189\u0001"+ + "\u0000\u0000\u0000\u01899\u0001\u0000\u0000\u0000\u018a\u018b\u0005\t"+ + "\u0000\u0000\u018b\u0190\u0003,\u0016\u0000\u018c\u018d\u0005\"\u0000"+ + "\u0000\u018d\u018f\u0003,\u0016\u0000\u018e\u018c\u0001\u0000\u0000\u0000"+ + "\u018f\u0192\u0001\u0000\u0000\u0000\u0190\u018e\u0001\u0000\u0000\u0000"+ + "\u0190\u0191\u0001\u0000\u0000\u0000\u0191\u019d\u0001\u0000\u0000\u0000"+ + "\u0192\u0190\u0001\u0000\u0000\u0000\u0193\u0194\u0005\f\u0000\u0000\u0194"+ + "\u0199\u0003,\u0016\u0000\u0195\u0196\u0005\"\u0000\u0000\u0196\u0198"+ + "\u0003,\u0016\u0000\u0197\u0195\u0001\u0000\u0000\u0000\u0198\u019b\u0001"+ + "\u0000\u0000\u0000\u0199\u0197\u0001\u0000\u0000\u0000\u0199\u019a\u0001"+ + "\u0000\u0000\u0000\u019a\u019d\u0001\u0000\u0000\u0000\u019b\u0199\u0001"+ + "\u0000\u0000\u0000\u019c\u018a\u0001\u0000\u0000\u0000\u019c\u0193\u0001"+ + "\u0000\u0000\u0000\u019d;\u0001\u0000\u0000\u0000\u019e\u019f\u0005\u0002"+ + "\u0000\u0000\u019f\u01a4\u0003,\u0016\u0000\u01a0\u01a1\u0005\"\u0000"+ + "\u0000\u01a1\u01a3\u0003,\u0016\u0000\u01a2\u01a0\u0001\u0000\u0000\u0000"+ + "\u01a3\u01a6\u0001\u0000\u0000\u0000\u01a4\u01a2\u0001\u0000\u0000\u0000"+ + "\u01a4\u01a5\u0001\u0000\u0000\u0000\u01a5=\u0001\u0000\u0000\u0000\u01a6"+ + "\u01a4\u0001\u0000\u0000\u0000\u01a7\u01a8\u0005\r\u0000\u0000\u01a8\u01ad"+ + "\u0003@ \u0000\u01a9\u01aa\u0005\"\u0000\u0000\u01aa\u01ac\u0003@ \u0000"+ + "\u01ab\u01a9\u0001\u0000\u0000\u0000\u01ac\u01af\u0001\u0000\u0000\u0000"+ + "\u01ad\u01ab\u0001\u0000\u0000\u0000\u01ad\u01ae\u0001\u0000\u0000\u0000"+ + "\u01ae?\u0001\u0000\u0000\u0000\u01af\u01ad\u0001\u0000\u0000\u0000\u01b0"+ + "\u01b1\u0003,\u0016\u0000\u01b1\u01b2\u0005O\u0000\u0000\u01b2\u01b3\u0003"+ + ",\u0016\u0000\u01b3A\u0001\u0000\u0000\u0000\u01b4\u01b5\u0005\u0001\u0000"+ + "\u0000\u01b5\u01b6\u0003\u0012\t\u0000\u01b6\u01b8\u0003T*\u0000\u01b7"+ + "\u01b9\u0003H$\u0000\u01b8\u01b7\u0001\u0000\u0000\u0000\u01b8\u01b9\u0001"+ + "\u0000\u0000\u0000\u01b9C\u0001\u0000\u0000\u0000\u01ba\u01bb\u0005\u0007"+ + "\u0000\u0000\u01bb\u01bc\u0003\u0012\t\u0000\u01bc\u01bd\u0003T*\u0000"+ + "\u01bdE\u0001\u0000\u0000\u0000\u01be\u01bf\u0005\u000b\u0000\u0000\u01bf"+ + "\u01c0\u0003*\u0015\u0000\u01c0G\u0001\u0000\u0000\u0000\u01c1\u01c6\u0003"+ + "J%\u0000\u01c2\u01c3\u0005\"\u0000\u0000\u01c3\u01c5\u0003J%\u0000\u01c4"+ + "\u01c2\u0001\u0000\u0000\u0000\u01c5\u01c8\u0001\u0000\u0000\u0000\u01c6"+ + "\u01c4\u0001\u0000\u0000\u0000\u01c6\u01c7\u0001\u0000\u0000\u0000\u01c7"+ + "I\u0001\u0000\u0000\u0000\u01c8\u01c6\u0001\u0000\u0000\u0000\u01c9\u01ca"+ + "\u0003.\u0017\u0000\u01ca\u01cb\u0005!\u0000\u0000\u01cb\u01cc\u00032"+ + "\u0019\u0000\u01ccK\u0001\u0000\u0000\u0000\u01cd\u01ce\u0007\u0007\u0000"+ + "\u0000\u01ceM\u0001\u0000\u0000\u0000\u01cf\u01d2\u0003P(\u0000\u01d0"+ + "\u01d2\u0003R)\u0000\u01d1\u01cf\u0001\u0000\u0000\u0000\u01d1\u01d0\u0001"+ + "\u0000\u0000\u0000\u01d2O\u0001\u0000\u0000\u0000\u01d3\u01d5\u0007\u0000"+ + "\u0000\u0000\u01d4\u01d3\u0001\u0000\u0000\u0000\u01d4\u01d5\u0001\u0000"+ + "\u0000\u0000\u01d5\u01d6\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005\u001d"+ + "\u0000\u0000\u01d7Q\u0001\u0000\u0000\u0000\u01d8\u01da\u0007\u0000\u0000"+ + "\u0000\u01d9\u01d8\u0001\u0000\u0000\u0000\u01d9\u01da\u0001\u0000\u0000"+ + "\u0000\u01da\u01db\u0001\u0000\u0000\u0000\u01db\u01dc\u0005\u001c\u0000"+ + "\u0000\u01dcS\u0001\u0000\u0000\u0000\u01dd\u01de\u0005\u001b\u0000\u0000"+ + "\u01deU\u0001\u0000\u0000\u0000\u01df\u01e0\u0007\b\u0000\u0000\u01e0"+ + "W\u0001\u0000\u0000\u0000\u01e1\u01e2\u0005\u0005\u0000\u0000\u01e2\u01e3"+ + "\u0003Z-\u0000\u01e3Y\u0001\u0000\u0000\u0000\u01e4\u01e5\u0005?\u0000"+ + "\u0000\u01e5\u01e6\u0003\u0002\u0001\u0000\u01e6\u01e7\u0005@\u0000\u0000"+ + "\u01e7[\u0001\u0000\u0000\u0000\u01e8\u01e9\u0005\u000f\u0000\u0000\u01e9"+ + "\u01ed\u0005^\u0000\u0000\u01ea\u01eb\u0005\u000f\u0000\u0000\u01eb\u01ed"+ + "\u0005_\u0000\u0000\u01ec\u01e8\u0001\u0000\u0000\u0000\u01ec\u01ea\u0001"+ + "\u0000\u0000\u0000\u01ed]\u0001\u0000\u0000\u0000\u01ee\u01ef\u0005\u0003"+ + "\u0000\u0000\u01ef\u01f2\u0003(\u0014\u0000\u01f0\u01f1\u0005S\u0000\u0000"+ + "\u01f1\u01f3\u0003,\u0016\u0000\u01f2\u01f0\u0001\u0000\u0000\u0000\u01f2"+ + "\u01f3\u0001\u0000\u0000\u0000\u01f3\u01fd\u0001\u0000\u0000\u0000\u01f4"+ + "\u01f5\u0005T\u0000\u0000\u01f5\u01fa\u0003`0\u0000\u01f6\u01f7\u0005"+ + "\"\u0000\u0000\u01f7\u01f9\u0003`0\u0000\u01f8\u01f6\u0001\u0000\u0000"+ + "\u0000\u01f9\u01fc\u0001\u0000\u0000\u0000\u01fa\u01f8\u0001\u0000\u0000"+ + "\u0000\u01fa\u01fb\u0001\u0000\u0000\u0000\u01fb\u01fe\u0001\u0000\u0000"+ + "\u0000\u01fc\u01fa\u0001\u0000\u0000\u0000\u01fd\u01f4\u0001\u0000\u0000"+ + "\u0000\u01fd\u01fe\u0001\u0000\u0000\u0000\u01fe_\u0001\u0000\u0000\u0000"+ + "\u01ff\u0200\u0003,\u0016\u0000\u0200\u0201\u0005!\u0000\u0000\u0201\u0203"+ + "\u0001\u0000\u0000\u0000\u0202\u01ff\u0001\u0000\u0000\u0000\u0202\u0203"+ + "\u0001\u0000\u0000\u0000\u0203\u0204\u0001\u0000\u0000\u0000\u0204\u0205"+ + "\u0003,\u0016\u0000\u0205a\u0001\u0000\u0000\u00004mt\u0083\u008f\u0098"+ + "\u00a0\u00a4\u00ac\u00ae\u00b3\u00ba\u00bf\u00c6\u00cc\u00d4\u00d6\u00e0"+ + "\u00ea\u00ed\u00f9\u0101\u0109\u010d\u0116\u0120\u0124\u012a\u0131\u013b"+ + "\u0143\u0159\u0164\u016f\u0174\u017f\u0184\u0188\u0190\u0199\u019c\u01a4"+ + "\u01ad\u01b8\u01c6\u01d1\u01d4\u01d9\u01ec\u01f2\u01fa\u01fd\u0202"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/packages/kbn-esql/src/antlr/.antlr/esql_parser.tokens b/packages/kbn-esql/src/antlr/.antlr/esql_parser.tokens new file mode 100644 index 0000000000000..85a98c3a6d268 --- /dev/null +++ b/packages/kbn-esql/src/antlr/.antlr/esql_parser.tokens @@ -0,0 +1,117 @@ +DISSECT=1 +DROP=2 +ENRICH=3 +EVAL=4 +EXPLAIN=5 +FROM=6 +GROK=7 +INLINESTATS=8 +KEEP=9 +LIMIT=10 +MV_EXPAND=11 +PROJECT=12 +RENAME=13 +ROW=14 +SHOW=15 +SORT=16 +STATS=17 +WHERE=18 +UNKNOWN_CMD=19 +LINE_COMMENT=20 +MULTILINE_COMMENT=21 +WS=22 +EXPLAIN_WS=23 +EXPLAIN_LINE_COMMENT=24 +EXPLAIN_MULTILINE_COMMENT=25 +PIPE=26 +STRING=27 +INTEGER_LITERAL=28 +DECIMAL_LITERAL=29 +BY=30 +AND=31 +ASC=32 +ASSIGN=33 +COMMA=34 +DESC=35 +DOT=36 +FALSE=37 +FIRST=38 +LAST=39 +LP=40 +IN=41 +IS=42 +LIKE=43 +NOT=44 +NULL=45 +NULLS=46 +OR=47 +PARAM=48 +RLIKE=49 +RP=50 +TRUE=51 +EQ=52 +NEQ=53 +LT=54 +LTE=55 +GT=56 +GTE=57 +PLUS=58 +MINUS=59 +ASTERISK=60 +SLASH=61 +PERCENT=62 +OPENING_BRACKET=63 +CLOSING_BRACKET=64 +UNQUOTED_IDENTIFIER=65 +QUOTED_IDENTIFIER=66 +EXPR_LINE_COMMENT=67 +EXPR_MULTILINE_COMMENT=68 +EXPR_WS=69 +METADATA=70 +FROM_UNQUOTED_IDENTIFIER=71 +FROM_LINE_COMMENT=72 +FROM_MULTILINE_COMMENT=73 +FROM_WS=74 +PROJECT_UNQUOTED_IDENTIFIER=75 +PROJECT_LINE_COMMENT=76 +PROJECT_MULTILINE_COMMENT=77 +PROJECT_WS=78 +AS=79 +RENAME_LINE_COMMENT=80 +RENAME_MULTILINE_COMMENT=81 +RENAME_WS=82 +ON=83 +WITH=84 +ENRICH_LINE_COMMENT=85 +ENRICH_MULTILINE_COMMENT=86 +ENRICH_WS=87 +ENRICH_FIELD_LINE_COMMENT=88 +ENRICH_FIELD_MULTILINE_COMMENT=89 +ENRICH_FIELD_WS=90 +MVEXPAND_LINE_COMMENT=91 +MVEXPAND_MULTILINE_COMMENT=92 +MVEXPAND_WS=93 +INFO=94 +FUNCTIONS=95 +SHOW_LINE_COMMENT=96 +SHOW_MULTILINE_COMMENT=97 +SHOW_WS=98 +'|'=26 +'='=33 +','=34 +'.'=36 +'('=40 +'?'=48 +')'=50 +'=='=52 +'!='=53 +'<'=54 +'<='=55 +'>'=56 +'>='=57 +'+'=58 +'-'=59 +'*'=60 +'/'=61 +'%'=62 +']'=64 diff --git a/packages/kbn-mock-idp-plugin/common/utils.ts b/packages/kbn-mock-idp-plugin/common/utils.ts index 5d55fbc565685..f98425f08248f 100644 --- a/packages/kbn-mock-idp-plugin/common/utils.ts +++ b/packages/kbn-mock-idp-plugin/common/utils.ts @@ -149,19 +149,19 @@ export async function createSAMLResponse(options: { `; - const signature = new SignedXml(); + const signature = new SignedXml({ privateKey: await readFile(KBN_KEY_PATH) }); signature.signatureAlgorithm = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'; - signature.signingKey = await readFile(KBN_KEY_PATH); + signature.canonicalizationAlgorithm = 'http://www.w3.org/2001/10/xml-exc-c14n#'; // Adds a reference to a `Assertion` xml element and an array of transform algorithms to be used during signing. - signature.addReference( - `//*[local-name(.)='Assertion']`, - [ + signature.addReference({ + xpath: `//*[local-name(.)='Assertion']`, + digestAlgorithm: 'http://www.w3.org/2001/04/xmlenc#sha256', + transforms: [ 'http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/2001/10/xml-exc-c14n#', ], - 'http://www.w3.org/2001/04/xmlenc#sha256' - ); + }); signature.computeSignature(samlAssertionTemplateXML, { location: { reference: `//*[local-name(.)='Issuer']`, action: 'after' }, diff --git a/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 b/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 index 90a892d8d1dd6..d22db2818d4e7 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 +++ b/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 @@ -8,23 +8,25 @@ lexer grammar esql_lexer; options { } -DISSECT : D I S S E C T -> pushMode(EXPRESSION); -DROP : D R O P -> pushMode(SOURCE_IDENTIFIERS); -ENRICH : E N R I C H -> pushMode(SOURCE_IDENTIFIERS); -EVAL : E V A L -> pushMode(EXPRESSION); -FROM : F R O M -> pushMode(SOURCE_IDENTIFIERS); -GROK : G R O K -> pushMode(EXPRESSION); -KEEP : K E E P -> pushMode(SOURCE_IDENTIFIERS); -LIMIT : L I M I T -> pushMode(EXPRESSION); -MV_EXPAND : M V UNDERSCORE E X P A N D -> pushMode(SOURCE_IDENTIFIERS); -PROJECT : P R O J E C T -> pushMode(SOURCE_IDENTIFIERS); -RENAME : R E N A M E -> pushMode(SOURCE_IDENTIFIERS); -ROW : R O W -> pushMode(EXPRESSION); -SHOW : S H O W -> pushMode(EXPRESSION); -SORT : S O R T -> pushMode(EXPRESSION); -STATS : S T A T S -> pushMode(EXPRESSION); -WHERE : W H E R E -> pushMode(EXPRESSION); -UNKNOWN_CMD : ~[ \r\n\t[\]/]+ -> pushMode(EXPRESSION); +DISSECT : D I S S E C T -> pushMode(EXPRESSION_MODE); +DROP : D R O P -> pushMode(PROJECT_MODE); +ENRICH : E N R I C H -> pushMode(ENRICH_MODE); +EVAL : E V A L -> pushMode(EXPRESSION_MODE); +EXPLAIN : E X P L A I N -> pushMode(EXPLAIN_MODE); +FROM : F R O M -> pushMode(FROM_MODE); +GROK : G R O K -> pushMode(EXPRESSION_MODE); +INLINESTATS : I N L I N E S T A T S -> pushMode(EXPRESSION_MODE); +KEEP : K E E P -> pushMode(PROJECT_MODE); +LIMIT : L I M I T -> pushMode(EXPRESSION_MODE); +MV_EXPAND : M V UNDERSCORE E X P A N D -> pushMode(MVEXPAND_MODE); +PROJECT : P R O J E C T -> pushMode(PROJECT_MODE); +RENAME : R E N A M E -> pushMode(RENAME_MODE); +ROW : R O W -> pushMode(EXPRESSION_MODE); +SHOW : S H O W -> pushMode(SHOW_MODE); +SORT : S O R T -> pushMode(EXPRESSION_MODE); +STATS : S T A T S -> pushMode(EXPRESSION_MODE); +WHERE : W H E R E -> pushMode(EXPRESSION_MODE); +UNKNOWN_CMD : ~[ \r\n\t[\]/]+ -> pushMode(EXPRESSION_MODE); LINE_COMMENT : '//' ~[\r\n]* '\r'? '\n'? -> channel(HIDDEN) @@ -37,8 +39,20 @@ MULTILINE_COMMENT WS : [ \r\n\t]+ -> channel(HIDDEN) ; - -mode EXPRESSION; +// +// Explain +// +mode EXPLAIN_MODE; +EXPLAIN_OPENING_BRACKET : OPENING_BRACKET -> type(OPENING_BRACKET), pushMode(DEFAULT_MODE); +EXPLAIN_PIPE : PIPE -> type(PIPE), popMode; +EXPLAIN_WS : WS -> channel(HIDDEN); +EXPLAIN_LINE_COMMENT : LINE_COMMENT -> channel(HIDDEN); +EXPLAIN_MULTILINE_COMMENT : MULTILINE_COMMENT -> channel(HIDDEN); + +// +// Expression - used by most command +// +mode EXPRESSION_MODE; PIPE : '|' -> popMode; @@ -62,6 +76,27 @@ fragment EXPONENT : [Ee] [+-]? DIGIT+ ; +fragment ASPERAND + : '@' + ; + +fragment BACKQUOTE + : '`' + ; + +fragment BACKQUOTE_BLOCK + : ~'`' + | '``' + ; + +fragment UNDERSCORE + : '_' + ; + +fragment UNQUOTED_ID_BODY + : (LETTER | DIGIT | UNDERSCORE) + ; + STRING : '"' (ESCAPE_SEQUENCE | UNESCAPED_CHARS)* '"' | '"""' (~[\r\n])*? '"""' '"'? '"'? @@ -101,9 +136,6 @@ PARAM: '?'; RLIKE: R L I K E; RP : ')'; TRUE : T R U E; -INFO : I N F O; -FUNCTIONS : F U N C T I O N S; -UNDERSCORE: '_'; EQ : '=='; NEQ : '!='; @@ -123,19 +155,18 @@ PERCENT : '%'; // mode. Thus, the two popModes on CLOSING_BRACKET. The other way could as // the start of a multivalued field constant. To line up with the double pop // the explain mode needs, we double push when we see that. -OPENING_BRACKET : '[' -> pushMode(EXPRESSION), pushMode(EXPRESSION); +OPENING_BRACKET : '[' -> pushMode(EXPRESSION_MODE), pushMode(EXPRESSION_MODE); CLOSING_BRACKET : ']' -> popMode, popMode; - UNQUOTED_IDENTIFIER - : LETTER (LETTER | DIGIT | '_')* + : LETTER UNQUOTED_ID_BODY* // only allow @ at beginning of identifier to keep the option to allow @ as infix operator in the future // also, single `_` and `@` characters are not valid identifiers - | ('_' | '@') (LETTER | DIGIT | '_')+ + | (UNDERSCORE | ASPERAND) UNQUOTED_ID_BODY+ ; QUOTED_IDENTIFIER - : '`' ( ~'`' | '``' )* '`' + : BACKQUOTE BACKQUOTE_BLOCK+ BACKQUOTE ; EXPR_LINE_COMMENT @@ -149,43 +180,206 @@ EXPR_MULTILINE_COMMENT EXPR_WS : WS -> channel(HIDDEN) ; +// +// FROM command +// +mode FROM_MODE; +FROM_PIPE : PIPE -> type(PIPE), popMode; +FROM_OPENING_BRACKET : OPENING_BRACKET -> type(OPENING_BRACKET), pushMode(FROM_MODE), pushMode(FROM_MODE); +FROM_CLOSING_BRACKET : CLOSING_BRACKET -> type(CLOSING_BRACKET), popMode, popMode; +FROM_COMMA : COMMA -> type(COMMA); +FROM_ASSIGN : ASSIGN -> type(ASSIGN); +METADATA: M E T A D A T A; +fragment FROM_UNQUOTED_IDENTIFIER_PART + : ~[=`|,[\]/ \t\r\n] + | '/' ~[*/] // allow single / but not followed by another / or * which would start a comment + ; -mode SOURCE_IDENTIFIERS; +FROM_UNQUOTED_IDENTIFIER + : FROM_UNQUOTED_IDENTIFIER_PART+ + ; + +FROM_QUOTED_IDENTIFIER + : QUOTED_IDENTIFIER -> type(QUOTED_IDENTIFIER) + ; + +FROM_LINE_COMMENT + : LINE_COMMENT -> channel(HIDDEN) + ; + +FROM_MULTILINE_COMMENT + : MULTILINE_COMMENT -> channel(HIDDEN) + ; + +FROM_WS + : WS -> channel(HIDDEN) + ; +// +// DROP, KEEP, PROJECT +// +mode PROJECT_MODE; +PROJECT_PIPE : PIPE -> type(PIPE), popMode; +PROJECT_DOT: DOT -> type(DOT); +PROJECT_COMMA : COMMA -> type(COMMA); + +fragment UNQUOTED_ID_BODY_WITH_PATTERN + : (LETTER | DIGIT | UNDERSCORE | ASTERISK) + ; + +PROJECT_UNQUOTED_IDENTIFIER + : (LETTER | ASTERISK) UNQUOTED_ID_BODY_WITH_PATTERN* + | (UNDERSCORE | ASPERAND) UNQUOTED_ID_BODY_WITH_PATTERN+ + ; + +PROJECT_QUOTED_IDENTIFIER + : QUOTED_IDENTIFIER -> type(QUOTED_IDENTIFIER) + ; + +PROJECT_LINE_COMMENT + : LINE_COMMENT -> channel(HIDDEN) + ; + +PROJECT_MULTILINE_COMMENT + : MULTILINE_COMMENT -> channel(HIDDEN) + ; + +PROJECT_WS + : WS -> channel(HIDDEN) + ; +// +// | RENAME a.b AS x, c AS y +// +mode RENAME_MODE; +RENAME_PIPE : PIPE -> type(PIPE), popMode; +RENAME_ASSIGN : ASSIGN -> type(ASSIGN); +RENAME_COMMA : COMMA -> type(COMMA); +RENAME_DOT: DOT -> type(DOT); -SRC_PIPE : '|' -> type(PIPE), popMode; -SRC_OPENING_BRACKET : '[' -> type(OPENING_BRACKET), pushMode(SOURCE_IDENTIFIERS), pushMode(SOURCE_IDENTIFIERS); -SRC_CLOSING_BRACKET : ']' -> popMode, popMode, type(CLOSING_BRACKET); -SRC_COMMA : ',' -> type(COMMA); -SRC_ASSIGN : '=' -> type(ASSIGN); AS : A S; -METADATA: M E T A D A T A; -ON : O N; -WITH : W I T H; -SRC_UNQUOTED_IDENTIFIER - : SRC_UNQUOTED_IDENTIFIER_PART+ +RENAME_QUOTED_IDENTIFIER + : QUOTED_IDENTIFIER -> type(QUOTED_IDENTIFIER) ; -fragment SRC_UNQUOTED_IDENTIFIER_PART - : ~[=`|,[\]/ \t\r\n]+ - | '/' ~[*/] // allow single / but not followed by another / or * which would start a comment +// use the unquoted pattern to let the parser invalidate fields with * +RENAME_UNQUOTED_IDENTIFIER + : PROJECT_UNQUOTED_IDENTIFIER -> type(PROJECT_UNQUOTED_IDENTIFIER) ; -SRC_QUOTED_IDENTIFIER - : QUOTED_IDENTIFIER +RENAME_LINE_COMMENT + : LINE_COMMENT -> channel(HIDDEN) + ; + +RENAME_MULTILINE_COMMENT + : MULTILINE_COMMENT -> channel(HIDDEN) ; -SRC_LINE_COMMENT +RENAME_WS + : WS -> channel(HIDDEN) + ; + +// | ENRICH ON key WITH fields +mode ENRICH_MODE; +ENRICH_PIPE : PIPE -> type(PIPE), popMode; + +ON : O N -> pushMode(ENRICH_FIELD_MODE); +WITH : W I T H -> pushMode(ENRICH_FIELD_MODE); + +// use the unquoted pattern to let the parser invalidate fields with * +ENRICH_POLICY_UNQUOTED_IDENTIFIER + : FROM_UNQUOTED_IDENTIFIER -> type(FROM_UNQUOTED_IDENTIFIER) + ; + +ENRICH_QUOTED_IDENTIFIER + : QUOTED_IDENTIFIER -> type(QUOTED_IDENTIFIER) + ; + +ENRICH_LINE_COMMENT + : LINE_COMMENT -> channel(HIDDEN) + ; + +ENRICH_MULTILINE_COMMENT + : MULTILINE_COMMENT -> channel(HIDDEN) + ; + +ENRICH_WS + : WS -> channel(HIDDEN) + ; + +// submode for Enrich to allow different lexing between policy identifier (loose) and field identifiers +mode ENRICH_FIELD_MODE; +ENRICH_FIELD_PIPE : PIPE -> type(PIPE), popMode, popMode; +ENRICH_FIELD_ASSIGN : ASSIGN -> type(ASSIGN); +ENRICH_FIELD_COMMA : COMMA -> type(COMMA); +ENRICH_FIELD_DOT: DOT -> type(DOT); + +ENRICH_FIELD_WITH : WITH -> type(WITH) ; + +ENRICH_FIELD_UNQUOTED_IDENTIFIER + : PROJECT_UNQUOTED_IDENTIFIER -> type(PROJECT_UNQUOTED_IDENTIFIER) + ; + +ENRICH_FIELD_QUOTED_IDENTIFIER + : QUOTED_IDENTIFIER -> type(QUOTED_IDENTIFIER) + ; + +ENRICH_FIELD_LINE_COMMENT + : LINE_COMMENT -> channel(HIDDEN) + ; + +ENRICH_FIELD_MULTILINE_COMMENT + : MULTILINE_COMMENT -> channel(HIDDEN) + ; + +ENRICH_FIELD_WS + : WS -> channel(HIDDEN) + ; + +mode MVEXPAND_MODE; +MVEXPAND_PIPE : PIPE -> type(PIPE), popMode; +MVEXPAND_DOT: DOT -> type(DOT); + +MVEXPAND_QUOTED_IDENTIFIER + : QUOTED_IDENTIFIER -> type(QUOTED_IDENTIFIER) + ; + +MVEXPAND_UNQUOTED_IDENTIFIER + : UNQUOTED_IDENTIFIER -> type(UNQUOTED_IDENTIFIER) + ; + + +MVEXPAND_LINE_COMMENT + : LINE_COMMENT -> channel(HIDDEN) + ; + +MVEXPAND_MULTILINE_COMMENT + : MULTILINE_COMMENT -> channel(HIDDEN) + ; + +MVEXPAND_WS + : WS -> channel(HIDDEN) + ; + +// +// SHOW INFO +// +mode SHOW_MODE; +SHOW_PIPE : PIPE -> type(PIPE), popMode; + +INFO : I N F O; +FUNCTIONS : F U N C T I O N S; + +SHOW_LINE_COMMENT : LINE_COMMENT -> channel(HIDDEN) ; -SRC_MULTILINE_COMMENT +SHOW_MULTILINE_COMMENT : MULTILINE_COMMENT -> channel(HIDDEN) ; -SRC_WS +SHOW_WS : WS -> channel(HIDDEN) ; diff --git a/packages/kbn-monaco/src/esql/antlr/esql_lexer.interp b/packages/kbn-monaco/src/esql/antlr/esql_lexer.interp index 0ff1f62c47445..d2516b469b29d 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_lexer.interp +++ b/packages/kbn-monaco/src/esql/antlr/esql_lexer.interp @@ -25,11 +25,16 @@ null null null null +'|' null null null null null +null +'=' +',' +null '.' null null @@ -46,9 +51,6 @@ null null ')' null -null -null -'_' '==' '!=' '<' @@ -76,6 +78,26 @@ null null null null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null token symbolic names: null @@ -83,8 +105,10 @@ DISSECT DROP ENRICH EVAL +EXPLAIN FROM GROK +INLINESTATS KEEP LIMIT MV_EXPAND @@ -99,6 +123,9 @@ UNKNOWN_CMD LINE_COMMENT MULTILINE_COMMENT WS +EXPLAIN_WS +EXPLAIN_LINE_COMMENT +EXPLAIN_MULTILINE_COMMENT PIPE STRING INTEGER_LITERAL @@ -125,9 +152,6 @@ PARAM RLIKE RP TRUE -INFO -FUNCTIONS -UNDERSCORE EQ NEQ LT @@ -146,23 +170,45 @@ QUOTED_IDENTIFIER EXPR_LINE_COMMENT EXPR_MULTILINE_COMMENT EXPR_WS -AS METADATA +FROM_UNQUOTED_IDENTIFIER +FROM_LINE_COMMENT +FROM_MULTILINE_COMMENT +FROM_WS +PROJECT_UNQUOTED_IDENTIFIER +PROJECT_LINE_COMMENT +PROJECT_MULTILINE_COMMENT +PROJECT_WS +AS +RENAME_LINE_COMMENT +RENAME_MULTILINE_COMMENT +RENAME_WS ON WITH -SRC_UNQUOTED_IDENTIFIER -SRC_QUOTED_IDENTIFIER -SRC_LINE_COMMENT -SRC_MULTILINE_COMMENT -SRC_WS +ENRICH_LINE_COMMENT +ENRICH_MULTILINE_COMMENT +ENRICH_WS +ENRICH_FIELD_LINE_COMMENT +ENRICH_FIELD_MULTILINE_COMMENT +ENRICH_FIELD_WS +MVEXPAND_LINE_COMMENT +MVEXPAND_MULTILINE_COMMENT +MVEXPAND_WS +INFO +FUNCTIONS +SHOW_LINE_COMMENT +SHOW_MULTILINE_COMMENT +SHOW_WS rule names: DISSECT DROP ENRICH EVAL +EXPLAIN FROM GROK +INLINESTATS KEEP LIMIT MV_EXPAND @@ -177,12 +223,22 @@ UNKNOWN_CMD LINE_COMMENT MULTILINE_COMMENT WS +EXPLAIN_OPENING_BRACKET +EXPLAIN_PIPE +EXPLAIN_WS +EXPLAIN_LINE_COMMENT +EXPLAIN_MULTILINE_COMMENT PIPE DIGIT LETTER ESCAPE_SEQUENCE UNESCAPED_CHARS EXPONENT +ASPERAND +BACKQUOTE +BACKQUOTE_BLOCK +UNDERSCORE +UNQUOTED_ID_BODY STRING INTEGER_LITERAL DECIMAL_LITERAL @@ -208,9 +264,6 @@ PARAM RLIKE RP TRUE -INFO -FUNCTIONS -UNDERSCORE EQ NEQ LT @@ -229,21 +282,68 @@ QUOTED_IDENTIFIER EXPR_LINE_COMMENT EXPR_MULTILINE_COMMENT EXPR_WS -SRC_PIPE -SRC_OPENING_BRACKET -SRC_CLOSING_BRACKET -SRC_COMMA -SRC_ASSIGN -AS +FROM_PIPE +FROM_OPENING_BRACKET +FROM_CLOSING_BRACKET +FROM_COMMA +FROM_ASSIGN METADATA +FROM_UNQUOTED_IDENTIFIER_PART +FROM_UNQUOTED_IDENTIFIER +FROM_QUOTED_IDENTIFIER +FROM_LINE_COMMENT +FROM_MULTILINE_COMMENT +FROM_WS +PROJECT_PIPE +PROJECT_DOT +PROJECT_COMMA +UNQUOTED_ID_BODY_WITH_PATTERN +PROJECT_UNQUOTED_IDENTIFIER +PROJECT_QUOTED_IDENTIFIER +PROJECT_LINE_COMMENT +PROJECT_MULTILINE_COMMENT +PROJECT_WS +RENAME_PIPE +RENAME_ASSIGN +RENAME_COMMA +RENAME_DOT +AS +RENAME_QUOTED_IDENTIFIER +RENAME_UNQUOTED_IDENTIFIER +RENAME_LINE_COMMENT +RENAME_MULTILINE_COMMENT +RENAME_WS +ENRICH_PIPE ON WITH -SRC_UNQUOTED_IDENTIFIER -SRC_UNQUOTED_IDENTIFIER_PART -SRC_QUOTED_IDENTIFIER -SRC_LINE_COMMENT -SRC_MULTILINE_COMMENT -SRC_WS +ENRICH_POLICY_UNQUOTED_IDENTIFIER +ENRICH_QUOTED_IDENTIFIER +ENRICH_LINE_COMMENT +ENRICH_MULTILINE_COMMENT +ENRICH_WS +ENRICH_FIELD_PIPE +ENRICH_FIELD_ASSIGN +ENRICH_FIELD_COMMA +ENRICH_FIELD_DOT +ENRICH_FIELD_WITH +ENRICH_FIELD_UNQUOTED_IDENTIFIER +ENRICH_FIELD_QUOTED_IDENTIFIER +ENRICH_FIELD_LINE_COMMENT +ENRICH_FIELD_MULTILINE_COMMENT +ENRICH_FIELD_WS +MVEXPAND_PIPE +MVEXPAND_DOT +MVEXPAND_QUOTED_IDENTIFIER +MVEXPAND_UNQUOTED_IDENTIFIER +MVEXPAND_LINE_COMMENT +MVEXPAND_MULTILINE_COMMENT +MVEXPAND_WS +SHOW_PIPE +INFO +FUNCTIONS +SHOW_LINE_COMMENT +SHOW_MULTILINE_COMMENT +SHOW_WS A B C @@ -277,8 +377,15 @@ HIDDEN mode names: DEFAULT_MODE -EXPRESSION -SOURCE_IDENTIFIERS +EXPLAIN_MODE +EXPRESSION_MODE +FROM_MODE +PROJECT_MODE +RENAME_MODE +ENRICH_MODE +ENRICH_FIELD_MODE +MVEXPAND_MODE +SHOW_MODE atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 78, 813, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 6, 18, 362, 10, 18, 13, 18, 14, 18, 363, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 372, 10, 19, 12, 19, 14, 19, 375, 11, 19, 3, 19, 5, 19, 378, 10, 19, 3, 19, 5, 19, 381, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 390, 10, 20, 12, 20, 14, 20, 393, 11, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 6, 21, 401, 10, 21, 13, 21, 14, 21, 402, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 5, 27, 422, 10, 27, 3, 27, 6, 27, 425, 10, 27, 13, 27, 14, 27, 426, 3, 28, 3, 28, 3, 28, 7, 28, 432, 10, 28, 12, 28, 14, 28, 435, 11, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 443, 10, 28, 12, 28, 14, 28, 446, 11, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 453, 10, 28, 3, 28, 5, 28, 456, 10, 28, 5, 28, 458, 10, 28, 3, 29, 6, 29, 461, 10, 29, 13, 29, 14, 29, 462, 3, 30, 6, 30, 466, 10, 30, 13, 30, 14, 30, 467, 3, 30, 3, 30, 7, 30, 472, 10, 30, 12, 30, 14, 30, 475, 11, 30, 3, 30, 3, 30, 6, 30, 479, 10, 30, 13, 30, 14, 30, 480, 3, 30, 6, 30, 484, 10, 30, 13, 30, 14, 30, 485, 3, 30, 3, 30, 7, 30, 490, 10, 30, 12, 30, 14, 30, 493, 11, 30, 5, 30, 495, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 6, 30, 501, 10, 30, 13, 30, 14, 30, 502, 3, 30, 3, 30, 5, 30, 507, 10, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 651, 10, 69, 12, 69, 14, 69, 654, 11, 69, 3, 69, 3, 69, 3, 69, 3, 69, 6, 69, 660, 10, 69, 13, 69, 14, 69, 661, 5, 69, 664, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 670, 10, 70, 12, 70, 14, 70, 673, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 6, 83, 735, 10, 83, 13, 83, 14, 83, 736, 3, 84, 6, 84, 740, 10, 84, 13, 84, 14, 84, 741, 3, 84, 3, 84, 5, 84, 746, 10, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 94, 3, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 97, 3, 97, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 106, 3, 106, 3, 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 114, 3, 114, 4, 391, 444, 2, 2, 115, 5, 2, 3, 7, 2, 4, 9, 2, 5, 11, 2, 6, 13, 2, 7, 15, 2, 8, 17, 2, 9, 19, 2, 10, 21, 2, 11, 23, 2, 12, 25, 2, 13, 27, 2, 14, 29, 2, 15, 31, 2, 16, 33, 2, 17, 35, 2, 18, 37, 2, 19, 39, 2, 20, 41, 2, 21, 43, 2, 22, 45, 2, 23, 47, 2, 2, 49, 2, 2, 51, 2, 2, 53, 2, 2, 55, 2, 2, 57, 2, 24, 59, 2, 25, 61, 2, 26, 63, 2, 27, 65, 2, 28, 67, 2, 29, 69, 2, 30, 71, 2, 31, 73, 2, 32, 75, 2, 33, 77, 2, 34, 79, 2, 35, 81, 2, 36, 83, 2, 37, 85, 2, 38, 87, 2, 39, 89, 2, 40, 91, 2, 41, 93, 2, 42, 95, 2, 43, 97, 2, 44, 99, 2, 45, 101, 2, 46, 103, 2, 47, 105, 2, 48, 107, 2, 49, 109, 2, 50, 111, 2, 51, 113, 2, 52, 115, 2, 53, 117, 2, 54, 119, 2, 55, 121, 2, 56, 123, 2, 57, 125, 2, 58, 127, 2, 59, 129, 2, 60, 131, 2, 61, 133, 2, 62, 135, 2, 63, 137, 2, 64, 139, 2, 65, 141, 2, 66, 143, 2, 67, 145, 2, 68, 147, 2, 69, 149, 2, 2, 151, 2, 2, 153, 2, 2, 155, 2, 2, 157, 2, 2, 159, 2, 70, 161, 2, 71, 163, 2, 72, 165, 2, 73, 167, 2, 74, 169, 2, 2, 171, 2, 75, 173, 2, 76, 175, 2, 77, 177, 2, 78, 179, 2, 2, 181, 2, 2, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 5, 2, 3, 4, 40, 8, 2, 11, 12, 15, 15, 34, 34, 49, 49, 93, 93, 95, 95, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 3, 2, 50, 59, 4, 2, 67, 92, 99, 124, 7, 2, 36, 36, 94, 94, 112, 112, 116, 116, 118, 118, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 66, 66, 97, 97, 3, 2, 98, 98, 12, 2, 11, 12, 15, 15, 34, 34, 46, 46, 49, 49, 63, 63, 93, 93, 95, 95, 98, 98, 126, 126, 4, 2, 44, 44, 49, 49, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 816, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 3, 45, 3, 2, 2, 2, 3, 57, 3, 2, 2, 2, 3, 59, 3, 2, 2, 2, 3, 61, 3, 2, 2, 2, 3, 63, 3, 2, 2, 2, 3, 65, 3, 2, 2, 2, 3, 67, 3, 2, 2, 2, 3, 69, 3, 2, 2, 2, 3, 71, 3, 2, 2, 2, 3, 73, 3, 2, 2, 2, 3, 75, 3, 2, 2, 2, 3, 77, 3, 2, 2, 2, 3, 79, 3, 2, 2, 2, 3, 81, 3, 2, 2, 2, 3, 83, 3, 2, 2, 2, 3, 85, 3, 2, 2, 2, 3, 87, 3, 2, 2, 2, 3, 89, 3, 2, 2, 2, 3, 91, 3, 2, 2, 2, 3, 93, 3, 2, 2, 2, 3, 95, 3, 2, 2, 2, 3, 97, 3, 2, 2, 2, 3, 99, 3, 2, 2, 2, 3, 101, 3, 2, 2, 2, 3, 103, 3, 2, 2, 2, 3, 105, 3, 2, 2, 2, 3, 107, 3, 2, 2, 2, 3, 109, 3, 2, 2, 2, 3, 111, 3, 2, 2, 2, 3, 113, 3, 2, 2, 2, 3, 115, 3, 2, 2, 2, 3, 117, 3, 2, 2, 2, 3, 119, 3, 2, 2, 2, 3, 121, 3, 2, 2, 2, 3, 123, 3, 2, 2, 2, 3, 125, 3, 2, 2, 2, 3, 127, 3, 2, 2, 2, 3, 129, 3, 2, 2, 2, 3, 131, 3, 2, 2, 2, 3, 133, 3, 2, 2, 2, 3, 135, 3, 2, 2, 2, 3, 137, 3, 2, 2, 2, 3, 139, 3, 2, 2, 2, 3, 141, 3, 2, 2, 2, 3, 143, 3, 2, 2, 2, 3, 145, 3, 2, 2, 2, 3, 147, 3, 2, 2, 2, 4, 149, 3, 2, 2, 2, 4, 151, 3, 2, 2, 2, 4, 153, 3, 2, 2, 2, 4, 155, 3, 2, 2, 2, 4, 157, 3, 2, 2, 2, 4, 159, 3, 2, 2, 2, 4, 161, 3, 2, 2, 2, 4, 163, 3, 2, 2, 2, 4, 165, 3, 2, 2, 2, 4, 167, 3, 2, 2, 2, 4, 171, 3, 2, 2, 2, 4, 173, 3, 2, 2, 2, 4, 175, 3, 2, 2, 2, 4, 177, 3, 2, 2, 2, 5, 231, 3, 2, 2, 2, 7, 241, 3, 2, 2, 2, 9, 248, 3, 2, 2, 2, 11, 257, 3, 2, 2, 2, 13, 264, 3, 2, 2, 2, 15, 271, 3, 2, 2, 2, 17, 278, 3, 2, 2, 2, 19, 285, 3, 2, 2, 2, 21, 293, 3, 2, 2, 2, 23, 305, 3, 2, 2, 2, 25, 315, 3, 2, 2, 2, 27, 324, 3, 2, 2, 2, 29, 330, 3, 2, 2, 2, 31, 337, 3, 2, 2, 2, 33, 344, 3, 2, 2, 2, 35, 352, 3, 2, 2, 2, 37, 361, 3, 2, 2, 2, 39, 367, 3, 2, 2, 2, 41, 384, 3, 2, 2, 2, 43, 400, 3, 2, 2, 2, 45, 406, 3, 2, 2, 2, 47, 410, 3, 2, 2, 2, 49, 412, 3, 2, 2, 2, 51, 414, 3, 2, 2, 2, 53, 417, 3, 2, 2, 2, 55, 419, 3, 2, 2, 2, 57, 457, 3, 2, 2, 2, 59, 460, 3, 2, 2, 2, 61, 506, 3, 2, 2, 2, 63, 508, 3, 2, 2, 2, 65, 511, 3, 2, 2, 2, 67, 515, 3, 2, 2, 2, 69, 519, 3, 2, 2, 2, 71, 521, 3, 2, 2, 2, 73, 523, 3, 2, 2, 2, 75, 528, 3, 2, 2, 2, 77, 530, 3, 2, 2, 2, 79, 536, 3, 2, 2, 2, 81, 542, 3, 2, 2, 2, 83, 547, 3, 2, 2, 2, 85, 549, 3, 2, 2, 2, 87, 552, 3, 2, 2, 2, 89, 555, 3, 2, 2, 2, 91, 560, 3, 2, 2, 2, 93, 564, 3, 2, 2, 2, 95, 569, 3, 2, 2, 2, 97, 575, 3, 2, 2, 2, 99, 578, 3, 2, 2, 2, 101, 580, 3, 2, 2, 2, 103, 586, 3, 2, 2, 2, 105, 588, 3, 2, 2, 2, 107, 593, 3, 2, 2, 2, 109, 598, 3, 2, 2, 2, 111, 608, 3, 2, 2, 2, 113, 610, 3, 2, 2, 2, 115, 613, 3, 2, 2, 2, 117, 616, 3, 2, 2, 2, 119, 618, 3, 2, 2, 2, 121, 621, 3, 2, 2, 2, 123, 623, 3, 2, 2, 2, 125, 626, 3, 2, 2, 2, 127, 628, 3, 2, 2, 2, 129, 630, 3, 2, 2, 2, 131, 632, 3, 2, 2, 2, 133, 634, 3, 2, 2, 2, 135, 636, 3, 2, 2, 2, 137, 641, 3, 2, 2, 2, 139, 663, 3, 2, 2, 2, 141, 665, 3, 2, 2, 2, 143, 676, 3, 2, 2, 2, 145, 680, 3, 2, 2, 2, 147, 684, 3, 2, 2, 2, 149, 688, 3, 2, 2, 2, 151, 693, 3, 2, 2, 2, 153, 699, 3, 2, 2, 2, 155, 705, 3, 2, 2, 2, 157, 709, 3, 2, 2, 2, 159, 713, 3, 2, 2, 2, 161, 716, 3, 2, 2, 2, 163, 725, 3, 2, 2, 2, 165, 728, 3, 2, 2, 2, 167, 734, 3, 2, 2, 2, 169, 745, 3, 2, 2, 2, 171, 747, 3, 2, 2, 2, 173, 749, 3, 2, 2, 2, 175, 753, 3, 2, 2, 2, 177, 757, 3, 2, 2, 2, 179, 761, 3, 2, 2, 2, 181, 763, 3, 2, 2, 2, 183, 765, 3, 2, 2, 2, 185, 767, 3, 2, 2, 2, 187, 769, 3, 2, 2, 2, 189, 771, 3, 2, 2, 2, 191, 773, 3, 2, 2, 2, 193, 775, 3, 2, 2, 2, 195, 777, 3, 2, 2, 2, 197, 779, 3, 2, 2, 2, 199, 781, 3, 2, 2, 2, 201, 783, 3, 2, 2, 2, 203, 785, 3, 2, 2, 2, 205, 787, 3, 2, 2, 2, 207, 789, 3, 2, 2, 2, 209, 791, 3, 2, 2, 2, 211, 793, 3, 2, 2, 2, 213, 795, 3, 2, 2, 2, 215, 797, 3, 2, 2, 2, 217, 799, 3, 2, 2, 2, 219, 801, 3, 2, 2, 2, 221, 803, 3, 2, 2, 2, 223, 805, 3, 2, 2, 2, 225, 807, 3, 2, 2, 2, 227, 809, 3, 2, 2, 2, 229, 811, 3, 2, 2, 2, 231, 232, 5, 185, 92, 2, 232, 233, 5, 195, 97, 2, 233, 234, 5, 215, 107, 2, 234, 235, 5, 215, 107, 2, 235, 236, 5, 187, 93, 2, 236, 237, 5, 183, 91, 2, 237, 238, 5, 217, 108, 2, 238, 239, 3, 2, 2, 2, 239, 240, 8, 2, 2, 2, 240, 6, 3, 2, 2, 2, 241, 242, 5, 185, 92, 2, 242, 243, 5, 213, 106, 2, 243, 244, 5, 207, 103, 2, 244, 245, 5, 209, 104, 2, 245, 246, 3, 2, 2, 2, 246, 247, 8, 3, 3, 2, 247, 8, 3, 2, 2, 2, 248, 249, 5, 187, 93, 2, 249, 250, 5, 205, 102, 2, 250, 251, 5, 213, 106, 2, 251, 252, 5, 195, 97, 2, 252, 253, 5, 183, 91, 2, 253, 254, 5, 193, 96, 2, 254, 255, 3, 2, 2, 2, 255, 256, 8, 4, 3, 2, 256, 10, 3, 2, 2, 2, 257, 258, 5, 187, 93, 2, 258, 259, 5, 221, 110, 2, 259, 260, 5, 179, 89, 2, 260, 261, 5, 201, 100, 2, 261, 262, 3, 2, 2, 2, 262, 263, 8, 5, 2, 2, 263, 12, 3, 2, 2, 2, 264, 265, 5, 189, 94, 2, 265, 266, 5, 213, 106, 2, 266, 267, 5, 207, 103, 2, 267, 268, 5, 203, 101, 2, 268, 269, 3, 2, 2, 2, 269, 270, 8, 6, 3, 2, 270, 14, 3, 2, 2, 2, 271, 272, 5, 191, 95, 2, 272, 273, 5, 213, 106, 2, 273, 274, 5, 207, 103, 2, 274, 275, 5, 199, 99, 2, 275, 276, 3, 2, 2, 2, 276, 277, 8, 7, 2, 2, 277, 16, 3, 2, 2, 2, 278, 279, 5, 199, 99, 2, 279, 280, 5, 187, 93, 2, 280, 281, 5, 187, 93, 2, 281, 282, 5, 209, 104, 2, 282, 283, 3, 2, 2, 2, 283, 284, 8, 8, 3, 2, 284, 18, 3, 2, 2, 2, 285, 286, 5, 201, 100, 2, 286, 287, 5, 195, 97, 2, 287, 288, 5, 203, 101, 2, 288, 289, 5, 195, 97, 2, 289, 290, 5, 217, 108, 2, 290, 291, 3, 2, 2, 2, 291, 292, 8, 9, 2, 2, 292, 20, 3, 2, 2, 2, 293, 294, 5, 203, 101, 2, 294, 295, 5, 221, 110, 2, 295, 296, 5, 111, 55, 2, 296, 297, 5, 187, 93, 2, 297, 298, 5, 225, 112, 2, 298, 299, 5, 209, 104, 2, 299, 300, 5, 179, 89, 2, 300, 301, 5, 205, 102, 2, 301, 302, 5, 185, 92, 2, 302, 303, 3, 2, 2, 2, 303, 304, 8, 10, 3, 2, 304, 22, 3, 2, 2, 2, 305, 306, 5, 209, 104, 2, 306, 307, 5, 213, 106, 2, 307, 308, 5, 207, 103, 2, 308, 309, 5, 197, 98, 2, 309, 310, 5, 187, 93, 2, 310, 311, 5, 183, 91, 2, 311, 312, 5, 217, 108, 2, 312, 313, 3, 2, 2, 2, 313, 314, 8, 11, 3, 2, 314, 24, 3, 2, 2, 2, 315, 316, 5, 213, 106, 2, 316, 317, 5, 187, 93, 2, 317, 318, 5, 205, 102, 2, 318, 319, 5, 179, 89, 2, 319, 320, 5, 203, 101, 2, 320, 321, 5, 187, 93, 2, 321, 322, 3, 2, 2, 2, 322, 323, 8, 12, 3, 2, 323, 26, 3, 2, 2, 2, 324, 325, 5, 213, 106, 2, 325, 326, 5, 207, 103, 2, 326, 327, 5, 223, 111, 2, 327, 328, 3, 2, 2, 2, 328, 329, 8, 13, 2, 2, 329, 28, 3, 2, 2, 2, 330, 331, 5, 215, 107, 2, 331, 332, 5, 193, 96, 2, 332, 333, 5, 207, 103, 2, 333, 334, 5, 223, 111, 2, 334, 335, 3, 2, 2, 2, 335, 336, 8, 14, 2, 2, 336, 30, 3, 2, 2, 2, 337, 338, 5, 215, 107, 2, 338, 339, 5, 207, 103, 2, 339, 340, 5, 213, 106, 2, 340, 341, 5, 217, 108, 2, 341, 342, 3, 2, 2, 2, 342, 343, 8, 15, 2, 2, 343, 32, 3, 2, 2, 2, 344, 345, 5, 215, 107, 2, 345, 346, 5, 217, 108, 2, 346, 347, 5, 179, 89, 2, 347, 348, 5, 217, 108, 2, 348, 349, 5, 215, 107, 2, 349, 350, 3, 2, 2, 2, 350, 351, 8, 16, 2, 2, 351, 34, 3, 2, 2, 2, 352, 353, 5, 223, 111, 2, 353, 354, 5, 193, 96, 2, 354, 355, 5, 187, 93, 2, 355, 356, 5, 213, 106, 2, 356, 357, 5, 187, 93, 2, 357, 358, 3, 2, 2, 2, 358, 359, 8, 17, 2, 2, 359, 36, 3, 2, 2, 2, 360, 362, 10, 2, 2, 2, 361, 360, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 366, 8, 18, 2, 2, 366, 38, 3, 2, 2, 2, 367, 368, 7, 49, 2, 2, 368, 369, 7, 49, 2, 2, 369, 373, 3, 2, 2, 2, 370, 372, 10, 3, 2, 2, 371, 370, 3, 2, 2, 2, 372, 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 377, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 376, 378, 7, 15, 2, 2, 377, 376, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 380, 3, 2, 2, 2, 379, 381, 7, 12, 2, 2, 380, 379, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, 8, 19, 4, 2, 383, 40, 3, 2, 2, 2, 384, 385, 7, 49, 2, 2, 385, 386, 7, 44, 2, 2, 386, 391, 3, 2, 2, 2, 387, 390, 5, 41, 20, 2, 388, 390, 11, 2, 2, 2, 389, 387, 3, 2, 2, 2, 389, 388, 3, 2, 2, 2, 390, 393, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 391, 389, 3, 2, 2, 2, 392, 394, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 394, 395, 7, 44, 2, 2, 395, 396, 7, 49, 2, 2, 396, 397, 3, 2, 2, 2, 397, 398, 8, 20, 4, 2, 398, 42, 3, 2, 2, 2, 399, 401, 9, 4, 2, 2, 400, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 405, 8, 21, 4, 2, 405, 44, 3, 2, 2, 2, 406, 407, 7, 126, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 8, 22, 5, 2, 409, 46, 3, 2, 2, 2, 410, 411, 9, 5, 2, 2, 411, 48, 3, 2, 2, 2, 412, 413, 9, 6, 2, 2, 413, 50, 3, 2, 2, 2, 414, 415, 7, 94, 2, 2, 415, 416, 9, 7, 2, 2, 416, 52, 3, 2, 2, 2, 417, 418, 10, 8, 2, 2, 418, 54, 3, 2, 2, 2, 419, 421, 9, 9, 2, 2, 420, 422, 9, 10, 2, 2, 421, 420, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 424, 3, 2, 2, 2, 423, 425, 5, 47, 23, 2, 424, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 424, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 56, 3, 2, 2, 2, 428, 433, 7, 36, 2, 2, 429, 432, 5, 51, 25, 2, 430, 432, 5, 53, 26, 2, 431, 429, 3, 2, 2, 2, 431, 430, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 436, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 458, 7, 36, 2, 2, 437, 438, 7, 36, 2, 2, 438, 439, 7, 36, 2, 2, 439, 440, 7, 36, 2, 2, 440, 444, 3, 2, 2, 2, 441, 443, 10, 3, 2, 2, 442, 441, 3, 2, 2, 2, 443, 446, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 445, 447, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 447, 448, 7, 36, 2, 2, 448, 449, 7, 36, 2, 2, 449, 450, 7, 36, 2, 2, 450, 452, 3, 2, 2, 2, 451, 453, 7, 36, 2, 2, 452, 451, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 455, 3, 2, 2, 2, 454, 456, 7, 36, 2, 2, 455, 454, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 458, 3, 2, 2, 2, 457, 428, 3, 2, 2, 2, 457, 437, 3, 2, 2, 2, 458, 58, 3, 2, 2, 2, 459, 461, 5, 47, 23, 2, 460, 459, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 60, 3, 2, 2, 2, 464, 466, 5, 47, 23, 2, 465, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 465, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 469, 3, 2, 2, 2, 469, 473, 5, 75, 37, 2, 470, 472, 5, 47, 23, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 507, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 478, 5, 75, 37, 2, 477, 479, 5, 47, 23, 2, 478, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 478, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 507, 3, 2, 2, 2, 482, 484, 5, 47, 23, 2, 483, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 483, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 494, 3, 2, 2, 2, 487, 491, 5, 75, 37, 2, 488, 490, 5, 47, 23, 2, 489, 488, 3, 2, 2, 2, 490, 493, 3, 2, 2, 2, 491, 489, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 495, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 494, 487, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 5, 55, 27, 2, 497, 507, 3, 2, 2, 2, 498, 500, 5, 75, 37, 2, 499, 501, 5, 47, 23, 2, 500, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 500, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 505, 5, 55, 27, 2, 505, 507, 3, 2, 2, 2, 506, 465, 3, 2, 2, 2, 506, 476, 3, 2, 2, 2, 506, 483, 3, 2, 2, 2, 506, 498, 3, 2, 2, 2, 507, 62, 3, 2, 2, 2, 508, 509, 5, 181, 90, 2, 509, 510, 5, 227, 113, 2, 510, 64, 3, 2, 2, 2, 511, 512, 5, 179, 89, 2, 512, 513, 5, 205, 102, 2, 513, 514, 5, 185, 92, 2, 514, 66, 3, 2, 2, 2, 515, 516, 5, 179, 89, 2, 516, 517, 5, 215, 107, 2, 517, 518, 5, 183, 91, 2, 518, 68, 3, 2, 2, 2, 519, 520, 7, 63, 2, 2, 520, 70, 3, 2, 2, 2, 521, 522, 7, 46, 2, 2, 522, 72, 3, 2, 2, 2, 523, 524, 5, 185, 92, 2, 524, 525, 5, 187, 93, 2, 525, 526, 5, 215, 107, 2, 526, 527, 5, 183, 91, 2, 527, 74, 3, 2, 2, 2, 528, 529, 7, 48, 2, 2, 529, 76, 3, 2, 2, 2, 530, 531, 5, 189, 94, 2, 531, 532, 5, 179, 89, 2, 532, 533, 5, 201, 100, 2, 533, 534, 5, 215, 107, 2, 534, 535, 5, 187, 93, 2, 535, 78, 3, 2, 2, 2, 536, 537, 5, 189, 94, 2, 537, 538, 5, 195, 97, 2, 538, 539, 5, 213, 106, 2, 539, 540, 5, 215, 107, 2, 540, 541, 5, 217, 108, 2, 541, 80, 3, 2, 2, 2, 542, 543, 5, 201, 100, 2, 543, 544, 5, 179, 89, 2, 544, 545, 5, 215, 107, 2, 545, 546, 5, 217, 108, 2, 546, 82, 3, 2, 2, 2, 547, 548, 7, 42, 2, 2, 548, 84, 3, 2, 2, 2, 549, 550, 5, 195, 97, 2, 550, 551, 5, 205, 102, 2, 551, 86, 3, 2, 2, 2, 552, 553, 5, 195, 97, 2, 553, 554, 5, 215, 107, 2, 554, 88, 3, 2, 2, 2, 555, 556, 5, 201, 100, 2, 556, 557, 5, 195, 97, 2, 557, 558, 5, 199, 99, 2, 558, 559, 5, 187, 93, 2, 559, 90, 3, 2, 2, 2, 560, 561, 5, 205, 102, 2, 561, 562, 5, 207, 103, 2, 562, 563, 5, 217, 108, 2, 563, 92, 3, 2, 2, 2, 564, 565, 5, 205, 102, 2, 565, 566, 5, 219, 109, 2, 566, 567, 5, 201, 100, 2, 567, 568, 5, 201, 100, 2, 568, 94, 3, 2, 2, 2, 569, 570, 5, 205, 102, 2, 570, 571, 5, 219, 109, 2, 571, 572, 5, 201, 100, 2, 572, 573, 5, 201, 100, 2, 573, 574, 5, 215, 107, 2, 574, 96, 3, 2, 2, 2, 575, 576, 5, 207, 103, 2, 576, 577, 5, 213, 106, 2, 577, 98, 3, 2, 2, 2, 578, 579, 7, 65, 2, 2, 579, 100, 3, 2, 2, 2, 580, 581, 5, 213, 106, 2, 581, 582, 5, 201, 100, 2, 582, 583, 5, 195, 97, 2, 583, 584, 5, 199, 99, 2, 584, 585, 5, 187, 93, 2, 585, 102, 3, 2, 2, 2, 586, 587, 7, 43, 2, 2, 587, 104, 3, 2, 2, 2, 588, 589, 5, 217, 108, 2, 589, 590, 5, 213, 106, 2, 590, 591, 5, 219, 109, 2, 591, 592, 5, 187, 93, 2, 592, 106, 3, 2, 2, 2, 593, 594, 5, 195, 97, 2, 594, 595, 5, 205, 102, 2, 595, 596, 5, 189, 94, 2, 596, 597, 5, 207, 103, 2, 597, 108, 3, 2, 2, 2, 598, 599, 5, 189, 94, 2, 599, 600, 5, 219, 109, 2, 600, 601, 5, 205, 102, 2, 601, 602, 5, 183, 91, 2, 602, 603, 5, 217, 108, 2, 603, 604, 5, 195, 97, 2, 604, 605, 5, 207, 103, 2, 605, 606, 5, 205, 102, 2, 606, 607, 5, 215, 107, 2, 607, 110, 3, 2, 2, 2, 608, 609, 7, 97, 2, 2, 609, 112, 3, 2, 2, 2, 610, 611, 7, 63, 2, 2, 611, 612, 7, 63, 2, 2, 612, 114, 3, 2, 2, 2, 613, 614, 7, 35, 2, 2, 614, 615, 7, 63, 2, 2, 615, 116, 3, 2, 2, 2, 616, 617, 7, 62, 2, 2, 617, 118, 3, 2, 2, 2, 618, 619, 7, 62, 2, 2, 619, 620, 7, 63, 2, 2, 620, 120, 3, 2, 2, 2, 621, 622, 7, 64, 2, 2, 622, 122, 3, 2, 2, 2, 623, 624, 7, 64, 2, 2, 624, 625, 7, 63, 2, 2, 625, 124, 3, 2, 2, 2, 626, 627, 7, 45, 2, 2, 627, 126, 3, 2, 2, 2, 628, 629, 7, 47, 2, 2, 629, 128, 3, 2, 2, 2, 630, 631, 7, 44, 2, 2, 631, 130, 3, 2, 2, 2, 632, 633, 7, 49, 2, 2, 633, 132, 3, 2, 2, 2, 634, 635, 7, 39, 2, 2, 635, 134, 3, 2, 2, 2, 636, 637, 7, 93, 2, 2, 637, 638, 3, 2, 2, 2, 638, 639, 8, 67, 2, 2, 639, 640, 8, 67, 2, 2, 640, 136, 3, 2, 2, 2, 641, 642, 7, 95, 2, 2, 642, 643, 3, 2, 2, 2, 643, 644, 8, 68, 5, 2, 644, 645, 8, 68, 5, 2, 645, 138, 3, 2, 2, 2, 646, 652, 5, 49, 24, 2, 647, 651, 5, 49, 24, 2, 648, 651, 5, 47, 23, 2, 649, 651, 7, 97, 2, 2, 650, 647, 3, 2, 2, 2, 650, 648, 3, 2, 2, 2, 650, 649, 3, 2, 2, 2, 651, 654, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 664, 3, 2, 2, 2, 654, 652, 3, 2, 2, 2, 655, 659, 9, 11, 2, 2, 656, 660, 5, 49, 24, 2, 657, 660, 5, 47, 23, 2, 658, 660, 7, 97, 2, 2, 659, 656, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 658, 3, 2, 2, 2, 660, 661, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 664, 3, 2, 2, 2, 663, 646, 3, 2, 2, 2, 663, 655, 3, 2, 2, 2, 664, 140, 3, 2, 2, 2, 665, 671, 7, 98, 2, 2, 666, 670, 10, 12, 2, 2, 667, 668, 7, 98, 2, 2, 668, 670, 7, 98, 2, 2, 669, 666, 3, 2, 2, 2, 669, 667, 3, 2, 2, 2, 670, 673, 3, 2, 2, 2, 671, 669, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 674, 3, 2, 2, 2, 673, 671, 3, 2, 2, 2, 674, 675, 7, 98, 2, 2, 675, 142, 3, 2, 2, 2, 676, 677, 5, 39, 19, 2, 677, 678, 3, 2, 2, 2, 678, 679, 8, 71, 4, 2, 679, 144, 3, 2, 2, 2, 680, 681, 5, 41, 20, 2, 681, 682, 3, 2, 2, 2, 682, 683, 8, 72, 4, 2, 683, 146, 3, 2, 2, 2, 684, 685, 5, 43, 21, 2, 685, 686, 3, 2, 2, 2, 686, 687, 8, 73, 4, 2, 687, 148, 3, 2, 2, 2, 688, 689, 7, 126, 2, 2, 689, 690, 3, 2, 2, 2, 690, 691, 8, 74, 6, 2, 691, 692, 8, 74, 5, 2, 692, 150, 3, 2, 2, 2, 693, 694, 7, 93, 2, 2, 694, 695, 3, 2, 2, 2, 695, 696, 8, 75, 7, 2, 696, 697, 8, 75, 3, 2, 697, 698, 8, 75, 3, 2, 698, 152, 3, 2, 2, 2, 699, 700, 7, 95, 2, 2, 700, 701, 3, 2, 2, 2, 701, 702, 8, 76, 5, 2, 702, 703, 8, 76, 5, 2, 703, 704, 8, 76, 8, 2, 704, 154, 3, 2, 2, 2, 705, 706, 7, 46, 2, 2, 706, 707, 3, 2, 2, 2, 707, 708, 8, 77, 9, 2, 708, 156, 3, 2, 2, 2, 709, 710, 7, 63, 2, 2, 710, 711, 3, 2, 2, 2, 711, 712, 8, 78, 10, 2, 712, 158, 3, 2, 2, 2, 713, 714, 5, 179, 89, 2, 714, 715, 5, 215, 107, 2, 715, 160, 3, 2, 2, 2, 716, 717, 5, 203, 101, 2, 717, 718, 5, 187, 93, 2, 718, 719, 5, 217, 108, 2, 719, 720, 5, 179, 89, 2, 720, 721, 5, 185, 92, 2, 721, 722, 5, 179, 89, 2, 722, 723, 5, 217, 108, 2, 723, 724, 5, 179, 89, 2, 724, 162, 3, 2, 2, 2, 725, 726, 5, 207, 103, 2, 726, 727, 5, 205, 102, 2, 727, 164, 3, 2, 2, 2, 728, 729, 5, 223, 111, 2, 729, 730, 5, 195, 97, 2, 730, 731, 5, 217, 108, 2, 731, 732, 5, 193, 96, 2, 732, 166, 3, 2, 2, 2, 733, 735, 5, 169, 84, 2, 734, 733, 3, 2, 2, 2, 735, 736, 3, 2, 2, 2, 736, 734, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 168, 3, 2, 2, 2, 738, 740, 10, 13, 2, 2, 739, 738, 3, 2, 2, 2, 740, 741, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 746, 3, 2, 2, 2, 743, 744, 7, 49, 2, 2, 744, 746, 10, 14, 2, 2, 745, 739, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 746, 170, 3, 2, 2, 2, 747, 748, 5, 141, 70, 2, 748, 172, 3, 2, 2, 2, 749, 750, 5, 39, 19, 2, 750, 751, 3, 2, 2, 2, 751, 752, 8, 86, 4, 2, 752, 174, 3, 2, 2, 2, 753, 754, 5, 41, 20, 2, 754, 755, 3, 2, 2, 2, 755, 756, 8, 87, 4, 2, 756, 176, 3, 2, 2, 2, 757, 758, 5, 43, 21, 2, 758, 759, 3, 2, 2, 2, 759, 760, 8, 88, 4, 2, 760, 178, 3, 2, 2, 2, 761, 762, 9, 15, 2, 2, 762, 180, 3, 2, 2, 2, 763, 764, 9, 16, 2, 2, 764, 182, 3, 2, 2, 2, 765, 766, 9, 17, 2, 2, 766, 184, 3, 2, 2, 2, 767, 768, 9, 18, 2, 2, 768, 186, 3, 2, 2, 2, 769, 770, 9, 9, 2, 2, 770, 188, 3, 2, 2, 2, 771, 772, 9, 19, 2, 2, 772, 190, 3, 2, 2, 2, 773, 774, 9, 20, 2, 2, 774, 192, 3, 2, 2, 2, 775, 776, 9, 21, 2, 2, 776, 194, 3, 2, 2, 2, 777, 778, 9, 22, 2, 2, 778, 196, 3, 2, 2, 2, 779, 780, 9, 23, 2, 2, 780, 198, 3, 2, 2, 2, 781, 782, 9, 24, 2, 2, 782, 200, 3, 2, 2, 2, 783, 784, 9, 25, 2, 2, 784, 202, 3, 2, 2, 2, 785, 786, 9, 26, 2, 2, 786, 204, 3, 2, 2, 2, 787, 788, 9, 27, 2, 2, 788, 206, 3, 2, 2, 2, 789, 790, 9, 28, 2, 2, 790, 208, 3, 2, 2, 2, 791, 792, 9, 29, 2, 2, 792, 210, 3, 2, 2, 2, 793, 794, 9, 30, 2, 2, 794, 212, 3, 2, 2, 2, 795, 796, 9, 31, 2, 2, 796, 214, 3, 2, 2, 2, 797, 798, 9, 32, 2, 2, 798, 216, 3, 2, 2, 2, 799, 800, 9, 33, 2, 2, 800, 218, 3, 2, 2, 2, 801, 802, 9, 34, 2, 2, 802, 220, 3, 2, 2, 2, 803, 804, 9, 35, 2, 2, 804, 222, 3, 2, 2, 2, 805, 806, 9, 36, 2, 2, 806, 224, 3, 2, 2, 2, 807, 808, 9, 37, 2, 2, 808, 226, 3, 2, 2, 2, 809, 810, 9, 38, 2, 2, 810, 228, 3, 2, 2, 2, 811, 812, 9, 39, 2, 2, 812, 230, 3, 2, 2, 2, 39, 2, 3, 4, 363, 373, 377, 380, 389, 391, 402, 421, 426, 431, 433, 444, 452, 455, 457, 462, 467, 473, 480, 485, 491, 494, 502, 506, 650, 652, 659, 661, 663, 669, 671, 736, 741, 745, 11, 7, 3, 2, 7, 4, 2, 2, 3, 2, 6, 2, 2, 9, 23, 2, 9, 63, 2, 9, 64, 2, 9, 31, 2, 9, 30, 2] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 100, 1196, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 6, 20, 505, 10, 20, 13, 20, 14, 20, 506, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 515, 10, 21, 12, 21, 14, 21, 518, 11, 21, 3, 21, 5, 21, 521, 10, 21, 3, 21, 5, 21, 524, 10, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 533, 10, 22, 12, 22, 14, 22, 536, 11, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 6, 23, 544, 10, 23, 13, 23, 14, 23, 545, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 5, 34, 587, 10, 34, 3, 34, 6, 34, 590, 10, 34, 13, 34, 14, 34, 591, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 5, 37, 601, 10, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 5, 39, 608, 10, 39, 3, 40, 3, 40, 3, 40, 7, 40, 613, 10, 40, 12, 40, 14, 40, 616, 11, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 624, 10, 40, 12, 40, 14, 40, 627, 11, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 634, 10, 40, 3, 40, 5, 40, 637, 10, 40, 5, 40, 639, 10, 40, 3, 41, 6, 41, 642, 10, 41, 13, 41, 14, 41, 643, 3, 42, 6, 42, 647, 10, 42, 13, 42, 14, 42, 648, 3, 42, 3, 42, 7, 42, 653, 10, 42, 12, 42, 14, 42, 656, 11, 42, 3, 42, 3, 42, 6, 42, 660, 10, 42, 13, 42, 14, 42, 661, 3, 42, 6, 42, 665, 10, 42, 13, 42, 14, 42, 666, 3, 42, 3, 42, 7, 42, 671, 10, 42, 12, 42, 14, 42, 674, 11, 42, 5, 42, 676, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 6, 42, 682, 10, 42, 13, 42, 14, 42, 683, 3, 42, 3, 42, 5, 42, 688, 10, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 7, 78, 813, 10, 78, 12, 78, 14, 78, 816, 11, 78, 3, 78, 3, 78, 5, 78, 820, 10, 78, 3, 78, 6, 78, 823, 10, 78, 13, 78, 14, 78, 824, 5, 78, 827, 10, 78, 3, 79, 3, 79, 6, 79, 831, 10, 79, 13, 79, 14, 79, 832, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 5, 89, 886, 10, 89, 3, 90, 6, 90, 889, 10, 90, 13, 90, 14, 90, 890, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 926, 10, 98, 3, 99, 3, 99, 5, 99, 930, 10, 99, 3, 99, 7, 99, 933, 10, 99, 12, 99, 14, 99, 936, 11, 99, 3, 99, 3, 99, 5, 99, 940, 10, 99, 3, 99, 6, 99, 943, 10, 99, 13, 99, 14, 99, 944, 5, 99, 947, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 146, 3, 146, 3, 147, 3, 147, 3, 148, 3, 148, 3, 149, 3, 149, 3, 150, 3, 150, 3, 151, 3, 151, 3, 152, 3, 152, 3, 153, 3, 153, 3, 154, 3, 154, 3, 155, 3, 155, 3, 156, 3, 156, 3, 157, 3, 157, 3, 158, 3, 158, 3, 159, 3, 159, 3, 160, 3, 160, 3, 161, 3, 161, 3, 162, 3, 162, 3, 163, 3, 163, 3, 164, 3, 164, 3, 165, 3, 165, 3, 166, 3, 166, 3, 167, 3, 167, 3, 168, 3, 168, 3, 169, 3, 169, 3, 170, 3, 170, 4, 534, 625, 2, 2, 171, 12, 2, 3, 14, 2, 4, 16, 2, 5, 18, 2, 6, 20, 2, 7, 22, 2, 8, 24, 2, 9, 26, 2, 10, 28, 2, 11, 30, 2, 12, 32, 2, 13, 34, 2, 14, 36, 2, 15, 38, 2, 16, 40, 2, 17, 42, 2, 18, 44, 2, 19, 46, 2, 20, 48, 2, 21, 50, 2, 22, 52, 2, 23, 54, 2, 24, 56, 2, 2, 58, 2, 2, 60, 2, 25, 62, 2, 26, 64, 2, 27, 66, 2, 28, 68, 2, 2, 70, 2, 2, 72, 2, 2, 74, 2, 2, 76, 2, 2, 78, 2, 2, 80, 2, 2, 82, 2, 2, 84, 2, 2, 86, 2, 2, 88, 2, 29, 90, 2, 30, 92, 2, 31, 94, 2, 32, 96, 2, 33, 98, 2, 34, 100, 2, 35, 102, 2, 36, 104, 2, 37, 106, 2, 38, 108, 2, 39, 110, 2, 40, 112, 2, 41, 114, 2, 42, 116, 2, 43, 118, 2, 44, 120, 2, 45, 122, 2, 46, 124, 2, 47, 126, 2, 48, 128, 2, 49, 130, 2, 50, 132, 2, 51, 134, 2, 52, 136, 2, 53, 138, 2, 54, 140, 2, 55, 142, 2, 56, 144, 2, 57, 146, 2, 58, 148, 2, 59, 150, 2, 60, 152, 2, 61, 154, 2, 62, 156, 2, 63, 158, 2, 64, 160, 2, 65, 162, 2, 66, 164, 2, 67, 166, 2, 68, 168, 2, 69, 170, 2, 70, 172, 2, 71, 174, 2, 2, 176, 2, 2, 178, 2, 2, 180, 2, 2, 182, 2, 2, 184, 2, 72, 186, 2, 2, 188, 2, 73, 190, 2, 2, 192, 2, 74, 194, 2, 75, 196, 2, 76, 198, 2, 2, 200, 2, 2, 202, 2, 2, 204, 2, 2, 206, 2, 77, 208, 2, 2, 210, 2, 78, 212, 2, 79, 214, 2, 80, 216, 2, 2, 218, 2, 2, 220, 2, 2, 222, 2, 2, 224, 2, 81, 226, 2, 2, 228, 2, 2, 230, 2, 82, 232, 2, 83, 234, 2, 84, 236, 2, 2, 238, 2, 85, 240, 2, 86, 242, 2, 2, 244, 2, 2, 246, 2, 87, 248, 2, 88, 250, 2, 89, 252, 2, 2, 254, 2, 2, 256, 2, 2, 258, 2, 2, 260, 2, 2, 262, 2, 2, 264, 2, 2, 266, 2, 90, 268, 2, 91, 270, 2, 92, 272, 2, 2, 274, 2, 2, 276, 2, 2, 278, 2, 2, 280, 2, 93, 282, 2, 94, 284, 2, 95, 286, 2, 2, 288, 2, 96, 290, 2, 97, 292, 2, 98, 294, 2, 99, 296, 2, 100, 298, 2, 2, 300, 2, 2, 302, 2, 2, 304, 2, 2, 306, 2, 2, 308, 2, 2, 310, 2, 2, 312, 2, 2, 314, 2, 2, 316, 2, 2, 318, 2, 2, 320, 2, 2, 322, 2, 2, 324, 2, 2, 326, 2, 2, 328, 2, 2, 330, 2, 2, 332, 2, 2, 334, 2, 2, 336, 2, 2, 338, 2, 2, 340, 2, 2, 342, 2, 2, 344, 2, 2, 346, 2, 2, 348, 2, 2, 12, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 39, 8, 2, 11, 12, 15, 15, 34, 34, 49, 49, 93, 93, 95, 95, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 3, 2, 50, 59, 4, 2, 67, 92, 99, 124, 7, 2, 36, 36, 94, 94, 112, 112, 116, 116, 118, 118, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 3, 2, 98, 98, 12, 2, 11, 12, 15, 15, 34, 34, 46, 46, 49, 49, 63, 63, 93, 93, 95, 95, 98, 98, 126, 126, 4, 2, 44, 44, 49, 49, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 1192, 2, 12, 3, 2, 2, 2, 2, 14, 3, 2, 2, 2, 2, 16, 3, 2, 2, 2, 2, 18, 3, 2, 2, 2, 2, 20, 3, 2, 2, 2, 2, 22, 3, 2, 2, 2, 2, 24, 3, 2, 2, 2, 2, 26, 3, 2, 2, 2, 2, 28, 3, 2, 2, 2, 2, 30, 3, 2, 2, 2, 2, 32, 3, 2, 2, 2, 2, 34, 3, 2, 2, 2, 2, 36, 3, 2, 2, 2, 2, 38, 3, 2, 2, 2, 2, 40, 3, 2, 2, 2, 2, 42, 3, 2, 2, 2, 2, 44, 3, 2, 2, 2, 2, 46, 3, 2, 2, 2, 2, 48, 3, 2, 2, 2, 2, 50, 3, 2, 2, 2, 2, 52, 3, 2, 2, 2, 2, 54, 3, 2, 2, 2, 3, 56, 3, 2, 2, 2, 3, 58, 3, 2, 2, 2, 3, 60, 3, 2, 2, 2, 3, 62, 3, 2, 2, 2, 3, 64, 3, 2, 2, 2, 4, 66, 3, 2, 2, 2, 4, 88, 3, 2, 2, 2, 4, 90, 3, 2, 2, 2, 4, 92, 3, 2, 2, 2, 4, 94, 3, 2, 2, 2, 4, 96, 3, 2, 2, 2, 4, 98, 3, 2, 2, 2, 4, 100, 3, 2, 2, 2, 4, 102, 3, 2, 2, 2, 4, 104, 3, 2, 2, 2, 4, 106, 3, 2, 2, 2, 4, 108, 3, 2, 2, 2, 4, 110, 3, 2, 2, 2, 4, 112, 3, 2, 2, 2, 4, 114, 3, 2, 2, 2, 4, 116, 3, 2, 2, 2, 4, 118, 3, 2, 2, 2, 4, 120, 3, 2, 2, 2, 4, 122, 3, 2, 2, 2, 4, 124, 3, 2, 2, 2, 4, 126, 3, 2, 2, 2, 4, 128, 3, 2, 2, 2, 4, 130, 3, 2, 2, 2, 4, 132, 3, 2, 2, 2, 4, 134, 3, 2, 2, 2, 4, 136, 3, 2, 2, 2, 4, 138, 3, 2, 2, 2, 4, 140, 3, 2, 2, 2, 4, 142, 3, 2, 2, 2, 4, 144, 3, 2, 2, 2, 4, 146, 3, 2, 2, 2, 4, 148, 3, 2, 2, 2, 4, 150, 3, 2, 2, 2, 4, 152, 3, 2, 2, 2, 4, 154, 3, 2, 2, 2, 4, 156, 3, 2, 2, 2, 4, 158, 3, 2, 2, 2, 4, 160, 3, 2, 2, 2, 4, 162, 3, 2, 2, 2, 4, 164, 3, 2, 2, 2, 4, 166, 3, 2, 2, 2, 4, 168, 3, 2, 2, 2, 4, 170, 3, 2, 2, 2, 4, 172, 3, 2, 2, 2, 5, 174, 3, 2, 2, 2, 5, 176, 3, 2, 2, 2, 5, 178, 3, 2, 2, 2, 5, 180, 3, 2, 2, 2, 5, 182, 3, 2, 2, 2, 5, 184, 3, 2, 2, 2, 5, 188, 3, 2, 2, 2, 5, 190, 3, 2, 2, 2, 5, 192, 3, 2, 2, 2, 5, 194, 3, 2, 2, 2, 5, 196, 3, 2, 2, 2, 6, 198, 3, 2, 2, 2, 6, 200, 3, 2, 2, 2, 6, 202, 3, 2, 2, 2, 6, 206, 3, 2, 2, 2, 6, 208, 3, 2, 2, 2, 6, 210, 3, 2, 2, 2, 6, 212, 3, 2, 2, 2, 6, 214, 3, 2, 2, 2, 7, 216, 3, 2, 2, 2, 7, 218, 3, 2, 2, 2, 7, 220, 3, 2, 2, 2, 7, 222, 3, 2, 2, 2, 7, 224, 3, 2, 2, 2, 7, 226, 3, 2, 2, 2, 7, 228, 3, 2, 2, 2, 7, 230, 3, 2, 2, 2, 7, 232, 3, 2, 2, 2, 7, 234, 3, 2, 2, 2, 8, 236, 3, 2, 2, 2, 8, 238, 3, 2, 2, 2, 8, 240, 3, 2, 2, 2, 8, 242, 3, 2, 2, 2, 8, 244, 3, 2, 2, 2, 8, 246, 3, 2, 2, 2, 8, 248, 3, 2, 2, 2, 8, 250, 3, 2, 2, 2, 9, 252, 3, 2, 2, 2, 9, 254, 3, 2, 2, 2, 9, 256, 3, 2, 2, 2, 9, 258, 3, 2, 2, 2, 9, 260, 3, 2, 2, 2, 9, 262, 3, 2, 2, 2, 9, 264, 3, 2, 2, 2, 9, 266, 3, 2, 2, 2, 9, 268, 3, 2, 2, 2, 9, 270, 3, 2, 2, 2, 10, 272, 3, 2, 2, 2, 10, 274, 3, 2, 2, 2, 10, 276, 3, 2, 2, 2, 10, 278, 3, 2, 2, 2, 10, 280, 3, 2, 2, 2, 10, 282, 3, 2, 2, 2, 10, 284, 3, 2, 2, 2, 11, 286, 3, 2, 2, 2, 11, 288, 3, 2, 2, 2, 11, 290, 3, 2, 2, 2, 11, 292, 3, 2, 2, 2, 11, 294, 3, 2, 2, 2, 11, 296, 3, 2, 2, 2, 12, 350, 3, 2, 2, 2, 14, 360, 3, 2, 2, 2, 16, 367, 3, 2, 2, 2, 18, 376, 3, 2, 2, 2, 20, 383, 3, 2, 2, 2, 22, 393, 3, 2, 2, 2, 24, 400, 3, 2, 2, 2, 26, 407, 3, 2, 2, 2, 28, 421, 3, 2, 2, 2, 30, 428, 3, 2, 2, 2, 32, 436, 3, 2, 2, 2, 34, 448, 3, 2, 2, 2, 36, 458, 3, 2, 2, 2, 38, 467, 3, 2, 2, 2, 40, 473, 3, 2, 2, 2, 42, 480, 3, 2, 2, 2, 44, 487, 3, 2, 2, 2, 46, 495, 3, 2, 2, 2, 48, 504, 3, 2, 2, 2, 50, 510, 3, 2, 2, 2, 52, 527, 3, 2, 2, 2, 54, 543, 3, 2, 2, 2, 56, 549, 3, 2, 2, 2, 58, 554, 3, 2, 2, 2, 60, 559, 3, 2, 2, 2, 62, 563, 3, 2, 2, 2, 64, 567, 3, 2, 2, 2, 66, 571, 3, 2, 2, 2, 68, 575, 3, 2, 2, 2, 70, 577, 3, 2, 2, 2, 72, 579, 3, 2, 2, 2, 74, 582, 3, 2, 2, 2, 76, 584, 3, 2, 2, 2, 78, 593, 3, 2, 2, 2, 80, 595, 3, 2, 2, 2, 82, 600, 3, 2, 2, 2, 84, 602, 3, 2, 2, 2, 86, 607, 3, 2, 2, 2, 88, 638, 3, 2, 2, 2, 90, 641, 3, 2, 2, 2, 92, 687, 3, 2, 2, 2, 94, 689, 3, 2, 2, 2, 96, 692, 3, 2, 2, 2, 98, 696, 3, 2, 2, 2, 100, 700, 3, 2, 2, 2, 102, 702, 3, 2, 2, 2, 104, 704, 3, 2, 2, 2, 106, 709, 3, 2, 2, 2, 108, 711, 3, 2, 2, 2, 110, 717, 3, 2, 2, 2, 112, 723, 3, 2, 2, 2, 114, 728, 3, 2, 2, 2, 116, 730, 3, 2, 2, 2, 118, 733, 3, 2, 2, 2, 120, 736, 3, 2, 2, 2, 122, 741, 3, 2, 2, 2, 124, 745, 3, 2, 2, 2, 126, 750, 3, 2, 2, 2, 128, 756, 3, 2, 2, 2, 130, 759, 3, 2, 2, 2, 132, 761, 3, 2, 2, 2, 134, 767, 3, 2, 2, 2, 136, 769, 3, 2, 2, 2, 138, 774, 3, 2, 2, 2, 140, 777, 3, 2, 2, 2, 142, 780, 3, 2, 2, 2, 144, 782, 3, 2, 2, 2, 146, 785, 3, 2, 2, 2, 148, 787, 3, 2, 2, 2, 150, 790, 3, 2, 2, 2, 152, 792, 3, 2, 2, 2, 154, 794, 3, 2, 2, 2, 156, 796, 3, 2, 2, 2, 158, 798, 3, 2, 2, 2, 160, 800, 3, 2, 2, 2, 162, 805, 3, 2, 2, 2, 164, 826, 3, 2, 2, 2, 166, 828, 3, 2, 2, 2, 168, 836, 3, 2, 2, 2, 170, 840, 3, 2, 2, 2, 172, 844, 3, 2, 2, 2, 174, 848, 3, 2, 2, 2, 176, 853, 3, 2, 2, 2, 178, 859, 3, 2, 2, 2, 180, 865, 3, 2, 2, 2, 182, 869, 3, 2, 2, 2, 184, 873, 3, 2, 2, 2, 186, 885, 3, 2, 2, 2, 188, 888, 3, 2, 2, 2, 190, 892, 3, 2, 2, 2, 192, 896, 3, 2, 2, 2, 194, 900, 3, 2, 2, 2, 196, 904, 3, 2, 2, 2, 198, 908, 3, 2, 2, 2, 200, 913, 3, 2, 2, 2, 202, 917, 3, 2, 2, 2, 204, 925, 3, 2, 2, 2, 206, 946, 3, 2, 2, 2, 208, 948, 3, 2, 2, 2, 210, 952, 3, 2, 2, 2, 212, 956, 3, 2, 2, 2, 214, 960, 3, 2, 2, 2, 216, 964, 3, 2, 2, 2, 218, 969, 3, 2, 2, 2, 220, 973, 3, 2, 2, 2, 222, 977, 3, 2, 2, 2, 224, 981, 3, 2, 2, 2, 226, 984, 3, 2, 2, 2, 228, 988, 3, 2, 2, 2, 230, 992, 3, 2, 2, 2, 232, 996, 3, 2, 2, 2, 234, 1000, 3, 2, 2, 2, 236, 1004, 3, 2, 2, 2, 238, 1009, 3, 2, 2, 2, 240, 1014, 3, 2, 2, 2, 242, 1021, 3, 2, 2, 2, 244, 1025, 3, 2, 2, 2, 246, 1029, 3, 2, 2, 2, 248, 1033, 3, 2, 2, 2, 250, 1037, 3, 2, 2, 2, 252, 1041, 3, 2, 2, 2, 254, 1047, 3, 2, 2, 2, 256, 1051, 3, 2, 2, 2, 258, 1055, 3, 2, 2, 2, 260, 1059, 3, 2, 2, 2, 262, 1063, 3, 2, 2, 2, 264, 1067, 3, 2, 2, 2, 266, 1071, 3, 2, 2, 2, 268, 1075, 3, 2, 2, 2, 270, 1079, 3, 2, 2, 2, 272, 1083, 3, 2, 2, 2, 274, 1088, 3, 2, 2, 2, 276, 1092, 3, 2, 2, 2, 278, 1096, 3, 2, 2, 2, 280, 1100, 3, 2, 2, 2, 282, 1104, 3, 2, 2, 2, 284, 1108, 3, 2, 2, 2, 286, 1112, 3, 2, 2, 2, 288, 1117, 3, 2, 2, 2, 290, 1122, 3, 2, 2, 2, 292, 1132, 3, 2, 2, 2, 294, 1136, 3, 2, 2, 2, 296, 1140, 3, 2, 2, 2, 298, 1144, 3, 2, 2, 2, 300, 1146, 3, 2, 2, 2, 302, 1148, 3, 2, 2, 2, 304, 1150, 3, 2, 2, 2, 306, 1152, 3, 2, 2, 2, 308, 1154, 3, 2, 2, 2, 310, 1156, 3, 2, 2, 2, 312, 1158, 3, 2, 2, 2, 314, 1160, 3, 2, 2, 2, 316, 1162, 3, 2, 2, 2, 318, 1164, 3, 2, 2, 2, 320, 1166, 3, 2, 2, 2, 322, 1168, 3, 2, 2, 2, 324, 1170, 3, 2, 2, 2, 326, 1172, 3, 2, 2, 2, 328, 1174, 3, 2, 2, 2, 330, 1176, 3, 2, 2, 2, 332, 1178, 3, 2, 2, 2, 334, 1180, 3, 2, 2, 2, 336, 1182, 3, 2, 2, 2, 338, 1184, 3, 2, 2, 2, 340, 1186, 3, 2, 2, 2, 342, 1188, 3, 2, 2, 2, 344, 1190, 3, 2, 2, 2, 346, 1192, 3, 2, 2, 2, 348, 1194, 3, 2, 2, 2, 350, 351, 5, 304, 148, 2, 351, 352, 5, 314, 153, 2, 352, 353, 5, 334, 163, 2, 353, 354, 5, 334, 163, 2, 354, 355, 5, 306, 149, 2, 355, 356, 5, 302, 147, 2, 356, 357, 5, 336, 164, 2, 357, 358, 3, 2, 2, 2, 358, 359, 8, 2, 2, 2, 359, 13, 3, 2, 2, 2, 360, 361, 5, 304, 148, 2, 361, 362, 5, 332, 162, 2, 362, 363, 5, 326, 159, 2, 363, 364, 5, 328, 160, 2, 364, 365, 3, 2, 2, 2, 365, 366, 8, 3, 3, 2, 366, 15, 3, 2, 2, 2, 367, 368, 5, 306, 149, 2, 368, 369, 5, 324, 158, 2, 369, 370, 5, 332, 162, 2, 370, 371, 5, 314, 153, 2, 371, 372, 5, 302, 147, 2, 372, 373, 5, 312, 152, 2, 373, 374, 3, 2, 2, 2, 374, 375, 8, 4, 4, 2, 375, 17, 3, 2, 2, 2, 376, 377, 5, 306, 149, 2, 377, 378, 5, 340, 166, 2, 378, 379, 5, 298, 145, 2, 379, 380, 5, 320, 156, 2, 380, 381, 3, 2, 2, 2, 381, 382, 8, 5, 2, 2, 382, 19, 3, 2, 2, 2, 383, 384, 5, 306, 149, 2, 384, 385, 5, 344, 168, 2, 385, 386, 5, 328, 160, 2, 386, 387, 5, 320, 156, 2, 387, 388, 5, 298, 145, 2, 388, 389, 5, 314, 153, 2, 389, 390, 5, 324, 158, 2, 390, 391, 3, 2, 2, 2, 391, 392, 8, 6, 5, 2, 392, 21, 3, 2, 2, 2, 393, 394, 5, 308, 150, 2, 394, 395, 5, 332, 162, 2, 395, 396, 5, 326, 159, 2, 396, 397, 5, 322, 157, 2, 397, 398, 3, 2, 2, 2, 398, 399, 8, 7, 6, 2, 399, 23, 3, 2, 2, 2, 400, 401, 5, 310, 151, 2, 401, 402, 5, 332, 162, 2, 402, 403, 5, 326, 159, 2, 403, 404, 5, 318, 155, 2, 404, 405, 3, 2, 2, 2, 405, 406, 8, 8, 2, 2, 406, 25, 3, 2, 2, 2, 407, 408, 5, 314, 153, 2, 408, 409, 5, 324, 158, 2, 409, 410, 5, 320, 156, 2, 410, 411, 5, 314, 153, 2, 411, 412, 5, 324, 158, 2, 412, 413, 5, 306, 149, 2, 413, 414, 5, 334, 163, 2, 414, 415, 5, 336, 164, 2, 415, 416, 5, 298, 145, 2, 416, 417, 5, 336, 164, 2, 417, 418, 5, 334, 163, 2, 418, 419, 3, 2, 2, 2, 419, 420, 8, 9, 2, 2, 420, 27, 3, 2, 2, 2, 421, 422, 5, 318, 155, 2, 422, 423, 5, 306, 149, 2, 423, 424, 5, 306, 149, 2, 424, 425, 5, 328, 160, 2, 425, 426, 3, 2, 2, 2, 426, 427, 8, 10, 3, 2, 427, 29, 3, 2, 2, 2, 428, 429, 5, 320, 156, 2, 429, 430, 5, 314, 153, 2, 430, 431, 5, 322, 157, 2, 431, 432, 5, 314, 153, 2, 432, 433, 5, 336, 164, 2, 433, 434, 3, 2, 2, 2, 434, 435, 8, 11, 2, 2, 435, 31, 3, 2, 2, 2, 436, 437, 5, 322, 157, 2, 437, 438, 5, 340, 166, 2, 438, 439, 5, 84, 38, 2, 439, 440, 5, 306, 149, 2, 440, 441, 5, 344, 168, 2, 441, 442, 5, 328, 160, 2, 442, 443, 5, 298, 145, 2, 443, 444, 5, 324, 158, 2, 444, 445, 5, 304, 148, 2, 445, 446, 3, 2, 2, 2, 446, 447, 8, 12, 7, 2, 447, 33, 3, 2, 2, 2, 448, 449, 5, 328, 160, 2, 449, 450, 5, 332, 162, 2, 450, 451, 5, 326, 159, 2, 451, 452, 5, 316, 154, 2, 452, 453, 5, 306, 149, 2, 453, 454, 5, 302, 147, 2, 454, 455, 5, 336, 164, 2, 455, 456, 3, 2, 2, 2, 456, 457, 8, 13, 3, 2, 457, 35, 3, 2, 2, 2, 458, 459, 5, 332, 162, 2, 459, 460, 5, 306, 149, 2, 460, 461, 5, 324, 158, 2, 461, 462, 5, 298, 145, 2, 462, 463, 5, 322, 157, 2, 463, 464, 5, 306, 149, 2, 464, 465, 3, 2, 2, 2, 465, 466, 8, 14, 8, 2, 466, 37, 3, 2, 2, 2, 467, 468, 5, 332, 162, 2, 468, 469, 5, 326, 159, 2, 469, 470, 5, 342, 167, 2, 470, 471, 3, 2, 2, 2, 471, 472, 8, 15, 2, 2, 472, 39, 3, 2, 2, 2, 473, 474, 5, 334, 163, 2, 474, 475, 5, 312, 152, 2, 475, 476, 5, 326, 159, 2, 476, 477, 5, 342, 167, 2, 477, 478, 3, 2, 2, 2, 478, 479, 8, 16, 9, 2, 479, 41, 3, 2, 2, 2, 480, 481, 5, 334, 163, 2, 481, 482, 5, 326, 159, 2, 482, 483, 5, 332, 162, 2, 483, 484, 5, 336, 164, 2, 484, 485, 3, 2, 2, 2, 485, 486, 8, 17, 2, 2, 486, 43, 3, 2, 2, 2, 487, 488, 5, 334, 163, 2, 488, 489, 5, 336, 164, 2, 489, 490, 5, 298, 145, 2, 490, 491, 5, 336, 164, 2, 491, 492, 5, 334, 163, 2, 492, 493, 3, 2, 2, 2, 493, 494, 8, 18, 2, 2, 494, 45, 3, 2, 2, 2, 495, 496, 5, 342, 167, 2, 496, 497, 5, 312, 152, 2, 497, 498, 5, 306, 149, 2, 498, 499, 5, 332, 162, 2, 499, 500, 5, 306, 149, 2, 500, 501, 3, 2, 2, 2, 501, 502, 8, 19, 2, 2, 502, 47, 3, 2, 2, 2, 503, 505, 10, 2, 2, 2, 504, 503, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 509, 8, 20, 2, 2, 509, 49, 3, 2, 2, 2, 510, 511, 7, 49, 2, 2, 511, 512, 7, 49, 2, 2, 512, 516, 3, 2, 2, 2, 513, 515, 10, 3, 2, 2, 514, 513, 3, 2, 2, 2, 515, 518, 3, 2, 2, 2, 516, 514, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 520, 3, 2, 2, 2, 518, 516, 3, 2, 2, 2, 519, 521, 7, 15, 2, 2, 520, 519, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 523, 3, 2, 2, 2, 522, 524, 7, 12, 2, 2, 523, 522, 3, 2, 2, 2, 523, 524, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 526, 8, 21, 10, 2, 526, 51, 3, 2, 2, 2, 527, 528, 7, 49, 2, 2, 528, 529, 7, 44, 2, 2, 529, 534, 3, 2, 2, 2, 530, 533, 5, 52, 22, 2, 531, 533, 11, 2, 2, 2, 532, 530, 3, 2, 2, 2, 532, 531, 3, 2, 2, 2, 533, 536, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 534, 532, 3, 2, 2, 2, 535, 537, 3, 2, 2, 2, 536, 534, 3, 2, 2, 2, 537, 538, 7, 44, 2, 2, 538, 539, 7, 49, 2, 2, 539, 540, 3, 2, 2, 2, 540, 541, 8, 22, 10, 2, 541, 53, 3, 2, 2, 2, 542, 544, 9, 4, 2, 2, 543, 542, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 543, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 8, 23, 10, 2, 548, 55, 3, 2, 2, 2, 549, 550, 5, 160, 76, 2, 550, 551, 3, 2, 2, 2, 551, 552, 8, 24, 11, 2, 552, 553, 8, 24, 12, 2, 553, 57, 3, 2, 2, 2, 554, 555, 5, 66, 29, 2, 555, 556, 3, 2, 2, 2, 556, 557, 8, 25, 13, 2, 557, 558, 8, 25, 14, 2, 558, 59, 3, 2, 2, 2, 559, 560, 5, 54, 23, 2, 560, 561, 3, 2, 2, 2, 561, 562, 8, 26, 10, 2, 562, 61, 3, 2, 2, 2, 563, 564, 5, 50, 21, 2, 564, 565, 3, 2, 2, 2, 565, 566, 8, 27, 10, 2, 566, 63, 3, 2, 2, 2, 567, 568, 5, 52, 22, 2, 568, 569, 3, 2, 2, 2, 569, 570, 8, 28, 10, 2, 570, 65, 3, 2, 2, 2, 571, 572, 7, 126, 2, 2, 572, 573, 3, 2, 2, 2, 573, 574, 8, 29, 14, 2, 574, 67, 3, 2, 2, 2, 575, 576, 9, 5, 2, 2, 576, 69, 3, 2, 2, 2, 577, 578, 9, 6, 2, 2, 578, 71, 3, 2, 2, 2, 579, 580, 7, 94, 2, 2, 580, 581, 9, 7, 2, 2, 581, 73, 3, 2, 2, 2, 582, 583, 10, 8, 2, 2, 583, 75, 3, 2, 2, 2, 584, 586, 9, 9, 2, 2, 585, 587, 9, 10, 2, 2, 586, 585, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 589, 3, 2, 2, 2, 588, 590, 5, 68, 30, 2, 589, 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 589, 3, 2, 2, 2, 591, 592, 3, 2, 2, 2, 592, 77, 3, 2, 2, 2, 593, 594, 7, 66, 2, 2, 594, 79, 3, 2, 2, 2, 595, 596, 7, 98, 2, 2, 596, 81, 3, 2, 2, 2, 597, 601, 10, 11, 2, 2, 598, 599, 7, 98, 2, 2, 599, 601, 7, 98, 2, 2, 600, 597, 3, 2, 2, 2, 600, 598, 3, 2, 2, 2, 601, 83, 3, 2, 2, 2, 602, 603, 7, 97, 2, 2, 603, 85, 3, 2, 2, 2, 604, 608, 5, 70, 31, 2, 605, 608, 5, 68, 30, 2, 606, 608, 5, 84, 38, 2, 607, 604, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 607, 606, 3, 2, 2, 2, 608, 87, 3, 2, 2, 2, 609, 614, 7, 36, 2, 2, 610, 613, 5, 72, 32, 2, 611, 613, 5, 74, 33, 2, 612, 610, 3, 2, 2, 2, 612, 611, 3, 2, 2, 2, 613, 616, 3, 2, 2, 2, 614, 612, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 617, 3, 2, 2, 2, 616, 614, 3, 2, 2, 2, 617, 639, 7, 36, 2, 2, 618, 619, 7, 36, 2, 2, 619, 620, 7, 36, 2, 2, 620, 621, 7, 36, 2, 2, 621, 625, 3, 2, 2, 2, 622, 624, 10, 3, 2, 2, 623, 622, 3, 2, 2, 2, 624, 627, 3, 2, 2, 2, 625, 626, 3, 2, 2, 2, 625, 623, 3, 2, 2, 2, 626, 628, 3, 2, 2, 2, 627, 625, 3, 2, 2, 2, 628, 629, 7, 36, 2, 2, 629, 630, 7, 36, 2, 2, 630, 631, 7, 36, 2, 2, 631, 633, 3, 2, 2, 2, 632, 634, 7, 36, 2, 2, 633, 632, 3, 2, 2, 2, 633, 634, 3, 2, 2, 2, 634, 636, 3, 2, 2, 2, 635, 637, 7, 36, 2, 2, 636, 635, 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 639, 3, 2, 2, 2, 638, 609, 3, 2, 2, 2, 638, 618, 3, 2, 2, 2, 639, 89, 3, 2, 2, 2, 640, 642, 5, 68, 30, 2, 641, 640, 3, 2, 2, 2, 642, 643, 3, 2, 2, 2, 643, 641, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 91, 3, 2, 2, 2, 645, 647, 5, 68, 30, 2, 646, 645, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 650, 3, 2, 2, 2, 650, 654, 5, 106, 49, 2, 651, 653, 5, 68, 30, 2, 652, 651, 3, 2, 2, 2, 653, 656, 3, 2, 2, 2, 654, 652, 3, 2, 2, 2, 654, 655, 3, 2, 2, 2, 655, 688, 3, 2, 2, 2, 656, 654, 3, 2, 2, 2, 657, 659, 5, 106, 49, 2, 658, 660, 5, 68, 30, 2, 659, 658, 3, 2, 2, 2, 660, 661, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 688, 3, 2, 2, 2, 663, 665, 5, 68, 30, 2, 664, 663, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 664, 3, 2, 2, 2, 666, 667, 3, 2, 2, 2, 667, 675, 3, 2, 2, 2, 668, 672, 5, 106, 49, 2, 669, 671, 5, 68, 30, 2, 670, 669, 3, 2, 2, 2, 671, 674, 3, 2, 2, 2, 672, 670, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 676, 3, 2, 2, 2, 674, 672, 3, 2, 2, 2, 675, 668, 3, 2, 2, 2, 675, 676, 3, 2, 2, 2, 676, 677, 3, 2, 2, 2, 677, 678, 5, 76, 34, 2, 678, 688, 3, 2, 2, 2, 679, 681, 5, 106, 49, 2, 680, 682, 5, 68, 30, 2, 681, 680, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 681, 3, 2, 2, 2, 683, 684, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 686, 5, 76, 34, 2, 686, 688, 3, 2, 2, 2, 687, 646, 3, 2, 2, 2, 687, 657, 3, 2, 2, 2, 687, 664, 3, 2, 2, 2, 687, 679, 3, 2, 2, 2, 688, 93, 3, 2, 2, 2, 689, 690, 5, 300, 146, 2, 690, 691, 5, 346, 169, 2, 691, 95, 3, 2, 2, 2, 692, 693, 5, 298, 145, 2, 693, 694, 5, 324, 158, 2, 694, 695, 5, 304, 148, 2, 695, 97, 3, 2, 2, 2, 696, 697, 5, 298, 145, 2, 697, 698, 5, 334, 163, 2, 698, 699, 5, 302, 147, 2, 699, 99, 3, 2, 2, 2, 700, 701, 7, 63, 2, 2, 701, 101, 3, 2, 2, 2, 702, 703, 7, 46, 2, 2, 703, 103, 3, 2, 2, 2, 704, 705, 5, 304, 148, 2, 705, 706, 5, 306, 149, 2, 706, 707, 5, 334, 163, 2, 707, 708, 5, 302, 147, 2, 708, 105, 3, 2, 2, 2, 709, 710, 7, 48, 2, 2, 710, 107, 3, 2, 2, 2, 711, 712, 5, 308, 150, 2, 712, 713, 5, 298, 145, 2, 713, 714, 5, 320, 156, 2, 714, 715, 5, 334, 163, 2, 715, 716, 5, 306, 149, 2, 716, 109, 3, 2, 2, 2, 717, 718, 5, 308, 150, 2, 718, 719, 5, 314, 153, 2, 719, 720, 5, 332, 162, 2, 720, 721, 5, 334, 163, 2, 721, 722, 5, 336, 164, 2, 722, 111, 3, 2, 2, 2, 723, 724, 5, 320, 156, 2, 724, 725, 5, 298, 145, 2, 725, 726, 5, 334, 163, 2, 726, 727, 5, 336, 164, 2, 727, 113, 3, 2, 2, 2, 728, 729, 7, 42, 2, 2, 729, 115, 3, 2, 2, 2, 730, 731, 5, 314, 153, 2, 731, 732, 5, 324, 158, 2, 732, 117, 3, 2, 2, 2, 733, 734, 5, 314, 153, 2, 734, 735, 5, 334, 163, 2, 735, 119, 3, 2, 2, 2, 736, 737, 5, 320, 156, 2, 737, 738, 5, 314, 153, 2, 738, 739, 5, 318, 155, 2, 739, 740, 5, 306, 149, 2, 740, 121, 3, 2, 2, 2, 741, 742, 5, 324, 158, 2, 742, 743, 5, 326, 159, 2, 743, 744, 5, 336, 164, 2, 744, 123, 3, 2, 2, 2, 745, 746, 5, 324, 158, 2, 746, 747, 5, 338, 165, 2, 747, 748, 5, 320, 156, 2, 748, 749, 5, 320, 156, 2, 749, 125, 3, 2, 2, 2, 750, 751, 5, 324, 158, 2, 751, 752, 5, 338, 165, 2, 752, 753, 5, 320, 156, 2, 753, 754, 5, 320, 156, 2, 754, 755, 5, 334, 163, 2, 755, 127, 3, 2, 2, 2, 756, 757, 5, 326, 159, 2, 757, 758, 5, 332, 162, 2, 758, 129, 3, 2, 2, 2, 759, 760, 7, 65, 2, 2, 760, 131, 3, 2, 2, 2, 761, 762, 5, 332, 162, 2, 762, 763, 5, 320, 156, 2, 763, 764, 5, 314, 153, 2, 764, 765, 5, 318, 155, 2, 765, 766, 5, 306, 149, 2, 766, 133, 3, 2, 2, 2, 767, 768, 7, 43, 2, 2, 768, 135, 3, 2, 2, 2, 769, 770, 5, 336, 164, 2, 770, 771, 5, 332, 162, 2, 771, 772, 5, 338, 165, 2, 772, 773, 5, 306, 149, 2, 773, 137, 3, 2, 2, 2, 774, 775, 7, 63, 2, 2, 775, 776, 7, 63, 2, 2, 776, 139, 3, 2, 2, 2, 777, 778, 7, 35, 2, 2, 778, 779, 7, 63, 2, 2, 779, 141, 3, 2, 2, 2, 780, 781, 7, 62, 2, 2, 781, 143, 3, 2, 2, 2, 782, 783, 7, 62, 2, 2, 783, 784, 7, 63, 2, 2, 784, 145, 3, 2, 2, 2, 785, 786, 7, 64, 2, 2, 786, 147, 3, 2, 2, 2, 787, 788, 7, 64, 2, 2, 788, 789, 7, 63, 2, 2, 789, 149, 3, 2, 2, 2, 790, 791, 7, 45, 2, 2, 791, 151, 3, 2, 2, 2, 792, 793, 7, 47, 2, 2, 793, 153, 3, 2, 2, 2, 794, 795, 7, 44, 2, 2, 795, 155, 3, 2, 2, 2, 796, 797, 7, 49, 2, 2, 797, 157, 3, 2, 2, 2, 798, 799, 7, 39, 2, 2, 799, 159, 3, 2, 2, 2, 800, 801, 7, 93, 2, 2, 801, 802, 3, 2, 2, 2, 802, 803, 8, 76, 2, 2, 803, 804, 8, 76, 2, 2, 804, 161, 3, 2, 2, 2, 805, 806, 7, 95, 2, 2, 806, 807, 3, 2, 2, 2, 807, 808, 8, 77, 14, 2, 808, 809, 8, 77, 14, 2, 809, 163, 3, 2, 2, 2, 810, 814, 5, 70, 31, 2, 811, 813, 5, 86, 39, 2, 812, 811, 3, 2, 2, 2, 813, 816, 3, 2, 2, 2, 814, 812, 3, 2, 2, 2, 814, 815, 3, 2, 2, 2, 815, 827, 3, 2, 2, 2, 816, 814, 3, 2, 2, 2, 817, 820, 5, 84, 38, 2, 818, 820, 5, 78, 35, 2, 819, 817, 3, 2, 2, 2, 819, 818, 3, 2, 2, 2, 820, 822, 3, 2, 2, 2, 821, 823, 5, 86, 39, 2, 822, 821, 3, 2, 2, 2, 823, 824, 3, 2, 2, 2, 824, 822, 3, 2, 2, 2, 824, 825, 3, 2, 2, 2, 825, 827, 3, 2, 2, 2, 826, 810, 3, 2, 2, 2, 826, 819, 3, 2, 2, 2, 827, 165, 3, 2, 2, 2, 828, 830, 5, 80, 36, 2, 829, 831, 5, 82, 37, 2, 830, 829, 3, 2, 2, 2, 831, 832, 3, 2, 2, 2, 832, 830, 3, 2, 2, 2, 832, 833, 3, 2, 2, 2, 833, 834, 3, 2, 2, 2, 834, 835, 5, 80, 36, 2, 835, 167, 3, 2, 2, 2, 836, 837, 5, 50, 21, 2, 837, 838, 3, 2, 2, 2, 838, 839, 8, 80, 10, 2, 839, 169, 3, 2, 2, 2, 840, 841, 5, 52, 22, 2, 841, 842, 3, 2, 2, 2, 842, 843, 8, 81, 10, 2, 843, 171, 3, 2, 2, 2, 844, 845, 5, 54, 23, 2, 845, 846, 3, 2, 2, 2, 846, 847, 8, 82, 10, 2, 847, 173, 3, 2, 2, 2, 848, 849, 5, 66, 29, 2, 849, 850, 3, 2, 2, 2, 850, 851, 8, 83, 13, 2, 851, 852, 8, 83, 14, 2, 852, 175, 3, 2, 2, 2, 853, 854, 5, 160, 76, 2, 854, 855, 3, 2, 2, 2, 855, 856, 8, 84, 11, 2, 856, 857, 8, 84, 6, 2, 857, 858, 8, 84, 6, 2, 858, 177, 3, 2, 2, 2, 859, 860, 5, 162, 77, 2, 860, 861, 3, 2, 2, 2, 861, 862, 8, 85, 15, 2, 862, 863, 8, 85, 14, 2, 863, 864, 8, 85, 14, 2, 864, 179, 3, 2, 2, 2, 865, 866, 5, 102, 47, 2, 866, 867, 3, 2, 2, 2, 867, 868, 8, 86, 16, 2, 868, 181, 3, 2, 2, 2, 869, 870, 5, 100, 46, 2, 870, 871, 3, 2, 2, 2, 871, 872, 8, 87, 17, 2, 872, 183, 3, 2, 2, 2, 873, 874, 5, 322, 157, 2, 874, 875, 5, 306, 149, 2, 875, 876, 5, 336, 164, 2, 876, 877, 5, 298, 145, 2, 877, 878, 5, 304, 148, 2, 878, 879, 5, 298, 145, 2, 879, 880, 5, 336, 164, 2, 880, 881, 5, 298, 145, 2, 881, 185, 3, 2, 2, 2, 882, 886, 10, 12, 2, 2, 883, 884, 7, 49, 2, 2, 884, 886, 10, 13, 2, 2, 885, 882, 3, 2, 2, 2, 885, 883, 3, 2, 2, 2, 886, 187, 3, 2, 2, 2, 887, 889, 5, 186, 89, 2, 888, 887, 3, 2, 2, 2, 889, 890, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 890, 891, 3, 2, 2, 2, 891, 189, 3, 2, 2, 2, 892, 893, 5, 166, 79, 2, 893, 894, 3, 2, 2, 2, 894, 895, 8, 91, 18, 2, 895, 191, 3, 2, 2, 2, 896, 897, 5, 50, 21, 2, 897, 898, 3, 2, 2, 2, 898, 899, 8, 92, 10, 2, 899, 193, 3, 2, 2, 2, 900, 901, 5, 52, 22, 2, 901, 902, 3, 2, 2, 2, 902, 903, 8, 93, 10, 2, 903, 195, 3, 2, 2, 2, 904, 905, 5, 54, 23, 2, 905, 906, 3, 2, 2, 2, 906, 907, 8, 94, 10, 2, 907, 197, 3, 2, 2, 2, 908, 909, 5, 66, 29, 2, 909, 910, 3, 2, 2, 2, 910, 911, 8, 95, 13, 2, 911, 912, 8, 95, 14, 2, 912, 199, 3, 2, 2, 2, 913, 914, 5, 106, 49, 2, 914, 915, 3, 2, 2, 2, 915, 916, 8, 96, 19, 2, 916, 201, 3, 2, 2, 2, 917, 918, 5, 102, 47, 2, 918, 919, 3, 2, 2, 2, 919, 920, 8, 97, 16, 2, 920, 203, 3, 2, 2, 2, 921, 926, 5, 70, 31, 2, 922, 926, 5, 68, 30, 2, 923, 926, 5, 84, 38, 2, 924, 926, 5, 154, 73, 2, 925, 921, 3, 2, 2, 2, 925, 922, 3, 2, 2, 2, 925, 923, 3, 2, 2, 2, 925, 924, 3, 2, 2, 2, 926, 205, 3, 2, 2, 2, 927, 930, 5, 70, 31, 2, 928, 930, 5, 154, 73, 2, 929, 927, 3, 2, 2, 2, 929, 928, 3, 2, 2, 2, 930, 934, 3, 2, 2, 2, 931, 933, 5, 204, 98, 2, 932, 931, 3, 2, 2, 2, 933, 936, 3, 2, 2, 2, 934, 932, 3, 2, 2, 2, 934, 935, 3, 2, 2, 2, 935, 947, 3, 2, 2, 2, 936, 934, 3, 2, 2, 2, 937, 940, 5, 84, 38, 2, 938, 940, 5, 78, 35, 2, 939, 937, 3, 2, 2, 2, 939, 938, 3, 2, 2, 2, 940, 942, 3, 2, 2, 2, 941, 943, 5, 204, 98, 2, 942, 941, 3, 2, 2, 2, 943, 944, 3, 2, 2, 2, 944, 942, 3, 2, 2, 2, 944, 945, 3, 2, 2, 2, 945, 947, 3, 2, 2, 2, 946, 929, 3, 2, 2, 2, 946, 939, 3, 2, 2, 2, 947, 207, 3, 2, 2, 2, 948, 949, 5, 166, 79, 2, 949, 950, 3, 2, 2, 2, 950, 951, 8, 100, 18, 2, 951, 209, 3, 2, 2, 2, 952, 953, 5, 50, 21, 2, 953, 954, 3, 2, 2, 2, 954, 955, 8, 101, 10, 2, 955, 211, 3, 2, 2, 2, 956, 957, 5, 52, 22, 2, 957, 958, 3, 2, 2, 2, 958, 959, 8, 102, 10, 2, 959, 213, 3, 2, 2, 2, 960, 961, 5, 54, 23, 2, 961, 962, 3, 2, 2, 2, 962, 963, 8, 103, 10, 2, 963, 215, 3, 2, 2, 2, 964, 965, 5, 66, 29, 2, 965, 966, 3, 2, 2, 2, 966, 967, 8, 104, 13, 2, 967, 968, 8, 104, 14, 2, 968, 217, 3, 2, 2, 2, 969, 970, 5, 100, 46, 2, 970, 971, 3, 2, 2, 2, 971, 972, 8, 105, 17, 2, 972, 219, 3, 2, 2, 2, 973, 974, 5, 102, 47, 2, 974, 975, 3, 2, 2, 2, 975, 976, 8, 106, 16, 2, 976, 221, 3, 2, 2, 2, 977, 978, 5, 106, 49, 2, 978, 979, 3, 2, 2, 2, 979, 980, 8, 107, 19, 2, 980, 223, 3, 2, 2, 2, 981, 982, 5, 298, 145, 2, 982, 983, 5, 334, 163, 2, 983, 225, 3, 2, 2, 2, 984, 985, 5, 166, 79, 2, 985, 986, 3, 2, 2, 2, 986, 987, 8, 109, 18, 2, 987, 227, 3, 2, 2, 2, 988, 989, 5, 206, 99, 2, 989, 990, 3, 2, 2, 2, 990, 991, 8, 110, 20, 2, 991, 229, 3, 2, 2, 2, 992, 993, 5, 50, 21, 2, 993, 994, 3, 2, 2, 2, 994, 995, 8, 111, 10, 2, 995, 231, 3, 2, 2, 2, 996, 997, 5, 52, 22, 2, 997, 998, 3, 2, 2, 2, 998, 999, 8, 112, 10, 2, 999, 233, 3, 2, 2, 2, 1000, 1001, 5, 54, 23, 2, 1001, 1002, 3, 2, 2, 2, 1002, 1003, 8, 113, 10, 2, 1003, 235, 3, 2, 2, 2, 1004, 1005, 5, 66, 29, 2, 1005, 1006, 3, 2, 2, 2, 1006, 1007, 8, 114, 13, 2, 1007, 1008, 8, 114, 14, 2, 1008, 237, 3, 2, 2, 2, 1009, 1010, 5, 326, 159, 2, 1010, 1011, 5, 324, 158, 2, 1011, 1012, 3, 2, 2, 2, 1012, 1013, 8, 115, 21, 2, 1013, 239, 3, 2, 2, 2, 1014, 1015, 5, 342, 167, 2, 1015, 1016, 5, 314, 153, 2, 1016, 1017, 5, 336, 164, 2, 1017, 1018, 5, 312, 152, 2, 1018, 1019, 3, 2, 2, 2, 1019, 1020, 8, 116, 21, 2, 1020, 241, 3, 2, 2, 2, 1021, 1022, 5, 188, 90, 2, 1022, 1023, 3, 2, 2, 2, 1023, 1024, 8, 117, 22, 2, 1024, 243, 3, 2, 2, 2, 1025, 1026, 5, 166, 79, 2, 1026, 1027, 3, 2, 2, 2, 1027, 1028, 8, 118, 18, 2, 1028, 245, 3, 2, 2, 2, 1029, 1030, 5, 50, 21, 2, 1030, 1031, 3, 2, 2, 2, 1031, 1032, 8, 119, 10, 2, 1032, 247, 3, 2, 2, 2, 1033, 1034, 5, 52, 22, 2, 1034, 1035, 3, 2, 2, 2, 1035, 1036, 8, 120, 10, 2, 1036, 249, 3, 2, 2, 2, 1037, 1038, 5, 54, 23, 2, 1038, 1039, 3, 2, 2, 2, 1039, 1040, 8, 121, 10, 2, 1040, 251, 3, 2, 2, 2, 1041, 1042, 5, 66, 29, 2, 1042, 1043, 3, 2, 2, 2, 1043, 1044, 8, 122, 13, 2, 1044, 1045, 8, 122, 14, 2, 1045, 1046, 8, 122, 14, 2, 1046, 253, 3, 2, 2, 2, 1047, 1048, 5, 100, 46, 2, 1048, 1049, 3, 2, 2, 2, 1049, 1050, 8, 123, 17, 2, 1050, 255, 3, 2, 2, 2, 1051, 1052, 5, 102, 47, 2, 1052, 1053, 3, 2, 2, 2, 1053, 1054, 8, 124, 16, 2, 1054, 257, 3, 2, 2, 2, 1055, 1056, 5, 106, 49, 2, 1056, 1057, 3, 2, 2, 2, 1057, 1058, 8, 125, 19, 2, 1058, 259, 3, 2, 2, 2, 1059, 1060, 5, 240, 116, 2, 1060, 1061, 3, 2, 2, 2, 1061, 1062, 8, 126, 23, 2, 1062, 261, 3, 2, 2, 2, 1063, 1064, 5, 206, 99, 2, 1064, 1065, 3, 2, 2, 2, 1065, 1066, 8, 127, 20, 2, 1066, 263, 3, 2, 2, 2, 1067, 1068, 5, 166, 79, 2, 1068, 1069, 3, 2, 2, 2, 1069, 1070, 8, 128, 18, 2, 1070, 265, 3, 2, 2, 2, 1071, 1072, 5, 50, 21, 2, 1072, 1073, 3, 2, 2, 2, 1073, 1074, 8, 129, 10, 2, 1074, 267, 3, 2, 2, 2, 1075, 1076, 5, 52, 22, 2, 1076, 1077, 3, 2, 2, 2, 1077, 1078, 8, 130, 10, 2, 1078, 269, 3, 2, 2, 2, 1079, 1080, 5, 54, 23, 2, 1080, 1081, 3, 2, 2, 2, 1081, 1082, 8, 131, 10, 2, 1082, 271, 3, 2, 2, 2, 1083, 1084, 5, 66, 29, 2, 1084, 1085, 3, 2, 2, 2, 1085, 1086, 8, 132, 13, 2, 1086, 1087, 8, 132, 14, 2, 1087, 273, 3, 2, 2, 2, 1088, 1089, 5, 106, 49, 2, 1089, 1090, 3, 2, 2, 2, 1090, 1091, 8, 133, 19, 2, 1091, 275, 3, 2, 2, 2, 1092, 1093, 5, 166, 79, 2, 1093, 1094, 3, 2, 2, 2, 1094, 1095, 8, 134, 18, 2, 1095, 277, 3, 2, 2, 2, 1096, 1097, 5, 164, 78, 2, 1097, 1098, 3, 2, 2, 2, 1098, 1099, 8, 135, 24, 2, 1099, 279, 3, 2, 2, 2, 1100, 1101, 5, 50, 21, 2, 1101, 1102, 3, 2, 2, 2, 1102, 1103, 8, 136, 10, 2, 1103, 281, 3, 2, 2, 2, 1104, 1105, 5, 52, 22, 2, 1105, 1106, 3, 2, 2, 2, 1106, 1107, 8, 137, 10, 2, 1107, 283, 3, 2, 2, 2, 1108, 1109, 5, 54, 23, 2, 1109, 1110, 3, 2, 2, 2, 1110, 1111, 8, 138, 10, 2, 1111, 285, 3, 2, 2, 2, 1112, 1113, 5, 66, 29, 2, 1113, 1114, 3, 2, 2, 2, 1114, 1115, 8, 139, 13, 2, 1115, 1116, 8, 139, 14, 2, 1116, 287, 3, 2, 2, 2, 1117, 1118, 5, 314, 153, 2, 1118, 1119, 5, 324, 158, 2, 1119, 1120, 5, 308, 150, 2, 1120, 1121, 5, 326, 159, 2, 1121, 289, 3, 2, 2, 2, 1122, 1123, 5, 308, 150, 2, 1123, 1124, 5, 338, 165, 2, 1124, 1125, 5, 324, 158, 2, 1125, 1126, 5, 302, 147, 2, 1126, 1127, 5, 336, 164, 2, 1127, 1128, 5, 314, 153, 2, 1128, 1129, 5, 326, 159, 2, 1129, 1130, 5, 324, 158, 2, 1130, 1131, 5, 334, 163, 2, 1131, 291, 3, 2, 2, 2, 1132, 1133, 5, 50, 21, 2, 1133, 1134, 3, 2, 2, 2, 1134, 1135, 8, 142, 10, 2, 1135, 293, 3, 2, 2, 2, 1136, 1137, 5, 52, 22, 2, 1137, 1138, 3, 2, 2, 2, 1138, 1139, 8, 143, 10, 2, 1139, 295, 3, 2, 2, 2, 1140, 1141, 5, 54, 23, 2, 1141, 1142, 3, 2, 2, 2, 1142, 1143, 8, 144, 10, 2, 1143, 297, 3, 2, 2, 2, 1144, 1145, 9, 14, 2, 2, 1145, 299, 3, 2, 2, 2, 1146, 1147, 9, 15, 2, 2, 1147, 301, 3, 2, 2, 2, 1148, 1149, 9, 16, 2, 2, 1149, 303, 3, 2, 2, 2, 1150, 1151, 9, 17, 2, 2, 1151, 305, 3, 2, 2, 2, 1152, 1153, 9, 9, 2, 2, 1153, 307, 3, 2, 2, 2, 1154, 1155, 9, 18, 2, 2, 1155, 309, 3, 2, 2, 2, 1156, 1157, 9, 19, 2, 2, 1157, 311, 3, 2, 2, 2, 1158, 1159, 9, 20, 2, 2, 1159, 313, 3, 2, 2, 2, 1160, 1161, 9, 21, 2, 2, 1161, 315, 3, 2, 2, 2, 1162, 1163, 9, 22, 2, 2, 1163, 317, 3, 2, 2, 2, 1164, 1165, 9, 23, 2, 2, 1165, 319, 3, 2, 2, 2, 1166, 1167, 9, 24, 2, 2, 1167, 321, 3, 2, 2, 2, 1168, 1169, 9, 25, 2, 2, 1169, 323, 3, 2, 2, 2, 1170, 1171, 9, 26, 2, 2, 1171, 325, 3, 2, 2, 2, 1172, 1173, 9, 27, 2, 2, 1173, 327, 3, 2, 2, 2, 1174, 1175, 9, 28, 2, 2, 1175, 329, 3, 2, 2, 2, 1176, 1177, 9, 29, 2, 2, 1177, 331, 3, 2, 2, 2, 1178, 1179, 9, 30, 2, 2, 1179, 333, 3, 2, 2, 2, 1180, 1181, 9, 31, 2, 2, 1181, 335, 3, 2, 2, 2, 1182, 1183, 9, 32, 2, 2, 1183, 337, 3, 2, 2, 2, 1184, 1185, 9, 33, 2, 2, 1185, 339, 3, 2, 2, 2, 1186, 1187, 9, 34, 2, 2, 1187, 341, 3, 2, 2, 2, 1188, 1189, 9, 35, 2, 2, 1189, 343, 3, 2, 2, 2, 1190, 1191, 9, 36, 2, 2, 1191, 345, 3, 2, 2, 2, 1192, 1193, 9, 37, 2, 2, 1193, 347, 3, 2, 2, 2, 1194, 1195, 9, 38, 2, 2, 1195, 349, 3, 2, 2, 2, 51, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 506, 516, 520, 523, 532, 534, 545, 586, 591, 600, 607, 612, 614, 625, 633, 636, 638, 643, 648, 654, 661, 666, 672, 675, 683, 687, 814, 819, 824, 826, 832, 885, 890, 925, 929, 934, 939, 944, 946, 25, 7, 4, 2, 7, 6, 2, 7, 8, 2, 7, 3, 2, 7, 5, 2, 7, 10, 2, 7, 7, 2, 7, 11, 2, 2, 3, 2, 9, 65, 2, 7, 2, 2, 9, 28, 2, 6, 2, 2, 9, 66, 2, 9, 36, 2, 9, 35, 2, 9, 68, 2, 9, 38, 2, 9, 77, 2, 7, 9, 2, 9, 73, 2, 9, 86, 2, 9, 67, 2] \ No newline at end of file diff --git a/packages/kbn-monaco/src/esql/antlr/esql_lexer.tokens b/packages/kbn-monaco/src/esql/antlr/esql_lexer.tokens index c3160ce1f6472..85a98c3a6d268 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_lexer.tokens +++ b/packages/kbn-monaco/src/esql/antlr/esql_lexer.tokens @@ -2,92 +2,116 @@ DISSECT=1 DROP=2 ENRICH=3 EVAL=4 -FROM=5 -GROK=6 -KEEP=7 -LIMIT=8 -MV_EXPAND=9 -PROJECT=10 -RENAME=11 -ROW=12 -SHOW=13 -SORT=14 -STATS=15 -WHERE=16 -UNKNOWN_CMD=17 -LINE_COMMENT=18 -MULTILINE_COMMENT=19 -WS=20 -PIPE=21 -STRING=22 -INTEGER_LITERAL=23 -DECIMAL_LITERAL=24 -BY=25 -AND=26 -ASC=27 -ASSIGN=28 -COMMA=29 -DESC=30 -DOT=31 -FALSE=32 -FIRST=33 -LAST=34 -LP=35 -IN=36 -IS=37 -LIKE=38 -NOT=39 -NULL=40 -NULLS=41 -OR=42 -PARAM=43 -RLIKE=44 -RP=45 -TRUE=46 -INFO=47 -FUNCTIONS=48 -UNDERSCORE=49 -EQ=50 -NEQ=51 -LT=52 -LTE=53 -GT=54 -GTE=55 -PLUS=56 -MINUS=57 -ASTERISK=58 -SLASH=59 -PERCENT=60 -OPENING_BRACKET=61 -CLOSING_BRACKET=62 -UNQUOTED_IDENTIFIER=63 -QUOTED_IDENTIFIER=64 -EXPR_LINE_COMMENT=65 -EXPR_MULTILINE_COMMENT=66 -EXPR_WS=67 -AS=68 -METADATA=69 -ON=70 -WITH=71 -SRC_UNQUOTED_IDENTIFIER=72 -SRC_QUOTED_IDENTIFIER=73 -SRC_LINE_COMMENT=74 -SRC_MULTILINE_COMMENT=75 -SRC_WS=76 -'.'=31 -'('=35 -'?'=43 -')'=45 -'_'=49 -'=='=50 -'!='=51 -'<'=52 -'<='=53 -'>'=54 -'>='=55 -'+'=56 -'-'=57 -'*'=58 -'/'=59 -'%'=60 -']'=62 +EXPLAIN=5 +FROM=6 +GROK=7 +INLINESTATS=8 +KEEP=9 +LIMIT=10 +MV_EXPAND=11 +PROJECT=12 +RENAME=13 +ROW=14 +SHOW=15 +SORT=16 +STATS=17 +WHERE=18 +UNKNOWN_CMD=19 +LINE_COMMENT=20 +MULTILINE_COMMENT=21 +WS=22 +EXPLAIN_WS=23 +EXPLAIN_LINE_COMMENT=24 +EXPLAIN_MULTILINE_COMMENT=25 +PIPE=26 +STRING=27 +INTEGER_LITERAL=28 +DECIMAL_LITERAL=29 +BY=30 +AND=31 +ASC=32 +ASSIGN=33 +COMMA=34 +DESC=35 +DOT=36 +FALSE=37 +FIRST=38 +LAST=39 +LP=40 +IN=41 +IS=42 +LIKE=43 +NOT=44 +NULL=45 +NULLS=46 +OR=47 +PARAM=48 +RLIKE=49 +RP=50 +TRUE=51 +EQ=52 +NEQ=53 +LT=54 +LTE=55 +GT=56 +GTE=57 +PLUS=58 +MINUS=59 +ASTERISK=60 +SLASH=61 +PERCENT=62 +OPENING_BRACKET=63 +CLOSING_BRACKET=64 +UNQUOTED_IDENTIFIER=65 +QUOTED_IDENTIFIER=66 +EXPR_LINE_COMMENT=67 +EXPR_MULTILINE_COMMENT=68 +EXPR_WS=69 +METADATA=70 +FROM_UNQUOTED_IDENTIFIER=71 +FROM_LINE_COMMENT=72 +FROM_MULTILINE_COMMENT=73 +FROM_WS=74 +PROJECT_UNQUOTED_IDENTIFIER=75 +PROJECT_LINE_COMMENT=76 +PROJECT_MULTILINE_COMMENT=77 +PROJECT_WS=78 +AS=79 +RENAME_LINE_COMMENT=80 +RENAME_MULTILINE_COMMENT=81 +RENAME_WS=82 +ON=83 +WITH=84 +ENRICH_LINE_COMMENT=85 +ENRICH_MULTILINE_COMMENT=86 +ENRICH_WS=87 +ENRICH_FIELD_LINE_COMMENT=88 +ENRICH_FIELD_MULTILINE_COMMENT=89 +ENRICH_FIELD_WS=90 +MVEXPAND_LINE_COMMENT=91 +MVEXPAND_MULTILINE_COMMENT=92 +MVEXPAND_WS=93 +INFO=94 +FUNCTIONS=95 +SHOW_LINE_COMMENT=96 +SHOW_MULTILINE_COMMENT=97 +SHOW_WS=98 +'|'=26 +'='=33 +','=34 +'.'=36 +'('=40 +'?'=48 +')'=50 +'=='=52 +'!='=53 +'<'=54 +'<='=55 +'>'=56 +'>='=57 +'+'=58 +'-'=59 +'*'=60 +'/'=61 +'%'=62 +']'=64 diff --git a/packages/kbn-monaco/src/esql/antlr/esql_lexer.ts b/packages/kbn-monaco/src/esql/antlr/esql_lexer.ts index 4bbb3eb4968c3..741ea56ba1408 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_lexer.ts +++ b/packages/kbn-monaco/src/esql/antlr/esql_lexer.ts @@ -21,80 +21,109 @@ export class esql_lexer extends Lexer { public static readonly DROP = 2; public static readonly ENRICH = 3; public static readonly EVAL = 4; - public static readonly FROM = 5; - public static readonly GROK = 6; - public static readonly KEEP = 7; - public static readonly LIMIT = 8; - public static readonly MV_EXPAND = 9; - public static readonly PROJECT = 10; - public static readonly RENAME = 11; - public static readonly ROW = 12; - public static readonly SHOW = 13; - public static readonly SORT = 14; - public static readonly STATS = 15; - public static readonly WHERE = 16; - public static readonly UNKNOWN_CMD = 17; - public static readonly LINE_COMMENT = 18; - public static readonly MULTILINE_COMMENT = 19; - public static readonly WS = 20; - public static readonly PIPE = 21; - public static readonly STRING = 22; - public static readonly INTEGER_LITERAL = 23; - public static readonly DECIMAL_LITERAL = 24; - public static readonly BY = 25; - public static readonly AND = 26; - public static readonly ASC = 27; - public static readonly ASSIGN = 28; - public static readonly COMMA = 29; - public static readonly DESC = 30; - public static readonly DOT = 31; - public static readonly FALSE = 32; - public static readonly FIRST = 33; - public static readonly LAST = 34; - public static readonly LP = 35; - public static readonly IN = 36; - public static readonly IS = 37; - public static readonly LIKE = 38; - public static readonly NOT = 39; - public static readonly NULL = 40; - public static readonly NULLS = 41; - public static readonly OR = 42; - public static readonly PARAM = 43; - public static readonly RLIKE = 44; - public static readonly RP = 45; - public static readonly TRUE = 46; - public static readonly INFO = 47; - public static readonly FUNCTIONS = 48; - public static readonly UNDERSCORE = 49; - public static readonly EQ = 50; - public static readonly NEQ = 51; - public static readonly LT = 52; - public static readonly LTE = 53; - public static readonly GT = 54; - public static readonly GTE = 55; - public static readonly PLUS = 56; - public static readonly MINUS = 57; - public static readonly ASTERISK = 58; - public static readonly SLASH = 59; - public static readonly PERCENT = 60; - public static readonly OPENING_BRACKET = 61; - public static readonly CLOSING_BRACKET = 62; - public static readonly UNQUOTED_IDENTIFIER = 63; - public static readonly QUOTED_IDENTIFIER = 64; - public static readonly EXPR_LINE_COMMENT = 65; - public static readonly EXPR_MULTILINE_COMMENT = 66; - public static readonly EXPR_WS = 67; - public static readonly AS = 68; - public static readonly METADATA = 69; - public static readonly ON = 70; - public static readonly WITH = 71; - public static readonly SRC_UNQUOTED_IDENTIFIER = 72; - public static readonly SRC_QUOTED_IDENTIFIER = 73; - public static readonly SRC_LINE_COMMENT = 74; - public static readonly SRC_MULTILINE_COMMENT = 75; - public static readonly SRC_WS = 76; - public static readonly EXPRESSION = 1; - public static readonly SOURCE_IDENTIFIERS = 2; + public static readonly EXPLAIN = 5; + public static readonly FROM = 6; + public static readonly GROK = 7; + public static readonly INLINESTATS = 8; + public static readonly KEEP = 9; + public static readonly LIMIT = 10; + public static readonly MV_EXPAND = 11; + public static readonly PROJECT = 12; + public static readonly RENAME = 13; + public static readonly ROW = 14; + public static readonly SHOW = 15; + public static readonly SORT = 16; + public static readonly STATS = 17; + public static readonly WHERE = 18; + public static readonly UNKNOWN_CMD = 19; + public static readonly LINE_COMMENT = 20; + public static readonly MULTILINE_COMMENT = 21; + public static readonly WS = 22; + public static readonly EXPLAIN_WS = 23; + public static readonly EXPLAIN_LINE_COMMENT = 24; + public static readonly EXPLAIN_MULTILINE_COMMENT = 25; + public static readonly PIPE = 26; + public static readonly STRING = 27; + public static readonly INTEGER_LITERAL = 28; + public static readonly DECIMAL_LITERAL = 29; + public static readonly BY = 30; + public static readonly AND = 31; + public static readonly ASC = 32; + public static readonly ASSIGN = 33; + public static readonly COMMA = 34; + public static readonly DESC = 35; + public static readonly DOT = 36; + public static readonly FALSE = 37; + public static readonly FIRST = 38; + public static readonly LAST = 39; + public static readonly LP = 40; + public static readonly IN = 41; + public static readonly IS = 42; + public static readonly LIKE = 43; + public static readonly NOT = 44; + public static readonly NULL = 45; + public static readonly NULLS = 46; + public static readonly OR = 47; + public static readonly PARAM = 48; + public static readonly RLIKE = 49; + public static readonly RP = 50; + public static readonly TRUE = 51; + public static readonly EQ = 52; + public static readonly NEQ = 53; + public static readonly LT = 54; + public static readonly LTE = 55; + public static readonly GT = 56; + public static readonly GTE = 57; + public static readonly PLUS = 58; + public static readonly MINUS = 59; + public static readonly ASTERISK = 60; + public static readonly SLASH = 61; + public static readonly PERCENT = 62; + public static readonly OPENING_BRACKET = 63; + public static readonly CLOSING_BRACKET = 64; + public static readonly UNQUOTED_IDENTIFIER = 65; + public static readonly QUOTED_IDENTIFIER = 66; + public static readonly EXPR_LINE_COMMENT = 67; + public static readonly EXPR_MULTILINE_COMMENT = 68; + public static readonly EXPR_WS = 69; + public static readonly METADATA = 70; + public static readonly FROM_UNQUOTED_IDENTIFIER = 71; + public static readonly FROM_LINE_COMMENT = 72; + public static readonly FROM_MULTILINE_COMMENT = 73; + public static readonly FROM_WS = 74; + public static readonly PROJECT_UNQUOTED_IDENTIFIER = 75; + public static readonly PROJECT_LINE_COMMENT = 76; + public static readonly PROJECT_MULTILINE_COMMENT = 77; + public static readonly PROJECT_WS = 78; + public static readonly AS = 79; + public static readonly RENAME_LINE_COMMENT = 80; + public static readonly RENAME_MULTILINE_COMMENT = 81; + public static readonly RENAME_WS = 82; + public static readonly ON = 83; + public static readonly WITH = 84; + public static readonly ENRICH_LINE_COMMENT = 85; + public static readonly ENRICH_MULTILINE_COMMENT = 86; + public static readonly ENRICH_WS = 87; + public static readonly ENRICH_FIELD_LINE_COMMENT = 88; + public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 89; + public static readonly ENRICH_FIELD_WS = 90; + public static readonly MVEXPAND_LINE_COMMENT = 91; + public static readonly MVEXPAND_MULTILINE_COMMENT = 92; + public static readonly MVEXPAND_WS = 93; + public static readonly INFO = 94; + public static readonly FUNCTIONS = 95; + public static readonly SHOW_LINE_COMMENT = 96; + public static readonly SHOW_MULTILINE_COMMENT = 97; + public static readonly SHOW_WS = 98; + public static readonly EXPLAIN_MODE = 1; + public static readonly EXPRESSION_MODE = 2; + public static readonly FROM_MODE = 3; + public static readonly PROJECT_MODE = 4; + public static readonly RENAME_MODE = 5; + public static readonly ENRICH_MODE = 6; + public static readonly ENRICH_FIELD_MODE = 7; + public static readonly MVEXPAND_MODE = 8; + public static readonly SHOW_MODE = 9; // tslint:disable:no-trailing-whitespace public static readonly channelNames: string[] = [ @@ -103,24 +132,40 @@ export class esql_lexer extends Lexer { // tslint:disable:no-trailing-whitespace public static readonly modeNames: string[] = [ - "DEFAULT_MODE", "EXPRESSION", "SOURCE_IDENTIFIERS", + "DEFAULT_MODE", "EXPLAIN_MODE", "EXPRESSION_MODE", "FROM_MODE", "PROJECT_MODE", + "RENAME_MODE", "ENRICH_MODE", "ENRICH_FIELD_MODE", "MVEXPAND_MODE", "SHOW_MODE", ]; public static readonly ruleNames: string[] = [ - "DISSECT", "DROP", "ENRICH", "EVAL", "FROM", "GROK", "KEEP", "LIMIT", - "MV_EXPAND", "PROJECT", "RENAME", "ROW", "SHOW", "SORT", "STATS", "WHERE", - "UNKNOWN_CMD", "LINE_COMMENT", "MULTILINE_COMMENT", "WS", "PIPE", "DIGIT", - "LETTER", "ESCAPE_SEQUENCE", "UNESCAPED_CHARS", "EXPONENT", "STRING", - "INTEGER_LITERAL", "DECIMAL_LITERAL", "BY", "AND", "ASC", "ASSIGN", "COMMA", - "DESC", "DOT", "FALSE", "FIRST", "LAST", "LP", "IN", "IS", "LIKE", "NOT", - "NULL", "NULLS", "OR", "PARAM", "RLIKE", "RP", "TRUE", "INFO", "FUNCTIONS", - "UNDERSCORE", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", - "ASTERISK", "SLASH", "PERCENT", "OPENING_BRACKET", "CLOSING_BRACKET", + "DISSECT", "DROP", "ENRICH", "EVAL", "EXPLAIN", "FROM", "GROK", "INLINESTATS", + "KEEP", "LIMIT", "MV_EXPAND", "PROJECT", "RENAME", "ROW", "SHOW", "SORT", + "STATS", "WHERE", "UNKNOWN_CMD", "LINE_COMMENT", "MULTILINE_COMMENT", + "WS", "EXPLAIN_OPENING_BRACKET", "EXPLAIN_PIPE", "EXPLAIN_WS", "EXPLAIN_LINE_COMMENT", + "EXPLAIN_MULTILINE_COMMENT", "PIPE", "DIGIT", "LETTER", "ESCAPE_SEQUENCE", + "UNESCAPED_CHARS", "EXPONENT", "ASPERAND", "BACKQUOTE", "BACKQUOTE_BLOCK", + "UNDERSCORE", "UNQUOTED_ID_BODY", "STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", + "BY", "AND", "ASC", "ASSIGN", "COMMA", "DESC", "DOT", "FALSE", "FIRST", + "LAST", "LP", "IN", "IS", "LIKE", "NOT", "NULL", "NULLS", "OR", "PARAM", + "RLIKE", "RP", "TRUE", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", + "MINUS", "ASTERISK", "SLASH", "PERCENT", "OPENING_BRACKET", "CLOSING_BRACKET", "UNQUOTED_IDENTIFIER", "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", - "EXPR_WS", "SRC_PIPE", "SRC_OPENING_BRACKET", "SRC_CLOSING_BRACKET", "SRC_COMMA", - "SRC_ASSIGN", "AS", "METADATA", "ON", "WITH", "SRC_UNQUOTED_IDENTIFIER", - "SRC_UNQUOTED_IDENTIFIER_PART", "SRC_QUOTED_IDENTIFIER", "SRC_LINE_COMMENT", - "SRC_MULTILINE_COMMENT", "SRC_WS", "A", "B", "C", "D", "E", "F", "G", + "EXPR_WS", "FROM_PIPE", "FROM_OPENING_BRACKET", "FROM_CLOSING_BRACKET", + "FROM_COMMA", "FROM_ASSIGN", "METADATA", "FROM_UNQUOTED_IDENTIFIER_PART", + "FROM_UNQUOTED_IDENTIFIER", "FROM_QUOTED_IDENTIFIER", "FROM_LINE_COMMENT", + "FROM_MULTILINE_COMMENT", "FROM_WS", "PROJECT_PIPE", "PROJECT_DOT", "PROJECT_COMMA", + "UNQUOTED_ID_BODY_WITH_PATTERN", "PROJECT_UNQUOTED_IDENTIFIER", "PROJECT_QUOTED_IDENTIFIER", + "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", "PROJECT_WS", "RENAME_PIPE", + "RENAME_ASSIGN", "RENAME_COMMA", "RENAME_DOT", "AS", "RENAME_QUOTED_IDENTIFIER", + "RENAME_UNQUOTED_IDENTIFIER", "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", + "RENAME_WS", "ENRICH_PIPE", "ON", "WITH", "ENRICH_POLICY_UNQUOTED_IDENTIFIER", + "ENRICH_QUOTED_IDENTIFIER", "ENRICH_LINE_COMMENT", "ENRICH_MULTILINE_COMMENT", + "ENRICH_WS", "ENRICH_FIELD_PIPE", "ENRICH_FIELD_ASSIGN", "ENRICH_FIELD_COMMA", + "ENRICH_FIELD_DOT", "ENRICH_FIELD_WITH", "ENRICH_FIELD_UNQUOTED_IDENTIFIER", + "ENRICH_FIELD_QUOTED_IDENTIFIER", "ENRICH_FIELD_LINE_COMMENT", "ENRICH_FIELD_MULTILINE_COMMENT", + "ENRICH_FIELD_WS", "MVEXPAND_PIPE", "MVEXPAND_DOT", "MVEXPAND_QUOTED_IDENTIFIER", + "MVEXPAND_UNQUOTED_IDENTIFIER", "MVEXPAND_LINE_COMMENT", "MVEXPAND_MULTILINE_COMMENT", + "MVEXPAND_WS", "SHOW_PIPE", "INFO", "FUNCTIONS", "SHOW_LINE_COMMENT", + "SHOW_MULTILINE_COMMENT", "SHOW_WS", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", ]; @@ -129,26 +174,32 @@ export class esql_lexer extends Lexer { undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, "'.'", undefined, undefined, undefined, - "'('", undefined, undefined, undefined, undefined, undefined, undefined, - undefined, "'?'", undefined, "')'", undefined, undefined, undefined, "'_'", + undefined, undefined, undefined, undefined, undefined, "'|'", undefined, + undefined, undefined, undefined, undefined, undefined, "'='", "','", undefined, + "'.'", undefined, undefined, undefined, "'('", undefined, undefined, undefined, + undefined, undefined, undefined, undefined, "'?'", undefined, "')'", undefined, "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", undefined, "']'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, "DISSECT", "DROP", "ENRICH", "EVAL", "FROM", "GROK", "KEEP", - "LIMIT", "MV_EXPAND", "PROJECT", "RENAME", "ROW", "SHOW", "SORT", "STATS", - "WHERE", "UNKNOWN_CMD", "LINE_COMMENT", "MULTILINE_COMMENT", "WS", "PIPE", - "STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", "BY", "AND", "ASC", "ASSIGN", - "COMMA", "DESC", "DOT", "FALSE", "FIRST", "LAST", "LP", "IN", "IS", "LIKE", - "NOT", "NULL", "NULLS", "OR", "PARAM", "RLIKE", "RP", "TRUE", "INFO", - "FUNCTIONS", "UNDERSCORE", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", - "MINUS", "ASTERISK", "SLASH", "PERCENT", "OPENING_BRACKET", "CLOSING_BRACKET", - "UNQUOTED_IDENTIFIER", "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", - "EXPR_WS", "AS", "METADATA", "ON", "WITH", "SRC_UNQUOTED_IDENTIFIER", - "SRC_QUOTED_IDENTIFIER", "SRC_LINE_COMMENT", "SRC_MULTILINE_COMMENT", - "SRC_WS", + undefined, "DISSECT", "DROP", "ENRICH", "EVAL", "EXPLAIN", "FROM", "GROK", + "INLINESTATS", "KEEP", "LIMIT", "MV_EXPAND", "PROJECT", "RENAME", "ROW", + "SHOW", "SORT", "STATS", "WHERE", "UNKNOWN_CMD", "LINE_COMMENT", "MULTILINE_COMMENT", + "WS", "EXPLAIN_WS", "EXPLAIN_LINE_COMMENT", "EXPLAIN_MULTILINE_COMMENT", + "PIPE", "STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", "BY", "AND", "ASC", + "ASSIGN", "COMMA", "DESC", "DOT", "FALSE", "FIRST", "LAST", "LP", "IN", + "IS", "LIKE", "NOT", "NULL", "NULLS", "OR", "PARAM", "RLIKE", "RP", "TRUE", + "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", + "PERCENT", "OPENING_BRACKET", "CLOSING_BRACKET", "UNQUOTED_IDENTIFIER", + "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", "EXPR_WS", + "METADATA", "FROM_UNQUOTED_IDENTIFIER", "FROM_LINE_COMMENT", "FROM_MULTILINE_COMMENT", + "FROM_WS", "PROJECT_UNQUOTED_IDENTIFIER", "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", + "PROJECT_WS", "AS", "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", + "RENAME_WS", "ON", "WITH", "ENRICH_LINE_COMMENT", "ENRICH_MULTILINE_COMMENT", + "ENRICH_WS", "ENRICH_FIELD_LINE_COMMENT", "ENRICH_FIELD_MULTILINE_COMMENT", + "ENRICH_FIELD_WS", "MVEXPAND_LINE_COMMENT", "MVEXPAND_MULTILINE_COMMENT", + "MVEXPAND_WS", "INFO", "FUNCTIONS", "SHOW_LINE_COMMENT", "SHOW_MULTILINE_COMMENT", + "SHOW_WS", ]; public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(esql_lexer._LITERAL_NAMES, esql_lexer._SYMBOLIC_NAMES, []); @@ -180,400 +231,599 @@ export class esql_lexer extends Lexer { // @Override public get modeNames(): string[] { return esql_lexer.modeNames; } - private static readonly _serializedATNSegments: number = 2; + private static readonly _serializedATNSegments: number = 3; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02N\u032D\b\x01" + - "\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04" + - "\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f" + - "\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11" + - "\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16" + - "\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B" + - "\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!" + - "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t" + - ")\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x04" + - "2\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04" + - ";\t;\x04<\t<\x04=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04" + - "D\tD\x04E\tE\x04F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04" + - "M\tM\x04N\tN\x04O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04" + - "V\tV\x04W\tW\x04X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t" + - "^\x04_\t_\x04`\t`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04" + - "g\tg\x04h\th\x04i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04" + - "p\tp\x04q\tq\x04r\tr\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03" + - "\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03" + - "\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" + - "\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02d\u04AC\b\x01" + + "\b\x01\b\x01\b\x01\b\x01\b\x01\b\x01\b\x01\b\x01\b\x01\x04\x02\t\x02\x04" + + "\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07\t\x07\x04" + + "\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04\x0E\t\x0E" + + "\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04\x13\t\x13" + + "\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04\x18\t\x18" + + "\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C\x04\x1D\t\x1D" + + "\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04#\t#\x04$\t" + + "$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t+\x04,\t,\x04" + + "-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x044\t4\x045\t5\x04" + + "6\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04=\t=\x04>\t>\x04" + + "?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04F\tF\x04G\tG\x04" + + "H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04O\tO\x04P\tP\x04" + + "Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04X\tX\x04Y\tY\x04" + + "Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t^\x04_\t_\x04`\t`\x04a\ta\x04b\t" + + "b\x04c\tc\x04d\td\x04e\te\x04f\tf\x04g\tg\x04h\th\x04i\ti\x04j\tj\x04" + + "k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04p\tp\x04q\tq\x04r\tr\x04s\ts\x04" + + "t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x04y\ty\x04z\tz\x04{\t{\x04|\t|\x04" + + "}\t}\x04~\t~\x04\x7F\t\x7F\x04\x80\t\x80\x04\x81\t\x81\x04\x82\t\x82\x04" + + "\x83\t\x83\x04\x84\t\x84\x04\x85\t\x85\x04\x86\t\x86\x04\x87\t\x87\x04" + + "\x88\t\x88\x04\x89\t\x89\x04\x8A\t\x8A\x04\x8B\t\x8B\x04\x8C\t\x8C\x04" + + "\x8D\t\x8D\x04\x8E\t\x8E\x04\x8F\t\x8F\x04\x90\t\x90\x04\x91\t\x91\x04" + + "\x92\t\x92\x04\x93\t\x93\x04\x94\t\x94\x04\x95\t\x95\x04\x96\t\x96\x04" + + "\x97\t\x97\x04\x98\t\x98\x04\x99\t\x99\x04\x9A\t\x9A\x04\x9B\t\x9B\x04" + + "\x9C\t\x9C\x04\x9D\t\x9D\x04\x9E\t\x9E\x04\x9F\t\x9F\x04\xA0\t\xA0\x04" + + "\xA1\t\xA1\x04\xA2\t\xA2\x04\xA3\t\xA3\x04\xA4\t\xA4\x04\xA5\t\xA5\x04" + + "\xA6\t\xA6\x04\xA7\t\xA7\x04\xA8\t\xA8\x04\xA9\t\xA9\x04\xAA\t\xAA\x03" + + "\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03" + + "\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03" + + "\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03" + + "\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03" + "\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07\x03\x07\x03" + "\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + - "\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03" + - "\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\x0E" + - "\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10" + - "\x03\x10\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11" + - "\x03\x11\x03\x11\x03\x12\x06\x12\u016A\n\x12\r\x12\x0E\x12\u016B\x03\x12" + - "\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x07\x13\u0174\n\x13\f\x13\x0E" + - "\x13\u0177\v\x13\x03\x13\x05\x13\u017A\n\x13\x03\x13\x05\x13\u017D\n\x13" + - "\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x07\x14\u0186" + - "\n\x14\f\x14\x0E\x14\u0189\v\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14" + - "\x03\x15\x06\x15\u0191\n\x15\r\x15\x0E\x15\u0192\x03\x15\x03\x15\x03\x16" + - "\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18\x03\x18\x03\x19\x03\x19" + - "\x03\x19\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x05\x1B\u01A6\n\x1B\x03\x1B\x06" + - "\x1B\u01A9\n\x1B\r\x1B\x0E\x1B\u01AA\x03\x1C\x03\x1C\x03\x1C\x07\x1C\u01B0" + - "\n\x1C\f\x1C\x0E\x1C\u01B3\v\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C" + - "\x03\x1C\x07\x1C\u01BB\n\x1C\f\x1C\x0E\x1C\u01BE\v\x1C\x03\x1C\x03\x1C" + - "\x03\x1C\x03\x1C\x03\x1C\x05\x1C\u01C5\n\x1C\x03\x1C\x05\x1C\u01C8\n\x1C" + - "\x05\x1C\u01CA\n\x1C\x03\x1D\x06\x1D\u01CD\n\x1D\r\x1D\x0E\x1D\u01CE\x03" + - "\x1E\x06\x1E\u01D2\n\x1E\r\x1E\x0E\x1E\u01D3\x03\x1E\x03\x1E\x07\x1E\u01D8" + - "\n\x1E\f\x1E\x0E\x1E\u01DB\v\x1E\x03\x1E\x03\x1E\x06\x1E\u01DF\n\x1E\r" + - "\x1E\x0E\x1E\u01E0\x03\x1E\x06\x1E\u01E4\n\x1E\r\x1E\x0E\x1E\u01E5\x03" + - "\x1E\x03\x1E\x07\x1E\u01EA\n\x1E\f\x1E\x0E\x1E\u01ED\v\x1E\x05\x1E\u01EF" + - "\n\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x06\x1E\u01F5\n\x1E\r\x1E\x0E\x1E" + - "\u01F6\x03\x1E\x03\x1E\x05\x1E\u01FB\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03" + - " \x03 \x03 \x03 \x03!\x03!\x03!\x03!\x03\"\x03\"\x03#\x03#\x03$\x03$\x03" + - "$\x03$\x03$\x03%\x03%\x03&\x03&\x03&\x03&\x03&\x03&\x03\'\x03\'\x03\'" + - "\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03)\x03)\x03*\x03*\x03*\x03" + - "+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03-\x03-\x03-\x03-\x03.\x03.\x03" + - ".\x03.\x03.\x03/\x03/\x03/\x03/\x03/\x03/\x030\x030\x030\x031\x031\x03" + - "2\x032\x032\x032\x032\x032\x033\x033\x034\x034\x034\x034\x034\x035\x03" + - "5\x035\x035\x035\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" + - "7\x037\x038\x038\x038\x039\x039\x039\x03:\x03:\x03;\x03;\x03;\x03<\x03" + - "<\x03=\x03=\x03=\x03>\x03>\x03?\x03?\x03@\x03@\x03A\x03A\x03B\x03B\x03" + - "C\x03C\x03C\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x03E\x03E\x03E\x03E\x07" + - "E\u028B\nE\fE\x0EE\u028E\vE\x03E\x03E\x03E\x03E\x06E\u0294\nE\rE\x0EE" + - "\u0295\x05E\u0298\nE\x03F\x03F\x03F\x03F\x07F\u029E\nF\fF\x0EF\u02A1\v" + - "F\x03F\x03F\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x03H\x03I\x03I\x03I\x03" + - "I\x03J\x03J\x03J\x03J\x03J\x03K\x03K\x03K\x03K\x03K\x03K\x03L\x03L\x03" + - "L\x03L\x03L\x03L\x03M\x03M\x03M\x03M\x03N\x03N\x03N\x03N\x03O\x03O\x03" + - "O\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03Q\x03Q\x03Q\x03R\x03" + - "R\x03R\x03R\x03R\x03S\x06S\u02DF\nS\rS\x0ES\u02E0\x03T\x06T\u02E4\nT\r" + - "T\x0ET\u02E5\x03T\x03T\x05T\u02EA\nT\x03U\x03U\x03V\x03V\x03V\x03V\x03" + - "W\x03W\x03W\x03W\x03X\x03X\x03X\x03X\x03Y\x03Y\x03Z\x03Z\x03[\x03[\x03" + - "\\\x03\\\x03]\x03]\x03^\x03^\x03_\x03_\x03`\x03`\x03a\x03a\x03b\x03b\x03" + - "c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x03g\x03g\x03h\x03h\x03i\x03i\x03" + - "j\x03j\x03k\x03k\x03l\x03l\x03m\x03m\x03n\x03n\x03o\x03o\x03p\x03p\x03" + - "q\x03q\x03r\x03r\x04\u0187\u01BC\x02\x02s\x05\x02\x03\x07\x02\x04\t\x02" + - "\x05\v\x02\x06\r\x02\x07\x0F\x02\b\x11\x02\t\x13\x02\n\x15\x02\v\x17\x02" + - "\f\x19\x02\r\x1B\x02\x0E\x1D\x02\x0F\x1F\x02\x10!\x02\x11#\x02\x12%\x02" + - "\x13\'\x02\x14)\x02\x15+\x02\x16-\x02\x17/\x02\x021\x02\x023\x02\x025" + - "\x02\x027\x02\x029\x02\x18;\x02\x19=\x02\x1A?\x02\x1BA\x02\x1CC\x02\x1D" + - "E\x02\x1EG\x02\x1FI\x02 K\x02!M\x02\"O\x02#Q\x02$S\x02%U\x02&W\x02\'Y" + - "\x02([\x02)]\x02*_\x02+a\x02,c\x02-e\x02.g\x02/i\x020k\x021m\x022o\x02" + - "3q\x024s\x025u\x026w\x027y\x028{\x029}\x02:\x7F\x02;\x81\x02<\x83\x02" + - "=\x85\x02>\x87\x02?\x89\x02@\x8B\x02A\x8D\x02B\x8F\x02C\x91\x02D\x93\x02" + - "E\x95\x02\x02\x97\x02\x02\x99\x02\x02\x9B\x02\x02\x9D\x02\x02\x9F\x02" + - "F\xA1\x02G\xA3\x02H\xA5\x02I\xA7\x02J\xA9\x02\x02\xAB\x02K\xAD\x02L\xAF" + - "\x02M\xB1\x02N\xB3\x02\x02\xB5\x02\x02\xB7\x02\x02\xB9\x02\x02\xBB\x02" + - "\x02\xBD\x02\x02\xBF\x02\x02\xC1\x02\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02" + - "\x02\xC9\x02\x02\xCB\x02\x02\xCD\x02\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02" + - "\x02\xD5\x02\x02\xD7\x02\x02\xD9\x02\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02" + - "\x02\xE1\x02\x02\xE3\x02\x02\xE5\x02\x02\x05\x02\x03\x04(\b\x02\v\f\x0F" + - "\x0F\"\"11]]__\x04\x02\f\f\x0F\x0F\x05\x02\v\f\x0F\x0F\"\"\x03\x022;\x04" + - "\x02C\\c|\x07\x02$$^^ppttvv\x06\x02\f\f\x0F\x0F$$^^\x04\x02GGgg\x04\x02" + - "--//\x04\x02BBaa\x03\x02bb\f\x02\v\f\x0F\x0F\"\"..11??]]__bb~~\x04\x02" + - ",,11\x04\x02CCcc\x04\x02DDdd\x04\x02EEee\x04\x02FFff\x04\x02HHhh\x04\x02" + - "IIii\x04\x02JJjj\x04\x02KKkk\x04\x02LLll\x04\x02MMmm\x04\x02NNnn\x04\x02" + - "OOoo\x04\x02PPpp\x04\x02QQqq\x04\x02RRrr\x04\x02SSss\x04\x02TTtt\x04\x02" + - "UUuu\x04\x02VVvv\x04\x02WWww\x04\x02XXxx\x04\x02YYyy\x04\x02ZZzz\x04\x02" + - "[[{{\x04\x02\\\\||\x02\u0330\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02" + - "\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02" + - "\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02" + - "\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02" + - "\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02" + - "\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'" + - "\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x03-\x03\x02" + - "\x02\x02\x039\x03\x02\x02\x02\x03;\x03\x02\x02\x02\x03=\x03\x02\x02\x02" + - "\x03?\x03\x02\x02\x02\x03A\x03\x02\x02\x02\x03C\x03\x02\x02\x02\x03E\x03" + - "\x02\x02\x02\x03G\x03\x02\x02\x02\x03I\x03\x02\x02\x02\x03K\x03\x02\x02" + - "\x02\x03M\x03\x02\x02\x02\x03O\x03\x02\x02\x02\x03Q\x03\x02\x02\x02\x03" + - "S\x03\x02\x02\x02\x03U\x03\x02\x02\x02\x03W\x03\x02\x02\x02\x03Y\x03\x02" + - "\x02\x02\x03[\x03\x02\x02\x02\x03]\x03\x02\x02\x02\x03_\x03\x02\x02\x02" + - "\x03a\x03\x02\x02\x02\x03c\x03\x02\x02\x02\x03e\x03\x02\x02\x02\x03g\x03" + - "\x02\x02\x02\x03i\x03\x02\x02\x02\x03k\x03\x02\x02\x02\x03m\x03\x02\x02" + - "\x02\x03o\x03\x02\x02\x02\x03q\x03\x02\x02\x02\x03s\x03\x02\x02\x02\x03" + - "u\x03\x02\x02\x02\x03w\x03\x02\x02\x02\x03y\x03\x02\x02\x02\x03{\x03\x02" + - "\x02\x02\x03}\x03\x02\x02\x02\x03\x7F\x03\x02\x02\x02\x03\x81\x03\x02" + - "\x02\x02\x03\x83\x03\x02\x02\x02\x03\x85\x03\x02\x02\x02\x03\x87\x03\x02" + - "\x02\x02\x03\x89\x03\x02\x02\x02\x03\x8B\x03\x02\x02\x02\x03\x8D\x03\x02" + - "\x02\x02\x03\x8F\x03\x02\x02\x02\x03\x91\x03\x02\x02\x02\x03\x93\x03\x02" + - "\x02\x02\x04\x95\x03\x02\x02\x02\x04\x97\x03\x02\x02\x02\x04\x99\x03\x02" + - "\x02\x02\x04\x9B\x03\x02\x02\x02\x04\x9D\x03\x02\x02\x02\x04\x9F\x03\x02" + - "\x02\x02\x04\xA1\x03\x02\x02\x02\x04\xA3\x03\x02\x02\x02\x04\xA5\x03\x02" + - "\x02\x02\x04\xA7\x03\x02\x02\x02\x04\xAB\x03\x02\x02\x02\x04\xAD\x03\x02" + - "\x02\x02\x04\xAF\x03\x02\x02\x02\x04\xB1\x03\x02\x02\x02\x05\xE7\x03\x02" + - "\x02\x02\x07\xF1\x03\x02\x02\x02\t\xF8\x03\x02\x02\x02\v\u0101\x03\x02" + - "\x02\x02\r\u0108\x03\x02\x02\x02\x0F\u010F\x03\x02\x02\x02\x11\u0116\x03" + - "\x02\x02\x02\x13\u011D\x03\x02\x02\x02\x15\u0125\x03\x02\x02\x02\x17\u0131" + - "\x03\x02\x02\x02\x19\u013B\x03\x02\x02\x02\x1B\u0144\x03\x02\x02\x02\x1D" + - "\u014A\x03\x02\x02\x02\x1F\u0151\x03\x02\x02\x02!\u0158\x03\x02\x02\x02" + - "#\u0160\x03\x02\x02\x02%\u0169\x03\x02\x02\x02\'\u016F\x03\x02\x02\x02" + - ")\u0180\x03\x02\x02\x02+\u0190\x03\x02\x02\x02-\u0196\x03\x02\x02\x02" + - "/\u019A\x03\x02\x02\x021\u019C\x03\x02\x02\x023\u019E\x03\x02\x02\x02" + - "5\u01A1\x03\x02\x02\x027\u01A3\x03\x02\x02\x029\u01C9\x03\x02\x02\x02" + - ";\u01CC\x03\x02\x02\x02=\u01FA\x03\x02\x02\x02?\u01FC\x03\x02\x02\x02" + - "A\u01FF\x03\x02\x02\x02C\u0203\x03\x02\x02\x02E\u0207\x03\x02\x02\x02" + - "G\u0209\x03\x02\x02\x02I\u020B\x03\x02\x02\x02K\u0210\x03\x02\x02\x02" + - "M\u0212\x03\x02\x02\x02O\u0218\x03\x02\x02\x02Q\u021E\x03\x02\x02\x02" + - "S\u0223\x03\x02\x02\x02U\u0225\x03\x02\x02\x02W\u0228\x03\x02\x02\x02" + - "Y\u022B\x03\x02\x02\x02[\u0230\x03\x02\x02\x02]\u0234\x03\x02\x02\x02" + - "_\u0239\x03\x02\x02\x02a\u023F\x03\x02\x02\x02c\u0242\x03\x02\x02\x02" + - "e\u0244\x03\x02\x02\x02g\u024A\x03\x02\x02\x02i\u024C\x03\x02\x02\x02" + - "k\u0251\x03\x02\x02\x02m\u0256\x03\x02\x02\x02o\u0260\x03\x02\x02\x02" + - "q\u0262\x03\x02\x02\x02s\u0265\x03\x02\x02\x02u\u0268\x03\x02\x02\x02" + - "w\u026A\x03\x02\x02\x02y\u026D\x03\x02\x02\x02{\u026F\x03\x02\x02\x02" + - "}\u0272\x03\x02\x02\x02\x7F\u0274\x03\x02\x02\x02\x81\u0276\x03\x02\x02" + - "\x02\x83\u0278\x03\x02\x02\x02\x85\u027A\x03\x02\x02\x02\x87\u027C\x03" + - "\x02\x02\x02\x89\u0281\x03\x02\x02\x02\x8B\u0297\x03\x02\x02\x02\x8D\u0299" + - "\x03\x02\x02\x02\x8F\u02A4\x03\x02\x02\x02\x91\u02A8\x03\x02\x02\x02\x93" + - "\u02AC\x03\x02\x02\x02\x95\u02B0\x03\x02\x02\x02\x97\u02B5\x03\x02\x02" + - "\x02\x99\u02BB\x03\x02\x02\x02\x9B\u02C1\x03\x02\x02\x02\x9D\u02C5\x03" + - "\x02\x02\x02\x9F\u02C9\x03\x02\x02\x02\xA1\u02CC\x03\x02\x02\x02\xA3\u02D5" + - "\x03\x02\x02\x02\xA5\u02D8\x03\x02\x02\x02\xA7\u02DE\x03\x02\x02\x02\xA9" + - "\u02E9\x03\x02\x02\x02\xAB\u02EB\x03\x02\x02\x02\xAD\u02ED\x03\x02\x02" + - "\x02\xAF\u02F1\x03\x02\x02\x02\xB1\u02F5\x03\x02\x02\x02\xB3\u02F9\x03" + - "\x02\x02\x02\xB5\u02FB\x03\x02\x02\x02\xB7\u02FD\x03\x02\x02\x02\xB9\u02FF" + - "\x03\x02\x02\x02\xBB\u0301\x03\x02\x02\x02\xBD\u0303\x03\x02\x02\x02\xBF" + - "\u0305\x03\x02\x02\x02\xC1\u0307\x03\x02\x02\x02\xC3\u0309\x03\x02\x02" + - "\x02\xC5\u030B\x03\x02\x02\x02\xC7\u030D\x03\x02\x02\x02\xC9\u030F\x03" + - "\x02\x02\x02\xCB\u0311\x03\x02\x02\x02\xCD\u0313\x03\x02\x02\x02\xCF\u0315" + - "\x03\x02\x02\x02\xD1\u0317\x03\x02\x02\x02\xD3\u0319\x03\x02\x02\x02\xD5" + - "\u031B\x03\x02\x02\x02\xD7\u031D\x03\x02\x02\x02\xD9\u031F\x03\x02\x02" + - "\x02\xDB\u0321\x03\x02\x02\x02\xDD\u0323\x03\x02\x02\x02\xDF\u0325\x03" + - "\x02\x02\x02\xE1\u0327\x03\x02\x02\x02\xE3\u0329\x03\x02\x02\x02\xE5\u032B" + - "\x03\x02\x02\x02\xE7\xE8\x05\xB9\\\x02\xE8\xE9\x05\xC3a\x02\xE9\xEA\x05" + - "\xD7k\x02\xEA\xEB\x05\xD7k\x02\xEB\xEC\x05\xBB]\x02\xEC\xED\x05\xB7[\x02" + - "\xED\xEE\x05\xD9l\x02\xEE\xEF\x03\x02\x02\x02\xEF\xF0\b\x02\x02\x02\xF0" + - "\x06\x03\x02\x02\x02\xF1\xF2\x05\xB9\\\x02\xF2\xF3\x05\xD5j\x02\xF3\xF4" + - "\x05\xCFg\x02\xF4\xF5\x05\xD1h\x02\xF5\xF6\x03\x02\x02\x02\xF6\xF7\b\x03" + - "\x03\x02\xF7\b\x03\x02\x02\x02\xF8\xF9\x05\xBB]\x02\xF9\xFA\x05\xCDf\x02" + - "\xFA\xFB\x05\xD5j\x02\xFB\xFC\x05\xC3a\x02\xFC\xFD\x05\xB7[\x02\xFD\xFE" + - "\x05\xC1`\x02\xFE\xFF\x03\x02\x02\x02\xFF\u0100\b\x04\x03\x02\u0100\n" + - "\x03\x02\x02\x02\u0101\u0102\x05\xBB]\x02\u0102\u0103\x05\xDDn\x02\u0103" + - "\u0104\x05\xB3Y\x02\u0104\u0105\x05\xC9d\x02\u0105\u0106\x03\x02\x02\x02" + - "\u0106\u0107\b\x05\x02\x02\u0107\f\x03\x02\x02\x02\u0108\u0109\x05\xBD" + - "^\x02\u0109\u010A\x05\xD5j\x02\u010A\u010B\x05\xCFg\x02\u010B\u010C\x05" + - "\xCBe\x02\u010C\u010D\x03\x02\x02\x02\u010D\u010E\b\x06\x03\x02\u010E" + - "\x0E\x03\x02\x02\x02\u010F\u0110\x05\xBF_\x02\u0110\u0111\x05\xD5j\x02" + - "\u0111\u0112\x05\xCFg\x02\u0112\u0113\x05\xC7c\x02\u0113\u0114\x03\x02" + - "\x02\x02\u0114\u0115\b\x07\x02\x02\u0115\x10\x03\x02\x02\x02\u0116\u0117" + - "\x05\xC7c\x02\u0117\u0118\x05\xBB]\x02\u0118\u0119\x05\xBB]\x02\u0119" + - "\u011A\x05\xD1h\x02\u011A\u011B\x03\x02\x02\x02\u011B\u011C\b\b\x03\x02" + - "\u011C\x12\x03\x02\x02\x02\u011D\u011E\x05\xC9d\x02\u011E\u011F\x05\xC3" + - "a\x02\u011F\u0120\x05\xCBe\x02\u0120\u0121\x05\xC3a\x02\u0121\u0122\x05" + - "\xD9l\x02\u0122\u0123\x03\x02\x02\x02\u0123\u0124\b\t\x02\x02\u0124\x14" + - "\x03\x02\x02\x02\u0125\u0126\x05\xCBe\x02\u0126\u0127\x05\xDDn\x02\u0127" + - "\u0128\x05o7\x02\u0128\u0129\x05\xBB]\x02\u0129\u012A\x05\xE1p\x02\u012A" + - "\u012B\x05\xD1h\x02\u012B\u012C\x05\xB3Y\x02\u012C\u012D\x05\xCDf\x02" + - "\u012D\u012E\x05\xB9\\\x02\u012E\u012F\x03\x02\x02\x02\u012F\u0130\b\n" + - "\x03\x02\u0130\x16\x03\x02\x02\x02\u0131\u0132\x05\xD1h\x02\u0132\u0133" + - "\x05\xD5j\x02\u0133\u0134\x05\xCFg\x02\u0134\u0135\x05\xC5b\x02\u0135" + - "\u0136\x05\xBB]\x02\u0136\u0137\x05\xB7[\x02\u0137\u0138\x05\xD9l\x02" + - "\u0138\u0139\x03\x02\x02\x02\u0139\u013A\b\v\x03\x02\u013A\x18\x03\x02" + - "\x02\x02\u013B\u013C\x05\xD5j\x02\u013C\u013D\x05\xBB]\x02\u013D\u013E" + - "\x05\xCDf\x02\u013E\u013F\x05\xB3Y\x02\u013F\u0140\x05\xCBe\x02\u0140" + - "\u0141\x05\xBB]\x02\u0141\u0142\x03\x02\x02\x02\u0142\u0143\b\f\x03\x02" + - "\u0143\x1A\x03\x02\x02\x02\u0144\u0145\x05\xD5j\x02\u0145\u0146\x05\xCF" + - "g\x02\u0146\u0147\x05\xDFo\x02\u0147\u0148\x03\x02\x02\x02\u0148\u0149" + - "\b\r\x02\x02\u0149\x1C\x03\x02\x02\x02\u014A\u014B\x05\xD7k\x02\u014B" + - "\u014C\x05\xC1`\x02\u014C\u014D\x05\xCFg\x02\u014D\u014E\x05\xDFo\x02" + - "\u014E\u014F\x03\x02\x02\x02\u014F\u0150\b\x0E\x02\x02\u0150\x1E\x03\x02" + - "\x02\x02\u0151\u0152\x05\xD7k\x02\u0152\u0153\x05\xCFg\x02\u0153\u0154" + - "\x05\xD5j\x02\u0154\u0155\x05\xD9l\x02\u0155\u0156\x03\x02\x02\x02\u0156" + - "\u0157\b\x0F\x02\x02\u0157 \x03\x02\x02\x02\u0158\u0159\x05\xD7k\x02\u0159" + - "\u015A\x05\xD9l\x02\u015A\u015B\x05\xB3Y\x02\u015B\u015C\x05\xD9l\x02" + - "\u015C\u015D\x05\xD7k\x02\u015D\u015E\x03\x02\x02\x02\u015E\u015F\b\x10" + - "\x02\x02\u015F\"\x03\x02\x02\x02\u0160\u0161\x05\xDFo\x02\u0161\u0162" + - "\x05\xC1`\x02\u0162\u0163\x05\xBB]\x02\u0163\u0164\x05\xD5j\x02\u0164" + - "\u0165\x05\xBB]\x02\u0165\u0166\x03\x02\x02\x02\u0166\u0167\b\x11\x02" + - "\x02\u0167$\x03\x02\x02\x02\u0168\u016A\n\x02\x02\x02\u0169\u0168\x03" + - "\x02\x02\x02\u016A\u016B\x03\x02\x02\x02\u016B\u0169\x03\x02\x02\x02\u016B" + - "\u016C\x03\x02\x02\x02\u016C\u016D\x03\x02\x02\x02\u016D\u016E\b\x12\x02" + - "\x02\u016E&\x03\x02\x02\x02\u016F\u0170\x071\x02\x02\u0170\u0171\x071" + - "\x02\x02\u0171\u0175\x03\x02\x02\x02\u0172\u0174\n\x03\x02\x02\u0173\u0172" + - "\x03\x02\x02\x02\u0174\u0177\x03\x02\x02\x02\u0175\u0173\x03\x02\x02\x02" + - "\u0175\u0176\x03\x02\x02\x02\u0176\u0179\x03\x02\x02\x02\u0177\u0175\x03" + - "\x02\x02\x02\u0178\u017A\x07\x0F\x02\x02\u0179\u0178\x03\x02\x02\x02\u0179" + - "\u017A\x03\x02\x02\x02\u017A\u017C\x03\x02\x02\x02\u017B\u017D\x07\f\x02" + - "\x02\u017C\u017B\x03\x02\x02\x02\u017C\u017D\x03\x02\x02\x02\u017D\u017E" + - "\x03\x02\x02\x02\u017E\u017F\b\x13\x04\x02\u017F(\x03\x02\x02\x02\u0180" + - "\u0181\x071\x02\x02\u0181\u0182\x07,\x02\x02\u0182\u0187\x03\x02\x02\x02" + - "\u0183\u0186\x05)\x14\x02\u0184\u0186\v\x02\x02\x02\u0185\u0183\x03\x02" + - "\x02\x02\u0185\u0184\x03\x02\x02\x02\u0186\u0189\x03\x02\x02\x02\u0187" + - "\u0188\x03\x02\x02\x02\u0187\u0185\x03\x02\x02\x02\u0188\u018A\x03\x02" + - "\x02\x02\u0189\u0187\x03\x02\x02\x02\u018A\u018B\x07,\x02\x02\u018B\u018C" + - "\x071\x02\x02\u018C\u018D\x03\x02\x02\x02\u018D\u018E\b\x14\x04\x02\u018E" + - "*\x03\x02\x02\x02\u018F\u0191\t\x04\x02\x02\u0190\u018F\x03\x02\x02\x02" + - "\u0191\u0192\x03\x02\x02\x02\u0192\u0190\x03\x02\x02\x02\u0192\u0193\x03" + - "\x02\x02\x02\u0193\u0194\x03\x02\x02\x02\u0194\u0195\b\x15\x04\x02\u0195" + - ",\x03\x02\x02\x02\u0196\u0197\x07~\x02\x02\u0197\u0198\x03\x02\x02\x02" + - "\u0198\u0199\b\x16\x05\x02\u0199.\x03\x02\x02\x02\u019A\u019B\t\x05\x02" + - "\x02\u019B0\x03\x02\x02\x02\u019C\u019D\t\x06\x02\x02\u019D2\x03\x02\x02" + - "\x02\u019E\u019F\x07^\x02\x02\u019F\u01A0\t\x07\x02\x02\u01A04\x03\x02" + - "\x02\x02\u01A1\u01A2\n\b\x02\x02\u01A26\x03\x02\x02\x02\u01A3\u01A5\t" + - "\t\x02\x02\u01A4\u01A6\t\n\x02\x02\u01A5\u01A4\x03\x02\x02\x02\u01A5\u01A6" + - "\x03\x02\x02\x02\u01A6\u01A8\x03\x02\x02\x02\u01A7\u01A9\x05/\x17\x02" + - "\u01A8\u01A7\x03\x02\x02\x02\u01A9\u01AA\x03\x02\x02\x02\u01AA\u01A8\x03" + - "\x02\x02\x02\u01AA\u01AB\x03\x02\x02\x02\u01AB8\x03\x02\x02\x02\u01AC" + - "\u01B1\x07$\x02\x02\u01AD\u01B0\x053\x19\x02\u01AE\u01B0\x055\x1A\x02" + - "\u01AF\u01AD\x03\x02\x02\x02\u01AF\u01AE\x03\x02\x02\x02\u01B0\u01B3\x03" + - "\x02\x02\x02\u01B1\u01AF\x03\x02\x02\x02\u01B1\u01B2\x03\x02\x02\x02\u01B2" + - "\u01B4\x03\x02\x02\x02\u01B3\u01B1\x03\x02\x02\x02\u01B4\u01CA\x07$\x02" + - "\x02\u01B5\u01B6\x07$\x02\x02\u01B6\u01B7\x07$\x02\x02\u01B7\u01B8\x07" + - "$\x02\x02\u01B8\u01BC\x03\x02\x02\x02\u01B9\u01BB\n\x03\x02\x02\u01BA" + - "\u01B9\x03\x02\x02\x02\u01BB\u01BE\x03\x02\x02\x02\u01BC\u01BD\x03\x02" + - "\x02\x02\u01BC\u01BA\x03\x02\x02\x02\u01BD\u01BF\x03\x02\x02\x02\u01BE" + - "\u01BC\x03\x02\x02\x02\u01BF\u01C0\x07$\x02\x02\u01C0\u01C1\x07$\x02\x02" + - "\u01C1\u01C2\x07$\x02\x02\u01C2\u01C4\x03\x02\x02\x02\u01C3\u01C5\x07" + - "$\x02\x02\u01C4\u01C3\x03\x02\x02\x02\u01C4\u01C5\x03\x02\x02\x02\u01C5" + - "\u01C7\x03\x02\x02\x02\u01C6\u01C8\x07$\x02\x02\u01C7\u01C6\x03\x02\x02" + - "\x02\u01C7\u01C8\x03\x02\x02\x02\u01C8\u01CA\x03\x02\x02\x02\u01C9\u01AC" + - "\x03\x02\x02\x02\u01C9\u01B5\x03\x02\x02\x02\u01CA:\x03\x02\x02\x02\u01CB" + - "\u01CD\x05/\x17\x02\u01CC\u01CB\x03\x02\x02\x02\u01CD\u01CE\x03\x02\x02" + - "\x02\u01CE\u01CC\x03\x02\x02\x02\u01CE\u01CF\x03\x02\x02\x02\u01CF<\x03" + - "\x02\x02\x02\u01D0\u01D2\x05/\x17\x02\u01D1\u01D0\x03\x02\x02\x02\u01D2" + - "\u01D3\x03\x02\x02\x02\u01D3\u01D1\x03\x02\x02\x02\u01D3\u01D4\x03\x02" + - "\x02\x02\u01D4\u01D5\x03\x02\x02\x02\u01D5\u01D9\x05K%\x02\u01D6\u01D8" + - "\x05/\x17\x02"; + "\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03" + + "\t\x03\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03" + + "\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03" + + "\r\x03\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03" + + "\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03" + + "\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x11\x03" + + "\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03" + + "\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x14\x06\x14\u01F9\n\x14\r\x14\x0E\x14" + + "\u01FA\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x07\x15\u0203\n" + + "\x15\f\x15\x0E\x15\u0206\v\x15\x03\x15\x05\x15\u0209\n\x15\x03\x15\x05" + + "\x15\u020C\n\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + + "\x07\x16\u0215\n\x16\f\x16\x0E\x16\u0218\v\x16\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x17\x06\x17\u0220\n\x17\r\x17\x0E\x17\u0221\x03\x17" + + "\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19" + + "\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B" + + "\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D\x03\x1D" + + "\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 \x03 \x03 \x03!\x03!\x03\"\x03\"" + + "\x05\"\u024B\n\"\x03\"\x06\"\u024E\n\"\r\"\x0E\"\u024F\x03#\x03#\x03$" + + "\x03$\x03%\x03%\x03%\x05%\u0259\n%\x03&\x03&\x03\'\x03\'\x03\'\x05\'\u0260" + + "\n\'\x03(\x03(\x03(\x07(\u0265\n(\f(\x0E(\u0268\v(\x03(\x03(\x03(\x03" + + "(\x03(\x03(\x07(\u0270\n(\f(\x0E(\u0273\v(\x03(\x03(\x03(\x03(\x03(\x05" + + "(\u027A\n(\x03(\x05(\u027D\n(\x05(\u027F\n(\x03)\x06)\u0282\n)\r)\x0E" + + ")\u0283\x03*\x06*\u0287\n*\r*\x0E*\u0288\x03*\x03*\x07*\u028D\n*\f*\x0E" + + "*\u0290\v*\x03*\x03*\x06*\u0294\n*\r*\x0E*\u0295\x03*\x06*\u0299\n*\r" + + "*\x0E*\u029A\x03*\x03*\x07*\u029F\n*\f*\x0E*\u02A2\v*\x05*\u02A4\n*\x03" + + "*\x03*\x03*\x03*\x06*\u02AA\n*\r*\x0E*\u02AB\x03*\x03*\x05*\u02B0\n*\x03" + + "+\x03+\x03+\x03,\x03,\x03,\x03,\x03-\x03-\x03-\x03-\x03.\x03.\x03/\x03" + + "/\x030\x030\x030\x030\x030\x031\x031\x032\x032\x032\x032\x032\x032\x03" + + "3\x033\x033\x033\x033\x033\x034\x034\x034\x034\x034\x035\x035\x036\x03" + + "6\x036\x037\x037\x037\x038\x038\x038\x038\x038\x039\x039\x039\x039\x03" + + ":\x03:\x03:\x03:\x03:\x03;\x03;\x03;\x03;\x03;\x03;\x03<\x03<\x03<\x03" + + "=\x03=\x03>\x03>\x03>\x03>\x03>\x03>\x03?\x03?\x03@\x03@\x03@\x03@\x03" + + "@\x03A\x03A\x03A\x03B\x03B\x03B\x03C\x03C\x03D\x03D\x03D\x03E\x03E\x03" + + "F\x03F\x03F\x03G\x03G\x03H\x03H\x03I\x03I\x03J\x03J\x03K\x03K\x03L\x03" + + "L\x03L\x03L\x03L\x03M\x03M\x03M\x03M\x03M\x03N\x03N\x07N\u032D\nN\fN\x0E" + + "N\u0330\vN\x03N\x03N\x05N\u0334\nN\x03N\x06N\u0337\nN\rN\x0EN\u0338\x05" + + "N\u033B\nN\x03O\x03O\x06O\u033F\nO\rO\x0EO\u0340\x03O\x03O\x03P\x03P\x03" + + "P\x03P\x03Q\x03Q\x03Q\x03Q\x03R\x03R\x03R\x03R\x03S\x03S\x03S\x03S\x03" + + "S\x03T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x03U\x03V\x03" + + "V\x03V\x03V\x03W\x03W\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x03X\x03X\x03" + + "X\x03X\x03Y\x03Y\x03Y\x05Y\u0376\nY\x03Z\x06Z\u0379\nZ\rZ\x0EZ\u037A\x03" + + "[\x03[\x03[\x03[\x03\\\x03\\\x03\\\x03\\\x03]\x03]\x03]\x03]\x03^\x03" + + "^\x03^\x03^\x03_\x03_\x03_\x03_\x03_\x03`\x03`\x03`\x03`\x03a\x03a\x03" + + "a\x03a\x03b\x03b\x03b\x03b\x05b\u039E\nb\x03c\x03c\x05c\u03A2\nc\x03c" + + "\x07c\u03A5\nc\fc\x0Ec\u03A8\vc\x03c\x03c\x05c\u03AC\nc\x03c\x06c\u03AF" + + "\nc\rc\x0Ec\u03B0\x05c\u03B3\nc\x03d\x03d\x03d\x03d\x03e\x03e\x03e\x03" + + "e\x03f\x03f\x03f\x03f\x03g\x03g\x03g\x03g\x03h\x03h\x03h\x03h\x03h\x03" + + "i\x03i\x03i\x03i\x03j\x03j\x03j\x03j\x03k\x03k\x03k\x03k\x03l\x03l\x03" + + "l\x03m\x03m\x03m\x03m\x03n\x03n\x03n\x03n\x03o\x03o\x03o\x03o\x03p\x03" + + "p\x03p\x03p\x03q\x03q\x03q\x03q\x03r\x03r\x03r\x03r\x03r\x03s\x03s\x03" + + "s\x03s\x03s\x03t\x03t\x03t\x03t\x03t\x03t\x03t\x03u\x03u\x03u\x03u\x03" + + "v\x03v\x03v\x03v\x03w\x03w\x03w\x03w\x03x\x03x\x03x\x03x\x03y\x03y\x03" + + "y\x03y\x03z\x03z\x03z\x03z\x03z\x03z\x03{\x03{\x03{\x03{\x03|\x03|\x03" + + "|\x03|\x03}\x03}\x03}\x03}\x03~\x03~\x03~\x03~\x03\x7F\x03\x7F\x03\x7F" + + "\x03\x7F\x03\x80\x03\x80\x03\x80\x03\x80\x03\x81\x03\x81\x03\x81\x03\x81" + + "\x03\x82\x03\x82\x03\x82\x03\x82\x03\x83\x03\x83\x03\x83\x03\x83\x03\x84" + + "\x03\x84\x03\x84\x03\x84\x03\x84\x03\x85\x03\x85\x03\x85\x03\x85\x03\x86" + + "\x03\x86\x03\x86\x03\x86\x03\x87\x03\x87\x03\x87\x03\x87\x03\x88\x03\x88" + + "\x03\x88\x03\x88\x03\x89\x03\x89\x03\x89\x03\x89\x03\x8A\x03\x8A\x03\x8A" + + "\x03\x8A\x03\x8B\x03\x8B\x03\x8B\x03\x8B\x03\x8B\x03\x8C\x03\x8C\x03\x8C" + + "\x03\x8C\x03\x8C\x03\x8D\x03\x8D\x03\x8D\x03\x8D\x03\x8D\x03\x8D\x03\x8D" + + "\x03\x8D\x03\x8D\x03\x8D\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8F\x03\x8F" + + "\x03\x8F\x03\x8F\x03\x90\x03\x90\x03\x90\x03\x90\x03\x91\x03\x91\x03\x92" + + "\x03\x92\x03\x93\x03\x93\x03\x94\x03\x94\x03\x95\x03\x95\x03\x96\x03\x96" + + "\x03\x97\x03\x97\x03\x98\x03\x98\x03\x99\x03\x99\x03\x9A\x03\x9A\x03\x9B" + + "\x03\x9B\x03\x9C\x03\x9C\x03\x9D\x03\x9D\x03\x9E\x03\x9E\x03\x9F\x03\x9F" + + "\x03\xA0\x03\xA0\x03\xA1\x03\xA1\x03\xA2\x03\xA2\x03\xA3\x03\xA3\x03\xA4" + + "\x03\xA4\x03\xA5\x03\xA5\x03\xA6\x03\xA6\x03\xA7\x03\xA7\x03\xA8\x03\xA8" + + "\x03\xA9\x03\xA9\x03\xAA\x03\xAA\x04\u0216\u0271\x02\x02\xAB\f\x02\x03" + + "\x0E\x02\x04\x10\x02\x05\x12\x02\x06\x14\x02\x07\x16\x02\b\x18\x02\t\x1A" + + "\x02\n\x1C\x02\v\x1E\x02\f \x02\r\"\x02\x0E$\x02\x0F&\x02\x10(\x02\x11" + + "*\x02\x12,\x02\x13.\x02\x140\x02\x152\x02\x164\x02\x176\x02\x188\x02\x02" + + ":\x02\x02<\x02\x19>\x02\x1A@\x02\x1BB\x02\x1CD\x02\x02F\x02\x02H\x02\x02" + + "J\x02\x02L\x02\x02N\x02\x02P\x02\x02R\x02\x02T\x02\x02V\x02\x02X\x02\x1D" + + "Z\x02\x1E\\\x02\x1F^\x02 `\x02!b\x02\"d\x02#f\x02$h\x02%j\x02&l\x02\'" + + "n\x02(p\x02)r\x02*t\x02+v\x02,x\x02-z\x02.|\x02/~\x020\x80\x021\x82\x02" + + "2\x84\x023\x86\x024\x88\x025\x8A\x026\x8C\x027\x8E\x028\x90\x029\x92\x02" + + ":\x94\x02;\x96\x02<\x98\x02=\x9A\x02>\x9C\x02?\x9E\x02@\xA0\x02A\xA2\x02" + + "B\xA4\x02C\xA6\x02D\xA8\x02E\xAA\x02F\xAC\x02G\xAE\x02\x02\xB0\x02\x02" + + "\xB2\x02\x02\xB4\x02\x02\xB6\x02\x02\xB8\x02H\xBA\x02\x02\xBC\x02I\xBE" + + "\x02\x02\xC0\x02J\xC2\x02K\xC4\x02L\xC6\x02\x02\xC8\x02\x02\xCA\x02\x02" + + "\xCC\x02\x02\xCE\x02M\xD0\x02\x02\xD2\x02N\xD4\x02O\xD6\x02P\xD8\x02\x02" + + "\xDA\x02\x02\xDC\x02\x02\xDE\x02\x02\xE0\x02Q\xE2\x02\x02\xE4\x02\x02" + + "\xE6\x02R\xE8\x02S\xEA\x02T\xEC\x02\x02\xEE\x02U\xF0\x02V\xF2\x02\x02" + + "\xF4\x02\x02\xF6\x02W\xF8\x02X\xFA\x02Y\xFC\x02\x02\xFE\x02\x02\u0100" + + "\x02\x02\u0102\x02\x02\u0104\x02\x02\u0106\x02\x02\u0108\x02\x02\u010A" + + "\x02Z\u010C\x02[\u010E\x02\\\u0110\x02\x02\u0112\x02\x02\u0114\x02\x02" + + "\u0116\x02\x02\u0118\x02]\u011A\x02^\u011C\x02_\u011E\x02\x02\u0120\x02" + + "`\u0122\x02a\u0124\x02b\u0126\x02c\u0128\x02d\u012A\x02\x02\u012C\x02" + + "\x02\u012E\x02\x02\u0130\x02\x02\u0132\x02\x02\u0134\x02\x02\u0136\x02" + + "\x02\u0138\x02\x02\u013A\x02\x02\u013C\x02\x02\u013E\x02\x02\u0140\x02" + + "\x02\u0142\x02\x02\u0144\x02\x02\u0146\x02\x02\u0148\x02\x02\u014A\x02" + + "\x02\u014C\x02\x02\u014E\x02\x02\u0150\x02\x02\u0152\x02\x02\u0154\x02" + + "\x02\u0156\x02\x02\u0158\x02\x02\u015A\x02\x02\u015C\x02\x02\f\x02\x03" + + "\x04\x05\x06\x07\b\t\n\v\'\b\x02\v\f\x0F\x0F\"\"11]]__\x04\x02\f\f\x0F" + + "\x0F\x05\x02\v\f\x0F\x0F\"\"\x03\x022;\x04\x02C\\c|\x07\x02$$^^ppttvv" + + "\x06\x02\f\f\x0F\x0F$$^^\x04\x02GGgg\x04\x02--//\x03\x02bb\f\x02\v\f\x0F" + + "\x0F\"\"..11??]]__bb~~\x04\x02,,11\x04\x02CCcc\x04\x02DDdd\x04\x02EEe" + + "e\x04\x02FFff\x04\x02HHhh\x04\x02IIii\x04\x02JJjj\x04\x02KKkk\x04\x02" + + "LLll\x04\x02MMmm\x04\x02NNnn\x04\x02OOoo\x04\x02PPpp\x04\x02QQqq\x04\x02" + + "RRrr\x04\x02SSss\x04\x02TTtt\x04\x02UUuu\x04\x02VVvv\x04\x02WWww\x04\x02" + + "XXxx\x04\x02YYyy\x04\x02ZZzz\x04\x02[[{{\x04\x02\\\\||\x02\u04A8\x02\f" + + "\x03\x02\x02\x02\x02\x0E\x03\x02\x02\x02\x02\x10\x03\x02\x02\x02\x02\x12" + + "\x03\x02\x02\x02\x02\x14\x03\x02\x02\x02\x02\x16\x03\x02\x02\x02\x02\x18" + + "\x03\x02\x02\x02\x02\x1A\x03\x02\x02\x02\x02\x1C\x03\x02\x02\x02\x02\x1E" + + "\x03\x02\x02\x02\x02 \x03\x02\x02\x02\x02\"\x03\x02\x02\x02\x02$\x03\x02" + + "\x02\x02\x02&\x03\x02\x02\x02\x02(\x03\x02\x02\x02\x02*\x03\x02\x02\x02" + + "\x02,\x03\x02\x02\x02\x02.\x03\x02\x02\x02\x020\x03\x02\x02\x02\x022\x03" + + "\x02\x02\x02\x024\x03\x02\x02\x02\x026\x03\x02\x02\x02\x038\x03\x02\x02" + + "\x02\x03:\x03\x02\x02\x02\x03<\x03\x02\x02\x02\x03>\x03\x02\x02\x02\x03" + + "@\x03\x02\x02\x02\x04B\x03\x02\x02\x02\x04X\x03\x02\x02\x02\x04Z\x03\x02" + + "\x02\x02\x04\\\x03\x02\x02\x02\x04^\x03\x02\x02\x02\x04`\x03\x02\x02\x02" + + "\x04b\x03\x02\x02\x02\x04d\x03\x02\x02\x02\x04f\x03\x02\x02\x02\x04h\x03" + + "\x02\x02\x02\x04j\x03\x02\x02\x02\x04l\x03\x02\x02\x02\x04n\x03\x02\x02" + + "\x02\x04p\x03\x02\x02\x02\x04r\x03\x02\x02\x02\x04t\x03\x02\x02\x02\x04" + + "v\x03\x02\x02\x02\x04x\x03\x02\x02\x02\x04z\x03\x02\x02\x02\x04|\x03\x02" + + "\x02\x02\x04~\x03\x02\x02\x02\x04\x80\x03\x02\x02\x02\x04\x82\x03\x02" + + "\x02\x02\x04\x84\x03\x02\x02\x02\x04\x86\x03\x02\x02\x02\x04\x88\x03\x02" + + "\x02\x02\x04\x8A\x03\x02\x02\x02\x04\x8C\x03\x02\x02\x02\x04\x8E\x03\x02" + + "\x02\x02\x04\x90\x03\x02\x02\x02\x04\x92\x03\x02\x02\x02\x04\x94\x03\x02" + + "\x02\x02\x04\x96\x03\x02\x02\x02\x04\x98\x03\x02\x02\x02\x04\x9A\x03\x02" + + "\x02\x02\x04\x9C\x03\x02\x02\x02\x04\x9E\x03\x02\x02\x02\x04\xA0\x03\x02" + + "\x02\x02\x04\xA2\x03\x02\x02\x02\x04\xA4\x03\x02\x02\x02\x04\xA6\x03\x02" + + "\x02\x02\x04\xA8\x03\x02\x02\x02\x04\xAA\x03\x02\x02\x02\x04\xAC\x03\x02" + + "\x02\x02\x05\xAE\x03\x02\x02\x02\x05\xB0\x03\x02\x02\x02\x05\xB2\x03\x02" + + "\x02\x02\x05\xB4\x03\x02\x02\x02\x05\xB6\x03\x02\x02\x02\x05\xB8\x03\x02" + + "\x02\x02\x05\xBC\x03\x02\x02\x02\x05\xBE\x03\x02\x02\x02\x05\xC0\x03\x02" + + "\x02\x02\x05\xC2\x03\x02\x02\x02\x05\xC4\x03\x02\x02\x02\x06\xC6\x03\x02" + + "\x02\x02\x06\xC8\x03\x02\x02\x02\x06\xCA\x03\x02\x02\x02\x06\xCE\x03\x02" + + "\x02\x02\x06\xD0\x03\x02\x02\x02\x06\xD2\x03\x02\x02\x02\x06\xD4\x03\x02" + + "\x02\x02\x06\xD6\x03\x02\x02\x02\x07\xD8\x03\x02\x02\x02\x07\xDA\x03\x02" + + "\x02\x02\x07\xDC\x03\x02\x02\x02\x07\xDE\x03\x02\x02\x02\x07\xE0\x03\x02" + + "\x02\x02\x07\xE2\x03\x02\x02\x02\x07\xE4\x03\x02\x02\x02\x07\xE6\x03\x02" + + "\x02\x02\x07\xE8\x03\x02\x02\x02\x07\xEA\x03\x02\x02\x02\b\xEC\x03\x02" + + "\x02\x02\b\xEE\x03\x02\x02\x02\b\xF0\x03\x02\x02\x02\b\xF2\x03\x02\x02" + + "\x02\b\xF4\x03\x02\x02\x02\b\xF6\x03\x02\x02\x02\b\xF8\x03\x02\x02\x02" + + "\b\xFA\x03\x02\x02\x02\t\xFC\x03\x02\x02\x02\t\xFE\x03\x02\x02\x02\t\u0100" + + "\x03\x02\x02\x02\t\u0102\x03\x02\x02\x02\t\u0104\x03\x02\x02\x02\t\u0106" + + "\x03\x02\x02\x02\t\u0108\x03\x02\x02\x02\t\u010A\x03\x02\x02\x02\t\u010C" + + "\x03\x02\x02\x02\t\u010E\x03\x02\x02\x02\n\u0110\x03\x02\x02\x02\n\u0112" + + "\x03\x02\x02\x02\n\u0114\x03\x02\x02\x02\n\u0116\x03\x02\x02\x02\n\u0118" + + "\x03\x02\x02\x02\n\u011A\x03\x02\x02\x02\n\u011C\x03\x02\x02\x02\v\u011E" + + "\x03\x02\x02\x02\v\u0120\x03\x02\x02\x02\v\u0122\x03\x02\x02\x02\v\u0124" + + "\x03\x02\x02\x02\v\u0126\x03\x02\x02\x02\v\u0128\x03\x02\x02\x02\f\u015E" + + "\x03\x02\x02\x02\x0E\u0168\x03\x02\x02\x02\x10\u016F\x03\x02\x02\x02\x12" + + "\u0178\x03\x02\x02\x02\x14\u017F\x03\x02\x02\x02\x16\u0189\x03\x02\x02" + + "\x02\x18\u0190\x03\x02\x02\x02\x1A\u0197\x03\x02\x02\x02\x1C\u01A5\x03" + + "\x02\x02\x02\x1E\u01AC\x03\x02\x02\x02 \u01B4\x03\x02\x02\x02\"\u01C0" + + "\x03\x02\x02\x02$\u01CA\x03\x02\x02\x02&\u01D3\x03\x02\x02\x02(\u01D9" + + "\x03\x02\x02\x02*\u01E0\x03\x02\x02\x02,\u01E7\x03\x02\x02\x02.\u01EF" + + "\x03\x02\x02\x020\u01F8\x03\x02\x02\x022\u01FE\x03\x02\x02\x024\u020F" + + "\x03\x02\x02\x026\u021F\x03\x02\x02\x028\u0225\x03\x02\x02\x02:\u022A" + + "\x03\x02\x02\x02<\u022F\x03\x02\x02\x02>\u0233\x03\x02\x02\x02@\u0237" + + "\x03\x02\x02\x02B\u023B\x03\x02\x02\x02D\u023F\x03\x02\x02\x02F\u0241" + + "\x03\x02\x02\x02H\u0243\x03\x02\x02\x02J\u0246\x03\x02\x02\x02L\u0248" + + "\x03\x02\x02\x02N\u0251\x03\x02\x02\x02P\u0253\x03\x02\x02\x02R\u0258" + + "\x03\x02\x02\x02T\u025A\x03\x02\x02\x02V\u025F\x03\x02\x02\x02X\u027E" + + "\x03\x02\x02\x02Z\u0281\x03\x02\x02\x02\\\u02AF\x03\x02\x02\x02^\u02B1" + + "\x03\x02\x02\x02`\u02B4\x03\x02\x02\x02b\u02B8\x03\x02\x02\x02d\u02BC" + + "\x03\x02\x02\x02f\u02BE\x03\x02\x02\x02h\u02C0\x03\x02\x02\x02j\u02C5" + + "\x03\x02\x02\x02l\u02C7\x03\x02\x02\x02n\u02CD\x03\x02\x02\x02p\u02D3" + + "\x03\x02\x02\x02r\u02D8\x03\x02\x02\x02t\u02DA\x03\x02\x02\x02v\u02DD" + + "\x03\x02\x02\x02x\u02E0\x03\x02\x02\x02z\u02E5\x03\x02\x02\x02|\u02E9" + + "\x03\x02\x02\x02~\u02EE\x03\x02\x02\x02\x80\u02F4\x03\x02\x02\x02\x82" + + "\u02F7\x03\x02\x02\x02\x84\u02F9\x03\x02\x02\x02\x86\u02FF\x03\x02\x02" + + "\x02\x88\u0301\x03\x02\x02\x02\x8A\u0306\x03\x02\x02\x02\x8C\u0309\x03" + + "\x02\x02\x02\x8E\u030C\x03\x02\x02\x02\x90\u030E\x03\x02\x02\x02\x92\u0311" + + "\x03\x02\x02\x02\x94\u0313\x03\x02\x02\x02\x96\u0316\x03\x02\x02\x02\x98" + + "\u0318\x03\x02\x02\x02\x9A\u031A\x03\x02\x02\x02\x9C\u031C\x03\x02\x02" + + "\x02\x9E\u031E\x03\x02\x02\x02\xA0\u0320\x03\x02\x02\x02\xA2\u0325\x03" + + "\x02\x02\x02\xA4\u033A\x03\x02\x02\x02\xA6\u033C\x03\x02\x02\x02\xA8\u0344" + + "\x03\x02\x02\x02\xAA\u0348\x03\x02\x02\x02\xAC\u034C\x03\x02\x02\x02\xAE" + + "\u0350\x03\x02\x02\x02\xB0\u0355\x03\x02\x02\x02\xB2\u035B\x03\x02\x02" + + "\x02\xB4\u0361\x03\x02\x02\x02\xB6\u0365\x03\x02\x02\x02\xB8\u0369\x03" + + "\x02\x02\x02\xBA\u0375\x03\x02\x02\x02\xBC\u0378\x03\x02\x02\x02\xBE\u037C" + + "\x03\x02\x02\x02\xC0\u0380\x03\x02\x02\x02\xC2\u0384\x03\x02\x02\x02\xC4" + + "\u0388\x03\x02\x02\x02\xC6\u038C\x03\x02\x02\x02\xC8\u0391\x03\x02\x02" + + "\x02\xCA\u0395\x03\x02\x02\x02\xCC\u039D\x03\x02\x02\x02\xCE\u03B2\x03" + + "\x02\x02\x02\xD0\u03B4\x03\x02\x02\x02\xD2\u03B8\x03\x02\x02\x02\xD4\u03BC" + + "\x03\x02\x02\x02\xD6\u03C0\x03\x02\x02\x02\xD8\u03C4\x03\x02\x02\x02\xDA" + + "\u03C9\x03\x02\x02\x02\xDC\u03CD\x03\x02\x02\x02\xDE\u03D1\x03\x02\x02" + + "\x02\xE0\u03D5\x03\x02\x02\x02\xE2\u03D8\x03\x02\x02\x02\xE4\u03DC\x03" + + "\x02\x02\x02\xE6\u03E0\x03\x02\x02\x02\xE8\u03E4\x03\x02\x02\x02\xEA\u03E8" + + "\x03\x02\x02\x02\xEC\u03EC\x03\x02\x02\x02\xEE\u03F1\x03\x02\x02\x02\xF0" + + "\u03F6\x03\x02\x02\x02\xF2\u03FD\x03\x02\x02\x02\xF4\u0401\x03\x02\x02" + + "\x02\xF6\u0405\x03\x02\x02\x02\xF8\u0409\x03\x02\x02\x02\xFA\u040D\x03" + + "\x02\x02\x02\xFC\u0411\x03\x02\x02\x02\xFE\u0417\x03\x02\x02\x02\u0100" + + "\u041B\x03\x02\x02\x02\u0102\u041F\x03\x02\x02\x02\u0104\u0423\x03\x02" + + "\x02\x02\u0106\u0427\x03\x02\x02\x02\u0108\u042B\x03\x02\x02\x02\u010A" + + "\u042F\x03\x02\x02\x02\u010C\u0433\x03\x02\x02\x02\u010E\u0437\x03\x02" + + "\x02\x02\u0110\u043B\x03\x02\x02\x02\u0112\u0440\x03\x02\x02\x02\u0114" + + "\u0444\x03\x02\x02\x02\u0116\u0448\x03\x02\x02\x02\u0118\u044C\x03\x02" + + "\x02\x02\u011A\u0450\x03\x02\x02\x02\u011C\u0454\x03\x02\x02\x02\u011E" + + "\u0458\x03\x02\x02\x02\u0120\u045D\x03\x02\x02\x02\u0122\u0462\x03\x02" + + "\x02\x02\u0124\u046C\x03\x02\x02\x02\u0126\u0470\x03\x02\x02\x02\u0128" + + "\u0474\x03\x02\x02\x02\u012A\u0478\x03\x02\x02\x02\u012C\u047A\x03\x02" + + "\x02\x02\u012E\u047C\x03\x02\x02\x02\u0130\u047E\x03\x02\x02\x02\u0132" + + "\u0480\x03\x02\x02\x02\u0134\u0482\x03\x02\x02\x02\u0136\u0484\x03\x02" + + "\x02\x02\u0138\u0486\x03\x02\x02\x02\u013A\u0488\x03\x02\x02\x02\u013C" + + "\u048A\x03\x02\x02\x02\u013E\u048C\x03\x02\x02\x02\u0140\u048E\x03\x02" + + "\x02\x02\u0142\u0490\x03\x02\x02\x02\u0144\u0492\x03\x02\x02\x02\u0146" + + "\u0494\x03\x02\x02\x02\u0148\u0496\x03\x02\x02\x02\u014A\u0498\x03\x02" + + "\x02\x02\u014C\u049A\x03\x02\x02\x02\u014E\u049C\x03\x02\x02\x02\u0150" + + "\u049E\x03\x02"; private static readonly _serializedATNSegment1: string = - "\u01D7\u01D6\x03\x02\x02\x02\u01D8\u01DB\x03\x02\x02\x02\u01D9\u01D7\x03" + - "\x02\x02\x02\u01D9\u01DA\x03\x02\x02\x02\u01DA\u01FB\x03\x02\x02\x02\u01DB" + - "\u01D9\x03\x02\x02\x02\u01DC\u01DE\x05K%\x02\u01DD\u01DF\x05/\x17\x02" + - "\u01DE\u01DD\x03\x02\x02\x02\u01DF\u01E0\x03\x02\x02\x02\u01E0\u01DE\x03" + - "\x02\x02\x02\u01E0\u01E1\x03\x02\x02\x02\u01E1\u01FB\x03\x02\x02\x02\u01E2" + - "\u01E4\x05/\x17\x02\u01E3\u01E2\x03\x02\x02\x02\u01E4\u01E5\x03\x02\x02" + - "\x02\u01E5\u01E3\x03\x02\x02\x02\u01E5\u01E6\x03\x02\x02\x02\u01E6\u01EE" + - "\x03\x02\x02\x02\u01E7\u01EB\x05K%\x02\u01E8\u01EA\x05/\x17\x02\u01E9" + - "\u01E8\x03\x02\x02\x02\u01EA\u01ED\x03\x02\x02\x02\u01EB\u01E9\x03\x02" + - "\x02\x02\u01EB\u01EC\x03\x02\x02\x02\u01EC\u01EF\x03\x02\x02\x02\u01ED" + - "\u01EB\x03\x02\x02\x02\u01EE\u01E7\x03\x02\x02\x02\u01EE\u01EF\x03\x02" + - "\x02\x02\u01EF\u01F0\x03\x02\x02\x02\u01F0\u01F1\x057\x1B\x02\u01F1\u01FB" + - "\x03\x02\x02\x02\u01F2\u01F4\x05K%\x02\u01F3\u01F5\x05/\x17\x02\u01F4" + - "\u01F3\x03\x02\x02\x02\u01F5\u01F6\x03\x02\x02\x02\u01F6\u01F4\x03\x02" + - "\x02\x02\u01F6\u01F7\x03\x02\x02\x02\u01F7\u01F8\x03\x02\x02\x02\u01F8" + - "\u01F9\x057\x1B\x02\u01F9\u01FB\x03\x02\x02\x02\u01FA\u01D1\x03\x02\x02" + - "\x02\u01FA\u01DC\x03\x02\x02\x02\u01FA\u01E3\x03\x02\x02\x02\u01FA\u01F2" + - "\x03\x02\x02\x02\u01FB>\x03\x02\x02\x02\u01FC\u01FD\x05\xB5Z\x02\u01FD" + - "\u01FE\x05\xE3q\x02\u01FE@\x03\x02\x02\x02\u01FF\u0200\x05\xB3Y\x02\u0200" + - "\u0201\x05\xCDf\x02\u0201\u0202\x05\xB9\\\x02\u0202B\x03\x02\x02\x02\u0203" + - "\u0204\x05\xB3Y\x02\u0204\u0205\x05\xD7k\x02\u0205\u0206\x05\xB7[\x02" + - "\u0206D\x03\x02\x02\x02\u0207\u0208\x07?\x02\x02\u0208F\x03\x02\x02\x02" + - "\u0209\u020A\x07.\x02\x02\u020AH\x03\x02\x02\x02\u020B\u020C\x05\xB9\\" + - "\x02\u020C\u020D\x05\xBB]\x02\u020D\u020E\x05\xD7k\x02\u020E\u020F\x05" + - "\xB7[\x02\u020FJ\x03\x02\x02\x02\u0210\u0211\x070\x02\x02\u0211L\x03\x02" + - "\x02\x02\u0212\u0213\x05\xBD^\x02\u0213\u0214\x05\xB3Y\x02\u0214\u0215" + - "\x05\xC9d\x02\u0215\u0216\x05\xD7k\x02\u0216\u0217\x05\xBB]\x02\u0217" + - "N\x03\x02\x02\x02\u0218\u0219\x05\xBD^\x02\u0219\u021A\x05\xC3a\x02\u021A" + - "\u021B\x05\xD5j\x02\u021B\u021C\x05\xD7k\x02\u021C\u021D\x05\xD9l\x02" + - "\u021DP\x03\x02\x02\x02\u021E\u021F\x05\xC9d\x02\u021F\u0220\x05\xB3Y" + - "\x02\u0220\u0221\x05\xD7k\x02\u0221\u0222\x05\xD9l\x02\u0222R\x03\x02" + - "\x02\x02\u0223\u0224\x07*\x02\x02\u0224T\x03\x02\x02\x02\u0225\u0226\x05" + - "\xC3a\x02\u0226\u0227\x05\xCDf\x02\u0227V\x03\x02\x02\x02\u0228\u0229" + - "\x05\xC3a\x02\u0229\u022A\x05\xD7k\x02\u022AX\x03\x02\x02\x02\u022B\u022C" + - "\x05\xC9d\x02\u022C\u022D\x05\xC3a\x02\u022D\u022E\x05\xC7c\x02\u022E" + - "\u022F\x05\xBB]\x02\u022FZ\x03\x02\x02\x02\u0230\u0231\x05\xCDf\x02\u0231" + - "\u0232\x05\xCFg\x02\u0232\u0233\x05\xD9l\x02\u0233\\\x03\x02\x02\x02\u0234" + - "\u0235\x05\xCDf\x02\u0235\u0236\x05\xDBm\x02\u0236\u0237\x05\xC9d\x02" + - "\u0237\u0238\x05\xC9d\x02\u0238^\x03\x02\x02\x02\u0239\u023A\x05\xCDf" + - "\x02\u023A\u023B\x05\xDBm\x02\u023B\u023C\x05\xC9d\x02\u023C\u023D\x05" + - "\xC9d\x02\u023D\u023E\x05\xD7k\x02\u023E`\x03\x02\x02\x02\u023F\u0240" + - "\x05\xCFg\x02\u0240\u0241\x05\xD5j\x02\u0241b\x03\x02\x02\x02\u0242\u0243" + - "\x07A\x02\x02\u0243d\x03\x02\x02\x02\u0244\u0245\x05\xD5j\x02\u0245\u0246" + - "\x05\xC9d\x02\u0246\u0247\x05\xC3a\x02\u0247\u0248\x05\xC7c\x02\u0248" + - "\u0249\x05\xBB]\x02\u0249f\x03\x02\x02\x02\u024A\u024B\x07+\x02\x02\u024B" + - "h\x03\x02\x02\x02\u024C\u024D\x05\xD9l\x02\u024D\u024E\x05\xD5j\x02\u024E" + - "\u024F\x05\xDBm\x02\u024F\u0250\x05\xBB]\x02\u0250j\x03\x02\x02\x02\u0251" + - "\u0252\x05\xC3a\x02\u0252\u0253\x05\xCDf\x02\u0253\u0254\x05\xBD^\x02" + - "\u0254\u0255\x05\xCFg\x02\u0255l\x03\x02\x02\x02\u0256\u0257\x05\xBD^" + - "\x02\u0257\u0258\x05\xDBm\x02\u0258\u0259\x05\xCDf\x02\u0259\u025A\x05" + - "\xB7[\x02\u025A\u025B\x05\xD9l\x02\u025B\u025C\x05\xC3a\x02\u025C\u025D" + - "\x05\xCFg\x02\u025D\u025E\x05\xCDf\x02\u025E\u025F\x05\xD7k\x02\u025F" + - "n\x03\x02\x02\x02\u0260\u0261\x07a\x02\x02\u0261p\x03\x02\x02\x02\u0262" + - "\u0263\x07?\x02\x02\u0263\u0264\x07?\x02\x02\u0264r\x03\x02\x02\x02\u0265" + - "\u0266\x07#\x02\x02\u0266\u0267\x07?\x02\x02\u0267t\x03\x02\x02\x02\u0268" + - "\u0269\x07>\x02\x02\u0269v\x03\x02\x02\x02\u026A\u026B\x07>\x02\x02\u026B" + - "\u026C\x07?\x02\x02\u026Cx\x03\x02\x02\x02\u026D\u026E\x07@\x02\x02\u026E" + - "z\x03\x02\x02\x02\u026F\u0270\x07@\x02\x02\u0270\u0271\x07?\x02\x02\u0271" + - "|\x03\x02\x02\x02\u0272\u0273\x07-\x02\x02\u0273~\x03\x02\x02\x02\u0274" + - "\u0275\x07/\x02\x02\u0275\x80\x03\x02\x02\x02\u0276\u0277\x07,\x02\x02" + - "\u0277\x82\x03\x02\x02\x02\u0278\u0279\x071\x02\x02\u0279\x84\x03\x02" + - "\x02\x02\u027A\u027B\x07\'\x02\x02\u027B\x86\x03\x02\x02\x02\u027C\u027D" + - "\x07]\x02\x02\u027D\u027E\x03\x02\x02\x02\u027E\u027F\bC\x02\x02\u027F" + - "\u0280\bC\x02\x02\u0280\x88\x03\x02\x02\x02\u0281\u0282\x07_\x02\x02\u0282" + - "\u0283\x03\x02\x02\x02\u0283\u0284\bD\x05\x02\u0284\u0285\bD\x05\x02\u0285" + - "\x8A\x03\x02\x02\x02\u0286\u028C\x051\x18\x02\u0287\u028B\x051\x18\x02" + - "\u0288\u028B\x05/\x17\x02\u0289\u028B\x07a\x02\x02\u028A\u0287\x03\x02" + - "\x02\x02\u028A\u0288\x03\x02\x02\x02\u028A\u0289\x03\x02\x02\x02\u028B" + - "\u028E\x03\x02\x02\x02\u028C\u028A\x03\x02\x02\x02\u028C\u028D\x03\x02" + - "\x02\x02\u028D\u0298\x03\x02\x02\x02\u028E\u028C\x03\x02\x02\x02\u028F" + - "\u0293\t\v\x02\x02\u0290\u0294\x051\x18\x02\u0291\u0294\x05/\x17\x02\u0292" + - "\u0294\x07a\x02\x02\u0293\u0290\x03\x02\x02\x02\u0293\u0291\x03\x02\x02" + - "\x02\u0293\u0292\x03\x02\x02\x02\u0294\u0295\x03\x02\x02\x02\u0295\u0293" + - "\x03\x02\x02\x02\u0295\u0296\x03\x02\x02\x02\u0296\u0298\x03\x02\x02\x02" + - "\u0297\u0286\x03\x02\x02\x02\u0297\u028F\x03\x02\x02\x02\u0298\x8C\x03" + - "\x02\x02\x02\u0299\u029F\x07b\x02\x02\u029A\u029E\n\f\x02\x02\u029B\u029C" + - "\x07b\x02\x02\u029C\u029E\x07b\x02\x02\u029D\u029A\x03\x02\x02\x02\u029D" + - "\u029B\x03\x02\x02\x02\u029E\u02A1\x03\x02\x02\x02\u029F\u029D\x03\x02" + - "\x02\x02\u029F\u02A0\x03\x02\x02\x02\u02A0\u02A2\x03\x02\x02\x02\u02A1" + - "\u029F\x03\x02\x02\x02\u02A2\u02A3\x07b\x02\x02\u02A3\x8E\x03\x02\x02" + - "\x02\u02A4\u02A5\x05\'\x13\x02\u02A5\u02A6\x03\x02\x02\x02\u02A6\u02A7" + - "\bG\x04\x02\u02A7\x90\x03\x02\x02\x02\u02A8\u02A9\x05)\x14\x02\u02A9\u02AA" + - "\x03\x02\x02\x02\u02AA\u02AB\bH\x04\x02\u02AB\x92\x03\x02\x02\x02\u02AC" + - "\u02AD\x05+\x15\x02\u02AD\u02AE\x03\x02\x02\x02\u02AE\u02AF\bI\x04\x02" + - "\u02AF\x94\x03\x02\x02\x02\u02B0\u02B1\x07~\x02\x02\u02B1\u02B2\x03\x02" + - "\x02\x02\u02B2\u02B3\bJ\x06\x02\u02B3\u02B4\bJ\x05\x02\u02B4\x96\x03\x02" + - "\x02\x02\u02B5\u02B6\x07]\x02\x02\u02B6\u02B7\x03\x02\x02\x02\u02B7\u02B8" + - "\bK\x07\x02\u02B8\u02B9\bK\x03\x02\u02B9\u02BA\bK\x03\x02\u02BA\x98\x03" + - "\x02\x02\x02\u02BB\u02BC\x07_\x02\x02\u02BC\u02BD\x03\x02\x02\x02\u02BD" + - "\u02BE\bL\x05\x02\u02BE\u02BF\bL\x05\x02\u02BF\u02C0\bL\b\x02\u02C0\x9A" + - "\x03\x02\x02\x02\u02C1\u02C2\x07.\x02\x02\u02C2\u02C3\x03\x02\x02\x02" + - "\u02C3\u02C4\bM\t\x02\u02C4\x9C\x03\x02\x02\x02\u02C5\u02C6\x07?\x02\x02" + - "\u02C6\u02C7\x03\x02\x02\x02\u02C7\u02C8\bN\n\x02\u02C8\x9E\x03\x02\x02" + - "\x02\u02C9\u02CA\x05\xB3Y\x02\u02CA\u02CB\x05\xD7k\x02\u02CB\xA0\x03\x02" + - "\x02\x02\u02CC\u02CD\x05\xCBe\x02\u02CD\u02CE\x05\xBB]\x02\u02CE\u02CF" + - "\x05\xD9l\x02\u02CF\u02D0\x05\xB3Y\x02\u02D0\u02D1\x05\xB9\\\x02\u02D1" + - "\u02D2\x05\xB3Y\x02\u02D2\u02D3\x05\xD9l\x02\u02D3\u02D4\x05\xB3Y\x02" + - "\u02D4\xA2\x03\x02\x02\x02\u02D5\u02D6\x05\xCFg\x02\u02D6\u02D7\x05\xCD" + - "f\x02\u02D7\xA4\x03\x02\x02\x02\u02D8\u02D9\x05\xDFo\x02\u02D9\u02DA\x05" + - "\xC3a\x02\u02DA\u02DB\x05\xD9l\x02\u02DB\u02DC\x05\xC1`\x02\u02DC\xA6" + - "\x03\x02\x02\x02\u02DD\u02DF\x05\xA9T\x02\u02DE\u02DD\x03\x02\x02\x02" + - "\u02DF\u02E0\x03\x02\x02\x02\u02E0\u02DE\x03\x02\x02\x02\u02E0\u02E1\x03" + - "\x02\x02\x02\u02E1\xA8\x03\x02\x02\x02\u02E2\u02E4\n\r\x02\x02\u02E3\u02E2" + - "\x03\x02\x02\x02\u02E4\u02E5\x03\x02\x02\x02\u02E5\u02E3\x03\x02\x02\x02" + - "\u02E5\u02E6\x03\x02\x02\x02\u02E6\u02EA\x03\x02\x02\x02\u02E7\u02E8\x07" + - "1\x02\x02\u02E8\u02EA\n\x0E\x02\x02\u02E9\u02E3\x03\x02\x02\x02\u02E9" + - "\u02E7\x03\x02\x02\x02\u02EA\xAA\x03\x02\x02\x02\u02EB\u02EC\x05\x8DF" + - "\x02\u02EC\xAC\x03\x02\x02\x02\u02ED\u02EE\x05\'\x13\x02\u02EE\u02EF\x03" + - "\x02\x02\x02\u02EF\u02F0\bV\x04\x02\u02F0\xAE\x03\x02\x02\x02\u02F1\u02F2" + - "\x05)\x14\x02\u02F2\u02F3\x03\x02\x02\x02\u02F3\u02F4\bW\x04\x02\u02F4" + - "\xB0\x03\x02\x02\x02\u02F5\u02F6\x05+\x15\x02\u02F6\u02F7\x03\x02\x02" + - "\x02\u02F7\u02F8\bX\x04\x02\u02F8\xB2\x03\x02\x02\x02\u02F9\u02FA\t\x0F" + - "\x02\x02\u02FA\xB4\x03\x02\x02\x02\u02FB\u02FC\t\x10\x02\x02\u02FC\xB6" + - "\x03\x02\x02\x02\u02FD\u02FE\t\x11\x02\x02\u02FE\xB8\x03\x02\x02\x02\u02FF" + - "\u0300\t\x12\x02\x02\u0300\xBA\x03\x02\x02\x02\u0301\u0302\t\t\x02\x02" + - "\u0302\xBC\x03\x02\x02\x02\u0303\u0304\t\x13\x02\x02\u0304\xBE\x03\x02" + - "\x02\x02\u0305\u0306\t\x14\x02\x02\u0306\xC0\x03\x02\x02\x02\u0307\u0308" + - "\t\x15\x02\x02\u0308\xC2\x03\x02\x02\x02\u0309\u030A\t\x16\x02\x02\u030A" + - "\xC4\x03\x02\x02\x02\u030B\u030C\t\x17\x02\x02\u030C\xC6\x03\x02\x02\x02" + - "\u030D\u030E\t\x18\x02\x02\u030E\xC8\x03\x02\x02\x02\u030F\u0310\t\x19" + - "\x02\x02\u0310\xCA\x03\x02\x02\x02\u0311\u0312\t\x1A\x02\x02\u0312\xCC" + - "\x03\x02\x02\x02\u0313\u0314\t\x1B\x02\x02\u0314\xCE\x03\x02\x02\x02\u0315" + - "\u0316\t\x1C\x02\x02\u0316\xD0\x03\x02\x02\x02\u0317\u0318\t\x1D\x02\x02" + - "\u0318\xD2\x03\x02\x02\x02\u0319\u031A\t\x1E\x02\x02\u031A\xD4\x03\x02" + - "\x02\x02\u031B\u031C\t\x1F\x02\x02\u031C\xD6\x03\x02\x02\x02\u031D\u031E" + - "\t \x02\x02\u031E\xD8\x03\x02\x02\x02\u031F\u0320\t!\x02\x02\u0320\xDA" + - "\x03\x02\x02\x02\u0321\u0322\t\"\x02\x02\u0322\xDC\x03\x02\x02\x02\u0323" + - "\u0324\t#\x02\x02\u0324\xDE\x03\x02\x02\x02\u0325\u0326\t$\x02\x02\u0326" + - "\xE0\x03\x02\x02\x02\u0327\u0328\t%\x02\x02\u0328\xE2\x03\x02\x02\x02" + - "\u0329\u032A\t&\x02\x02\u032A\xE4\x03\x02\x02\x02\u032B\u032C\t\'\x02" + - "\x02\u032C\xE6\x03\x02\x02\x02\'\x02\x03\x04\u016B\u0175\u0179\u017C\u0185" + - "\u0187\u0192\u01A5\u01AA\u01AF\u01B1\u01BC\u01C4\u01C7\u01C9\u01CE\u01D3" + - "\u01D9\u01E0\u01E5\u01EB\u01EE\u01F6\u01FA\u028A\u028C\u0293\u0295\u0297" + - "\u029D\u029F\u02E0\u02E5\u02E9\v\x07\x03\x02\x07\x04\x02\x02\x03\x02\x06" + - "\x02\x02\t\x17\x02\t?\x02\t@\x02\t\x1F\x02\t\x1E\x02"; + "\x02\x02\u0152\u04A0\x03\x02\x02\x02\u0154\u04A2\x03\x02\x02\x02\u0156" + + "\u04A4\x03\x02\x02\x02\u0158\u04A6\x03\x02\x02\x02\u015A\u04A8\x03\x02" + + "\x02\x02\u015C\u04AA\x03\x02\x02\x02\u015E\u015F\x05\u0130\x94\x02\u015F" + + "\u0160\x05\u013A\x99\x02\u0160\u0161\x05\u014E\xA3\x02\u0161\u0162\x05" + + "\u014E\xA3\x02\u0162\u0163\x05\u0132\x95\x02\u0163\u0164\x05\u012E\x93" + + "\x02\u0164\u0165\x05\u0150\xA4\x02\u0165\u0166\x03\x02\x02\x02\u0166\u0167" + + "\b\x02\x02\x02\u0167\r\x03\x02\x02\x02\u0168\u0169\x05\u0130\x94\x02\u0169" + + "\u016A\x05\u014C\xA2\x02\u016A\u016B\x05\u0146\x9F\x02\u016B\u016C\x05" + + "\u0148\xA0\x02\u016C\u016D\x03\x02\x02\x02\u016D\u016E\b\x03\x03\x02\u016E" + + "\x0F\x03\x02\x02\x02\u016F\u0170\x05\u0132\x95\x02\u0170\u0171\x05\u0144" + + "\x9E\x02\u0171\u0172\x05\u014C\xA2\x02\u0172\u0173\x05\u013A\x99\x02\u0173" + + "\u0174\x05\u012E\x93\x02\u0174\u0175\x05\u0138\x98\x02\u0175\u0176\x03" + + "\x02\x02\x02\u0176\u0177\b\x04\x04\x02\u0177\x11\x03\x02\x02\x02\u0178" + + "\u0179\x05\u0132\x95\x02\u0179\u017A\x05\u0154\xA6\x02\u017A\u017B\x05" + + "\u012A\x91\x02\u017B\u017C\x05\u0140\x9C\x02\u017C\u017D\x03\x02\x02\x02" + + "\u017D\u017E\b\x05\x02\x02\u017E\x13\x03\x02\x02\x02\u017F\u0180\x05\u0132" + + "\x95\x02\u0180\u0181\x05\u0158\xA8\x02\u0181\u0182\x05\u0148\xA0\x02\u0182" + + "\u0183\x05\u0140\x9C\x02\u0183\u0184\x05\u012A\x91\x02\u0184\u0185\x05" + + "\u013A\x99\x02\u0185\u0186\x05\u0144\x9E\x02\u0186\u0187\x03\x02\x02\x02" + + "\u0187\u0188\b\x06\x05\x02\u0188\x15\x03\x02\x02\x02\u0189\u018A\x05\u0134" + + "\x96\x02\u018A\u018B\x05\u014C\xA2\x02\u018B\u018C\x05\u0146\x9F\x02\u018C" + + "\u018D\x05\u0142\x9D\x02\u018D\u018E\x03\x02\x02\x02\u018E\u018F\b\x07" + + "\x06\x02\u018F\x17\x03\x02\x02\x02\u0190\u0191\x05\u0136\x97\x02\u0191" + + "\u0192\x05\u014C\xA2\x02\u0192\u0193\x05\u0146\x9F\x02\u0193\u0194\x05" + + "\u013E\x9B\x02\u0194\u0195\x03\x02\x02\x02\u0195\u0196\b\b\x02\x02\u0196" + + "\x19\x03\x02\x02\x02\u0197\u0198\x05\u013A\x99\x02\u0198\u0199\x05\u0144" + + "\x9E\x02\u0199\u019A\x05\u0140\x9C\x02\u019A\u019B\x05\u013A\x99\x02\u019B" + + "\u019C\x05\u0144\x9E\x02\u019C\u019D\x05\u0132\x95\x02\u019D\u019E\x05" + + "\u014E\xA3\x02\u019E\u019F\x05\u0150\xA4\x02\u019F\u01A0\x05\u012A\x91" + + "\x02\u01A0\u01A1\x05\u0150\xA4\x02\u01A1\u01A2\x05\u014E\xA3\x02\u01A2" + + "\u01A3\x03\x02\x02\x02\u01A3\u01A4\b\t\x02\x02\u01A4\x1B\x03\x02\x02\x02" + + "\u01A5\u01A6\x05\u013E\x9B\x02\u01A6\u01A7\x05\u0132\x95\x02\u01A7\u01A8" + + "\x05\u0132\x95\x02\u01A8\u01A9\x05\u0148\xA0\x02\u01A9\u01AA\x03\x02\x02" + + "\x02\u01AA\u01AB\b\n\x03\x02\u01AB\x1D\x03\x02\x02\x02\u01AC\u01AD\x05" + + "\u0140\x9C\x02\u01AD\u01AE\x05\u013A\x99\x02\u01AE\u01AF\x05\u0142\x9D" + + "\x02\u01AF\u01B0\x05\u013A\x99\x02\u01B0\u01B1\x05\u0150\xA4\x02\u01B1" + + "\u01B2\x03\x02\x02\x02\u01B2\u01B3\b\v\x02\x02\u01B3\x1F\x03\x02\x02\x02" + + "\u01B4\u01B5\x05\u0142\x9D\x02\u01B5\u01B6\x05\u0154\xA6\x02\u01B6\u01B7" + + "\x05T&\x02\u01B7\u01B8\x05\u0132\x95\x02\u01B8\u01B9\x05\u0158\xA8\x02" + + "\u01B9\u01BA\x05\u0148\xA0\x02\u01BA\u01BB\x05\u012A\x91\x02\u01BB\u01BC" + + "\x05\u0144\x9E\x02\u01BC\u01BD\x05\u0130\x94\x02\u01BD\u01BE\x03\x02\x02" + + "\x02\u01BE\u01BF\b\f\x07\x02\u01BF!\x03\x02\x02\x02\u01C0\u01C1\x05\u0148" + + "\xA0\x02\u01C1\u01C2\x05\u014C\xA2\x02\u01C2\u01C3\x05\u0146\x9F\x02\u01C3" + + "\u01C4\x05\u013C\x9A\x02\u01C4\u01C5\x05\u0132\x95\x02\u01C5\u01C6\x05" + + "\u012E\x93\x02\u01C6\u01C7\x05\u0150\xA4\x02\u01C7\u01C8\x03\x02\x02\x02" + + "\u01C8\u01C9\b\r\x03\x02\u01C9#\x03\x02\x02\x02\u01CA\u01CB\x05\u014C" + + "\xA2\x02\u01CB\u01CC\x05\u0132\x95\x02\u01CC\u01CD\x05\u0144\x9E\x02\u01CD" + + "\u01CE\x05\u012A\x91\x02\u01CE\u01CF\x05\u0142\x9D\x02\u01CF\u01D0\x05" + + "\u0132\x95\x02\u01D0\u01D1\x03\x02\x02\x02\u01D1\u01D2\b\x0E\b\x02\u01D2" + + "%\x03\x02\x02\x02\u01D3\u01D4\x05\u014C\xA2\x02\u01D4\u01D5\x05\u0146" + + "\x9F\x02\u01D5\u01D6\x05\u0156\xA7\x02\u01D6\u01D7\x03\x02\x02\x02\u01D7" + + "\u01D8\b\x0F\x02\x02\u01D8\'\x03\x02\x02\x02\u01D9\u01DA\x05\u014E\xA3" + + "\x02\u01DA\u01DB\x05\u0138\x98\x02\u01DB\u01DC\x05\u0146\x9F\x02\u01DC" + + "\u01DD\x05\u0156\xA7\x02\u01DD\u01DE\x03\x02\x02\x02\u01DE\u01DF\b\x10" + + "\t\x02\u01DF)\x03\x02\x02\x02\u01E0\u01E1\x05\u014E\xA3\x02\u01E1\u01E2" + + "\x05\u0146\x9F\x02\u01E2\u01E3\x05\u014C\xA2\x02\u01E3\u01E4\x05\u0150" + + "\xA4\x02\u01E4\u01E5\x03\x02\x02\x02\u01E5\u01E6\b\x11\x02\x02\u01E6+" + + "\x03\x02\x02\x02\u01E7\u01E8\x05\u014E\xA3\x02\u01E8\u01E9\x05\u0150\xA4" + + "\x02\u01E9\u01EA\x05\u012A\x91\x02\u01EA\u01EB\x05\u0150\xA4\x02\u01EB" + + "\u01EC\x05\u014E\xA3\x02\u01EC\u01ED\x03\x02\x02\x02\u01ED\u01EE\b\x12" + + "\x02\x02\u01EE-\x03\x02\x02\x02\u01EF\u01F0\x05\u0156\xA7\x02\u01F0\u01F1" + + "\x05\u0138\x98\x02\u01F1\u01F2\x05\u0132\x95\x02\u01F2\u01F3\x05\u014C" + + "\xA2\x02\u01F3\u01F4\x05\u0132\x95\x02\u01F4\u01F5\x03\x02\x02\x02\u01F5" + + "\u01F6\b\x13\x02\x02\u01F6/\x03\x02\x02\x02\u01F7\u01F9\n\x02\x02\x02" + + "\u01F8\u01F7\x03\x02\x02\x02\u01F9\u01FA\x03\x02\x02\x02\u01FA\u01F8\x03" + + "\x02\x02\x02\u01FA\u01FB\x03\x02\x02\x02\u01FB\u01FC\x03\x02\x02\x02\u01FC" + + "\u01FD\b\x14\x02\x02\u01FD1\x03\x02\x02\x02\u01FE\u01FF\x071\x02\x02\u01FF" + + "\u0200\x071\x02\x02\u0200\u0204\x03\x02\x02\x02\u0201\u0203\n\x03\x02" + + "\x02\u0202\u0201\x03\x02\x02\x02\u0203\u0206\x03\x02\x02\x02\u0204\u0202" + + "\x03\x02\x02\x02\u0204\u0205\x03\x02\x02\x02\u0205\u0208\x03\x02\x02\x02" + + "\u0206\u0204\x03\x02\x02\x02\u0207\u0209\x07\x0F\x02\x02\u0208\u0207\x03" + + "\x02\x02\x02\u0208\u0209\x03\x02\x02\x02\u0209\u020B\x03\x02\x02\x02\u020A" + + "\u020C\x07\f\x02\x02\u020B\u020A\x03\x02\x02\x02\u020B\u020C\x03\x02\x02" + + "\x02\u020C\u020D\x03\x02\x02\x02\u020D\u020E\b\x15\n\x02\u020E3\x03\x02" + + "\x02\x02\u020F\u0210\x071\x02\x02\u0210\u0211\x07,\x02\x02\u0211\u0216" + + "\x03\x02\x02\x02\u0212\u0215\x054\x16\x02\u0213\u0215\v\x02\x02\x02\u0214" + + "\u0212\x03\x02\x02\x02\u0214\u0213\x03\x02\x02\x02\u0215\u0218\x03\x02" + + "\x02\x02\u0216\u0217\x03\x02\x02\x02\u0216\u0214\x03\x02\x02\x02\u0217" + + "\u0219\x03\x02\x02\x02\u0218\u0216\x03\x02\x02\x02\u0219\u021A\x07,\x02" + + "\x02\u021A\u021B\x071\x02\x02\u021B\u021C\x03\x02\x02\x02\u021C\u021D" + + "\b\x16\n\x02\u021D5\x03\x02\x02\x02\u021E\u0220\t\x04\x02\x02\u021F\u021E" + + "\x03\x02\x02\x02\u0220\u0221\x03\x02\x02\x02\u0221\u021F\x03\x02\x02\x02" + + "\u0221\u0222\x03\x02\x02\x02\u0222\u0223\x03\x02\x02\x02\u0223\u0224\b" + + "\x17\n\x02\u02247\x03\x02\x02\x02\u0225\u0226\x05\xA0L\x02\u0226\u0227" + + "\x03\x02\x02\x02\u0227\u0228\b\x18\v\x02\u0228\u0229\b\x18\f\x02\u0229" + + "9\x03\x02\x02\x02\u022A\u022B\x05B\x1D\x02\u022B\u022C\x03\x02\x02\x02" + + "\u022C\u022D\b\x19\r\x02\u022D\u022E\b\x19\x0E\x02\u022E;\x03\x02\x02" + + "\x02\u022F\u0230\x056\x17\x02\u0230\u0231\x03\x02\x02\x02\u0231\u0232" + + "\b\x1A\n\x02\u0232=\x03\x02\x02\x02\u0233\u0234\x052\x15\x02\u0234\u0235" + + "\x03\x02\x02\x02\u0235\u0236\b\x1B\n\x02\u0236?\x03\x02\x02\x02\u0237" + + "\u0238\x054\x16\x02\u0238\u0239\x03\x02\x02\x02\u0239\u023A\b\x1C\n\x02" + + "\u023AA\x03\x02\x02\x02\u023B\u023C\x07~\x02\x02\u023C\u023D\x03\x02\x02" + + "\x02\u023D\u023E\b\x1D\x0E\x02\u023EC\x03\x02\x02\x02\u023F\u0240\t\x05" + + "\x02\x02\u0240E\x03\x02\x02\x02\u0241\u0242\t\x06\x02\x02\u0242G\x03\x02" + + "\x02\x02\u0243\u0244\x07^\x02\x02\u0244\u0245\t\x07\x02\x02\u0245I\x03" + + "\x02\x02\x02\u0246\u0247\n\b\x02\x02\u0247K\x03\x02\x02\x02\u0248\u024A" + + "\t\t\x02\x02\u0249\u024B\t\n\x02\x02\u024A\u0249\x03\x02\x02\x02\u024A" + + "\u024B\x03\x02\x02\x02\u024B\u024D\x03\x02\x02\x02\u024C\u024E\x05D\x1E" + + "\x02\u024D\u024C\x03\x02\x02\x02\u024E\u024F\x03\x02\x02\x02\u024F\u024D" + + "\x03\x02\x02\x02\u024F\u0250\x03\x02\x02\x02\u0250M\x03\x02\x02\x02\u0251" + + "\u0252\x07B\x02\x02\u0252O\x03\x02\x02\x02\u0253\u0254\x07b\x02\x02\u0254" + + "Q\x03\x02\x02\x02\u0255\u0259\n\v\x02\x02\u0256\u0257\x07b\x02\x02\u0257" + + "\u0259\x07b\x02\x02\u0258\u0255\x03\x02\x02\x02\u0258\u0256\x03\x02\x02" + + "\x02\u0259S\x03\x02\x02\x02\u025A\u025B\x07a\x02\x02\u025BU\x03\x02\x02" + + "\x02\u025C\u0260\x05F\x1F\x02\u025D\u0260\x05D\x1E\x02\u025E\u0260\x05" + + "T&\x02\u025F\u025C\x03\x02\x02\x02\u025F\u025D\x03\x02\x02\x02\u025F\u025E" + + "\x03\x02\x02\x02\u0260W\x03\x02\x02\x02\u0261\u0266\x07$\x02\x02\u0262" + + "\u0265\x05H \x02\u0263\u0265\x05J!\x02\u0264\u0262\x03\x02\x02\x02\u0264" + + "\u0263\x03\x02\x02\x02\u0265\u0268\x03\x02\x02\x02\u0266\u0264\x03\x02" + + "\x02\x02\u0266\u0267\x03\x02\x02\x02\u0267\u0269\x03\x02\x02\x02\u0268" + + "\u0266\x03\x02\x02\x02\u0269\u027F\x07$\x02\x02\u026A\u026B\x07$\x02\x02" + + "\u026B\u026C\x07$\x02\x02\u026C\u026D\x07$\x02\x02\u026D\u0271\x03\x02" + + "\x02\x02\u026E\u0270\n\x03\x02\x02\u026F\u026E\x03\x02\x02\x02\u0270\u0273" + + "\x03\x02\x02\x02\u0271\u0272\x03\x02\x02\x02\u0271\u026F\x03\x02\x02\x02" + + "\u0272\u0274\x03\x02\x02\x02\u0273\u0271\x03\x02\x02\x02\u0274\u0275\x07" + + "$\x02\x02\u0275\u0276\x07$\x02\x02\u0276\u0277\x07$\x02\x02\u0277\u0279" + + "\x03\x02\x02\x02\u0278\u027A\x07$\x02\x02\u0279\u0278\x03\x02\x02\x02" + + "\u0279\u027A\x03\x02\x02\x02\u027A\u027C\x03\x02\x02\x02\u027B\u027D\x07" + + "$\x02\x02\u027C\u027B\x03\x02\x02\x02\u027C\u027D\x03\x02\x02\x02\u027D" + + "\u027F\x03\x02\x02\x02\u027E\u0261\x03\x02\x02\x02\u027E\u026A\x03\x02" + + "\x02\x02\u027FY\x03\x02\x02\x02\u0280\u0282\x05D\x1E\x02\u0281\u0280\x03" + + "\x02\x02\x02\u0282\u0283\x03\x02\x02\x02\u0283\u0281\x03\x02\x02\x02\u0283" + + "\u0284\x03\x02\x02\x02\u0284[\x03\x02\x02\x02\u0285\u0287\x05D\x1E\x02" + + "\u0286\u0285\x03\x02\x02\x02\u0287\u0288\x03\x02\x02\x02\u0288\u0286\x03" + + "\x02\x02\x02\u0288\u0289\x03\x02\x02\x02\u0289\u028A\x03\x02\x02\x02\u028A" + + "\u028E\x05j1\x02\u028B\u028D\x05D\x1E\x02\u028C\u028B\x03\x02\x02\x02" + + "\u028D\u0290\x03\x02\x02\x02\u028E\u028C\x03\x02\x02\x02\u028E\u028F\x03" + + "\x02\x02\x02\u028F\u02B0\x03\x02\x02\x02\u0290\u028E\x03\x02\x02\x02\u0291" + + "\u0293\x05j1\x02\u0292\u0294\x05D\x1E\x02\u0293\u0292\x03\x02\x02\x02" + + "\u0294\u0295\x03\x02\x02\x02\u0295\u0293\x03\x02\x02\x02\u0295\u0296\x03" + + "\x02\x02\x02\u0296\u02B0\x03\x02\x02\x02\u0297\u0299\x05D\x1E\x02\u0298" + + "\u0297\x03\x02\x02\x02\u0299\u029A\x03\x02\x02\x02\u029A\u0298\x03\x02" + + "\x02\x02\u029A\u029B\x03\x02\x02\x02\u029B\u02A3\x03\x02\x02\x02\u029C" + + "\u02A0\x05j1\x02\u029D\u029F\x05D\x1E\x02\u029E\u029D\x03\x02\x02\x02" + + "\u029F\u02A2\x03\x02\x02\x02\u02A0\u029E\x03\x02\x02\x02\u02A0\u02A1\x03" + + "\x02\x02\x02\u02A1\u02A4\x03\x02\x02\x02\u02A2\u02A0\x03\x02\x02\x02\u02A3" + + "\u029C\x03\x02\x02\x02\u02A3\u02A4\x03\x02\x02\x02\u02A4\u02A5\x03\x02" + + "\x02\x02\u02A5\u02A6\x05L\"\x02\u02A6\u02B0\x03\x02\x02\x02\u02A7\u02A9" + + "\x05j1\x02\u02A8\u02AA\x05D\x1E\x02\u02A9\u02A8\x03\x02\x02\x02\u02AA" + + "\u02AB\x03\x02\x02\x02\u02AB\u02A9\x03\x02\x02\x02\u02AB\u02AC\x03\x02" + + "\x02\x02\u02AC\u02AD\x03\x02\x02\x02\u02AD\u02AE\x05L\"\x02\u02AE\u02B0" + + "\x03\x02\x02\x02\u02AF\u0286\x03\x02\x02\x02\u02AF\u0291\x03\x02\x02\x02" + + "\u02AF\u0298\x03\x02\x02\x02\u02AF\u02A7\x03\x02\x02\x02\u02B0]\x03\x02" + + "\x02\x02\u02B1\u02B2\x05\u012C\x92\x02\u02B2\u02B3\x05\u015A\xA9\x02\u02B3" + + "_\x03\x02\x02\x02\u02B4\u02B5\x05\u012A\x91\x02\u02B5\u02B6\x05\u0144" + + "\x9E\x02\u02B6\u02B7\x05\u0130\x94\x02\u02B7a\x03\x02\x02\x02\u02B8\u02B9" + + "\x05\u012A\x91\x02\u02B9\u02BA\x05\u014E\xA3\x02\u02BA\u02BB\x05\u012E" + + "\x93\x02\u02BBc\x03\x02\x02\x02\u02BC\u02BD\x07?\x02\x02\u02BDe\x03\x02" + + "\x02\x02\u02BE\u02BF\x07.\x02\x02\u02BFg\x03\x02\x02\x02\u02C0\u02C1\x05" + + "\u0130\x94\x02\u02C1\u02C2\x05\u0132\x95\x02\u02C2\u02C3\x05\u014E\xA3" + + "\x02\u02C3\u02C4\x05\u012E\x93\x02\u02C4i\x03\x02\x02\x02\u02C5\u02C6" + + "\x070\x02\x02\u02C6k\x03\x02\x02\x02\u02C7\u02C8\x05\u0134\x96\x02\u02C8" + + "\u02C9\x05\u012A\x91\x02\u02C9\u02CA\x05\u0140\x9C\x02\u02CA\u02CB\x05" + + "\u014E\xA3\x02\u02CB\u02CC\x05\u0132\x95\x02\u02CCm\x03\x02\x02\x02\u02CD" + + "\u02CE\x05\u0134\x96\x02\u02CE\u02CF\x05\u013A\x99\x02\u02CF\u02D0\x05" + + "\u014C\xA2\x02\u02D0\u02D1\x05\u014E\xA3\x02\u02D1\u02D2\x05\u0150\xA4" + + "\x02\u02D2o\x03\x02\x02\x02\u02D3\u02D4\x05\u0140\x9C\x02\u02D4\u02D5" + + "\x05\u012A\x91\x02\u02D5\u02D6\x05\u014E\xA3\x02\u02D6\u02D7\x05\u0150" + + "\xA4\x02\u02D7q\x03\x02\x02\x02\u02D8\u02D9\x07*\x02\x02\u02D9s\x03\x02" + + "\x02\x02\u02DA\u02DB\x05\u013A\x99\x02\u02DB\u02DC\x05\u0144\x9E\x02\u02DC" + + "u\x03\x02\x02\x02\u02DD\u02DE\x05\u013A\x99\x02\u02DE\u02DF\x05\u014E" + + "\xA3\x02\u02DFw\x03\x02\x02\x02\u02E0\u02E1\x05\u0140\x9C\x02\u02E1\u02E2" + + "\x05\u013A\x99\x02\u02E2\u02E3\x05\u013E\x9B\x02\u02E3\u02E4\x05\u0132" + + "\x95\x02\u02E4y\x03\x02\x02\x02\u02E5\u02E6\x05\u0144\x9E\x02\u02E6\u02E7" + + "\x05\u0146\x9F\x02\u02E7\u02E8\x05\u0150\xA4\x02\u02E8{\x03\x02\x02\x02" + + "\u02E9\u02EA\x05\u0144\x9E\x02\u02EA\u02EB\x05\u0152\xA5\x02\u02EB\u02EC" + + "\x05\u0140\x9C\x02\u02EC\u02ED\x05\u0140\x9C\x02\u02ED}\x03\x02\x02\x02" + + "\u02EE\u02EF\x05\u0144\x9E\x02\u02EF\u02F0\x05\u0152\xA5\x02\u02F0\u02F1" + + "\x05\u0140\x9C\x02\u02F1\u02F2\x05\u0140\x9C\x02\u02F2\u02F3\x05\u014E" + + "\xA3\x02\u02F3\x7F\x03\x02\x02\x02\u02F4\u02F5\x05\u0146\x9F\x02\u02F5" + + "\u02F6\x05\u014C\xA2\x02\u02F6\x81\x03\x02\x02\x02\u02F7\u02F8\x07A\x02" + + "\x02\u02F8\x83\x03\x02\x02\x02\u02F9\u02FA\x05\u014C\xA2\x02\u02FA\u02FB" + + "\x05\u0140\x9C\x02\u02FB\u02FC\x05\u013A\x99\x02\u02FC\u02FD\x05\u013E" + + "\x9B\x02\u02FD\u02FE\x05\u0132\x95\x02\u02FE\x85\x03\x02\x02\x02\u02FF" + + "\u0300\x07+\x02\x02\u0300\x87\x03\x02\x02\x02\u0301\u0302\x05\u0150\xA4" + + "\x02\u0302\u0303\x05\u014C\xA2\x02\u0303\u0304\x05\u0152\xA5\x02\u0304" + + "\u0305\x05\u0132\x95\x02\u0305\x89\x03\x02\x02\x02\u0306\u0307\x07?\x02" + + "\x02\u0307\u0308\x07?\x02\x02\u0308\x8B\x03\x02\x02\x02\u0309\u030A\x07" + + "#\x02\x02\u030A\u030B\x07?\x02\x02\u030B\x8D\x03\x02\x02\x02\u030C\u030D" + + "\x07>\x02\x02\u030D\x8F\x03\x02\x02\x02\u030E\u030F\x07>\x02\x02\u030F" + + "\u0310\x07?\x02\x02\u0310\x91\x03\x02\x02\x02\u0311\u0312\x07@\x02\x02" + + "\u0312\x93\x03\x02\x02\x02\u0313\u0314\x07@\x02\x02\u0314\u0315\x07?\x02" + + "\x02\u0315\x95\x03\x02\x02\x02\u0316\u0317\x07-\x02\x02\u0317\x97\x03" + + "\x02\x02\x02\u0318\u0319\x07/\x02\x02\u0319\x99\x03\x02\x02\x02\u031A" + + "\u031B\x07,\x02\x02\u031B\x9B\x03\x02\x02\x02\u031C\u031D\x071\x02\x02" + + "\u031D\x9D\x03\x02\x02\x02\u031E\u031F\x07\'\x02\x02\u031F\x9F\x03\x02" + + "\x02\x02\u0320\u0321\x07]\x02\x02\u0321\u0322\x03\x02\x02\x02\u0322\u0323" + + "\bL\x02\x02\u0323\u0324\bL\x02\x02\u0324\xA1\x03\x02\x02\x02\u0325\u0326" + + "\x07_\x02\x02\u0326\u0327\x03\x02\x02\x02\u0327\u0328\bM\x0E\x02\u0328" + + "\u0329\bM\x0E\x02\u0329\xA3\x03\x02\x02\x02\u032A\u032E\x05F\x1F\x02\u032B" + + "\u032D\x05V\'\x02\u032C\u032B\x03\x02\x02\x02\u032D\u0330\x03\x02\x02" + + "\x02\u032E\u032C\x03\x02\x02\x02\u032E\u032F\x03\x02\x02\x02\u032F\u033B" + + "\x03\x02\x02\x02\u0330\u032E\x03\x02\x02\x02\u0331\u0334\x05T&\x02\u0332" + + "\u0334\x05N#\x02\u0333\u0331\x03\x02\x02\x02\u0333\u0332\x03\x02\x02\x02" + + "\u0334\u0336\x03\x02\x02\x02\u0335\u0337\x05V\'\x02\u0336\u0335\x03\x02" + + "\x02\x02\u0337\u0338\x03\x02\x02\x02\u0338\u0336\x03\x02\x02\x02\u0338" + + "\u0339\x03\x02\x02\x02\u0339\u033B\x03\x02\x02\x02\u033A\u032A\x03\x02" + + "\x02\x02\u033A\u0333\x03\x02\x02\x02\u033B\xA5\x03\x02\x02\x02\u033C\u033E" + + "\x05P$\x02\u033D\u033F\x05R%\x02\u033E\u033D\x03\x02\x02\x02\u033F\u0340" + + "\x03\x02\x02\x02\u0340\u033E\x03\x02\x02\x02\u0340\u0341\x03\x02\x02\x02" + + "\u0341\u0342\x03\x02\x02\x02\u0342\u0343\x05P$\x02\u0343\xA7\x03\x02\x02" + + "\x02\u0344\u0345\x052\x15\x02\u0345\u0346\x03\x02\x02\x02\u0346\u0347" + + "\bP\n\x02\u0347\xA9\x03\x02\x02\x02\u0348\u0349\x054\x16\x02\u0349\u034A" + + "\x03\x02\x02\x02\u034A\u034B\bQ\n\x02\u034B\xAB\x03\x02\x02\x02\u034C" + + "\u034D\x056\x17\x02\u034D\u034E\x03\x02\x02\x02\u034E\u034F\bR\n\x02\u034F" + + "\xAD\x03\x02\x02\x02\u0350\u0351\x05B\x1D\x02\u0351\u0352\x03\x02\x02" + + "\x02\u0352\u0353\bS\r\x02\u0353\u0354\bS\x0E\x02\u0354\xAF\x03\x02\x02" + + "\x02\u0355\u0356\x05\xA0L\x02\u0356\u0357\x03\x02\x02\x02\u0357\u0358" + + "\bT\v\x02\u0358\u0359\bT\x06\x02\u0359\u035A\bT\x06\x02\u035A\xB1\x03" + + "\x02\x02\x02\u035B\u035C\x05\xA2M\x02\u035C\u035D\x03\x02\x02\x02\u035D" + + "\u035E\bU\x0F\x02\u035E\u035F\bU\x0E\x02\u035F\u0360\bU\x0E\x02\u0360" + + "\xB3\x03\x02\x02\x02\u0361\u0362\x05f/\x02\u0362\u0363\x03\x02\x02\x02" + + "\u0363\u0364\bV\x10\x02\u0364\xB5\x03\x02\x02\x02\u0365\u0366\x05d.\x02" + + "\u0366\u0367\x03\x02\x02\x02\u0367\u0368\bW\x11\x02\u0368\xB7\x03\x02" + + "\x02\x02\u0369\u036A\x05\u0142\x9D\x02\u036A\u036B\x05\u0132\x95\x02\u036B" + + "\u036C\x05\u0150\xA4\x02\u036C\u036D\x05\u012A\x91\x02\u036D\u036E\x05" + + "\u0130\x94\x02\u036E\u036F\x05\u012A\x91\x02\u036F\u0370\x05\u0150\xA4" + + "\x02\u0370\u0371\x05\u012A\x91\x02\u0371\xB9\x03\x02\x02\x02\u0372\u0376" + + "\n\f\x02\x02\u0373\u0374\x071\x02\x02\u0374\u0376\n\r\x02\x02\u0375\u0372" + + "\x03\x02\x02\x02\u0375\u0373\x03\x02\x02\x02\u0376\xBB\x03\x02\x02\x02" + + "\u0377\u0379\x05\xBAY\x02\u0378\u0377\x03\x02\x02\x02\u0379\u037A\x03" + + "\x02\x02\x02\u037A\u0378\x03\x02\x02\x02\u037A\u037B\x03\x02\x02\x02\u037B" + + "\xBD\x03\x02\x02\x02\u037C\u037D\x05\xA6O\x02\u037D\u037E\x03\x02\x02" + + "\x02\u037E\u037F\b[\x12\x02\u037F\xBF\x03\x02\x02\x02\u0380\u0381\x05" + + "2\x15\x02\u0381\u0382\x03\x02\x02\x02\u0382\u0383\b\\\n\x02\u0383\xC1" + + "\x03\x02\x02\x02\u0384\u0385\x054\x16\x02\u0385\u0386\x03\x02\x02\x02" + + "\u0386\u0387\b]\n\x02\u0387\xC3\x03\x02\x02\x02\u0388\u0389\x056\x17\x02" + + "\u0389\u038A\x03\x02\x02\x02\u038A\u038B\b^\n\x02\u038B\xC5\x03\x02\x02" + + "\x02\u038C\u038D\x05B\x1D\x02\u038D\u038E\x03\x02\x02\x02\u038E\u038F" + + "\b_\r\x02\u038F\u0390\b_\x0E\x02\u0390\xC7\x03\x02\x02\x02\u0391\u0392" + + "\x05j1\x02\u0392\u0393\x03\x02\x02\x02\u0393\u0394\b`\x13\x02\u0394\xC9" + + "\x03\x02\x02\x02\u0395\u0396\x05f/\x02\u0396\u0397\x03\x02\x02\x02\u0397" + + "\u0398\ba\x10\x02\u0398\xCB\x03\x02\x02\x02\u0399\u039E\x05F\x1F\x02\u039A" + + "\u039E\x05D\x1E\x02\u039B\u039E\x05T&\x02\u039C\u039E\x05\x9AI\x02\u039D" + + "\u0399\x03\x02\x02\x02\u039D\u039A\x03\x02\x02\x02\u039D\u039B\x03\x02" + + "\x02\x02\u039D\u039C\x03\x02\x02\x02\u039E\xCD\x03\x02\x02\x02\u039F\u03A2" + + "\x05F\x1F\x02\u03A0\u03A2\x05\x9AI\x02\u03A1\u039F\x03\x02\x02\x02\u03A1" + + "\u03A0\x03\x02\x02\x02\u03A2\u03A6\x03\x02\x02\x02\u03A3\u03A5\x05\xCC" + + "b\x02\u03A4\u03A3\x03\x02\x02\x02\u03A5\u03A8\x03\x02\x02\x02\u03A6\u03A4" + + "\x03\x02\x02\x02\u03A6\u03A7\x03\x02\x02\x02\u03A7\u03B3\x03\x02\x02\x02" + + "\u03A8\u03A6\x03\x02\x02\x02\u03A9\u03AC\x05T&\x02\u03AA\u03AC\x05N#\x02" + + "\u03AB\u03A9\x03\x02\x02\x02\u03AB\u03AA\x03\x02\x02\x02\u03AC\u03AE\x03" + + "\x02\x02\x02\u03AD\u03AF\x05\xCCb\x02\u03AE\u03AD\x03\x02\x02\x02\u03AF" + + "\u03B0\x03\x02\x02\x02\u03B0\u03AE\x03\x02\x02\x02\u03B0\u03B1\x03\x02" + + "\x02\x02\u03B1\u03B3\x03\x02\x02\x02\u03B2\u03A1\x03\x02\x02\x02\u03B2" + + "\u03AB\x03\x02\x02\x02\u03B3\xCF\x03\x02\x02\x02\u03B4\u03B5\x05\xA6O" + + "\x02\u03B5\u03B6\x03\x02\x02\x02\u03B6\u03B7\bd\x12\x02\u03B7\xD1\x03" + + "\x02\x02\x02\u03B8\u03B9\x052\x15\x02\u03B9\u03BA\x03\x02\x02\x02\u03BA" + + "\u03BB\be\n\x02\u03BB\xD3\x03\x02\x02\x02\u03BC\u03BD\x054\x16\x02\u03BD" + + "\u03BE\x03\x02\x02\x02\u03BE\u03BF\bf\n\x02\u03BF\xD5\x03\x02\x02\x02" + + "\u03C0\u03C1\x056\x17\x02\u03C1\u03C2\x03\x02\x02\x02\u03C2\u03C3\bg\n" + + "\x02\u03C3\xD7\x03\x02\x02\x02\u03C4\u03C5\x05B\x1D\x02\u03C5\u03C6\x03" + + "\x02\x02\x02\u03C6\u03C7\bh\r\x02\u03C7\u03C8\bh\x0E\x02\u03C8\xD9\x03" + + "\x02\x02\x02\u03C9\u03CA\x05d.\x02\u03CA\u03CB\x03\x02\x02\x02\u03CB\u03CC" + + "\bi\x11\x02\u03CC\xDB\x03\x02\x02\x02\u03CD\u03CE\x05f/\x02\u03CE\u03CF" + + "\x03\x02\x02\x02\u03CF\u03D0\bj\x10\x02\u03D0\xDD\x03\x02\x02\x02\u03D1" + + "\u03D2\x05j1\x02\u03D2\u03D3\x03\x02\x02\x02\u03D3\u03D4\bk\x13\x02\u03D4" + + "\xDF\x03\x02\x02\x02\u03D5\u03D6\x05\u012A\x91\x02\u03D6\u03D7\x05\u014E" + + "\xA3\x02\u03D7\xE1\x03\x02\x02\x02\u03D8\u03D9\x05\xA6O\x02\u03D9\u03DA" + + "\x03\x02\x02\x02\u03DA\u03DB\bm\x12\x02\u03DB\xE3\x03\x02\x02\x02\u03DC" + + "\u03DD\x05\xCEc\x02\u03DD\u03DE\x03\x02\x02\x02\u03DE\u03DF\bn\x14\x02" + + "\u03DF\xE5\x03\x02\x02\x02\u03E0\u03E1\x052\x15\x02\u03E1\u03E2\x03\x02" + + "\x02\x02\u03E2\u03E3\bo\n\x02\u03E3\xE7\x03\x02\x02\x02\u03E4\u03E5\x05" + + "4\x16\x02\u03E5\u03E6\x03\x02\x02\x02\u03E6\u03E7\bp\n\x02\u03E7\xE9\x03" + + "\x02\x02\x02\u03E8\u03E9\x056\x17\x02\u03E9\u03EA\x03\x02\x02\x02\u03EA" + + "\u03EB\bq\n\x02\u03EB\xEB\x03\x02\x02\x02\u03EC\u03ED\x05B\x1D\x02\u03ED" + + "\u03EE\x03\x02\x02\x02\u03EE\u03EF\br\r\x02\u03EF\u03F0\br\x0E\x02\u03F0" + + "\xED\x03\x02\x02\x02\u03F1\u03F2\x05\u0146\x9F\x02\u03F2\u03F3\x05\u0144" + + "\x9E\x02\u03F3\u03F4\x03\x02\x02\x02\u03F4\u03F5\bs\x15\x02\u03F5\xEF" + + "\x03\x02\x02\x02\u03F6\u03F7\x05\u0156\xA7\x02\u03F7\u03F8\x05\u013A\x99" + + "\x02\u03F8\u03F9\x05\u0150\xA4\x02\u03F9\u03FA\x05\u0138\x98\x02\u03FA" + + "\u03FB\x03\x02\x02\x02\u03FB\u03FC\bt\x15\x02\u03FC\xF1\x03\x02\x02\x02" + + "\u03FD\u03FE\x05\xBCZ\x02\u03FE\u03FF\x03\x02\x02\x02\u03FF\u0400\bu\x16" + + "\x02\u0400\xF3\x03\x02\x02\x02\u0401\u0402\x05\xA6O\x02\u0402\u0403\x03" + + "\x02\x02\x02\u0403\u0404\bv\x12\x02\u0404\xF5\x03\x02\x02\x02\u0405\u0406" + + "\x052\x15\x02\u0406\u0407\x03\x02\x02\x02\u0407\u0408\bw\n\x02\u0408\xF7" + + "\x03\x02\x02\x02\u0409\u040A\x054\x16\x02\u040A\u040B\x03\x02\x02\x02" + + "\u040B\u040C\bx\n\x02\u040C\xF9\x03\x02\x02\x02\u040D\u040E\x056\x17\x02" + + "\u040E\u040F\x03\x02\x02\x02\u040F\u0410\by\n\x02\u0410\xFB\x03\x02\x02" + + "\x02\u0411\u0412\x05B\x1D\x02\u0412\u0413\x03\x02\x02\x02\u0413\u0414" + + "\bz\r\x02\u0414\u0415\bz\x0E\x02\u0415\u0416\bz\x0E\x02\u0416\xFD\x03" + + "\x02\x02\x02\u0417\u0418\x05d.\x02\u0418\u0419\x03\x02\x02\x02\u0419\u041A" + + "\b{\x11\x02\u041A\xFF\x03\x02\x02\x02\u041B\u041C\x05f/\x02\u041C\u041D" + + "\x03\x02\x02\x02\u041D\u041E\b|\x10\x02\u041E\u0101\x03\x02\x02\x02\u041F" + + "\u0420\x05j1\x02\u0420\u0421\x03\x02\x02\x02\u0421\u0422\b}\x13\x02\u0422" + + "\u0103\x03\x02\x02\x02\u0423\u0424\x05\xF0t\x02\u0424\u0425\x03\x02\x02" + + "\x02\u0425\u0426\b~\x17\x02\u0426\u0105\x03\x02\x02\x02\u0427\u0428\x05" + + "\xCEc\x02\u0428\u0429\x03\x02\x02\x02\u0429\u042A\b\x7F\x14\x02\u042A" + + "\u0107\x03\x02\x02\x02\u042B\u042C\x05\xA6O\x02\u042C\u042D\x03\x02\x02" + + "\x02\u042D\u042E\b\x80\x12\x02\u042E\u0109\x03\x02\x02\x02\u042F\u0430" + + "\x052\x15\x02\u0430\u0431\x03\x02\x02\x02\u0431\u0432\b\x81\n\x02\u0432" + + "\u010B\x03\x02\x02\x02\u0433\u0434\x054\x16\x02\u0434\u0435\x03\x02\x02" + + "\x02\u0435\u0436\b\x82\n\x02\u0436\u010D\x03\x02\x02\x02\u0437\u0438\x05" + + "6\x17\x02\u0438\u0439\x03\x02\x02\x02\u0439\u043A\b\x83\n\x02\u043A\u010F" + + "\x03\x02\x02\x02\u043B\u043C\x05B\x1D\x02\u043C\u043D\x03\x02\x02\x02" + + "\u043D\u043E\b\x84\r\x02\u043E\u043F\b\x84\x0E\x02\u043F\u0111\x03\x02" + + "\x02\x02\u0440\u0441\x05j1\x02\u0441\u0442\x03\x02\x02\x02\u0442\u0443" + + "\b\x85\x13\x02\u0443\u0113\x03\x02\x02\x02\u0444\u0445\x05\xA6O\x02\u0445" + + "\u0446\x03\x02\x02\x02\u0446\u0447\b\x86\x12\x02\u0447\u0115\x03\x02\x02" + + "\x02\u0448\u0449\x05\xA4N\x02\u0449\u044A\x03\x02\x02\x02\u044A\u044B" + + "\b\x87\x18\x02\u044B\u0117\x03\x02\x02\x02\u044C\u044D\x052\x15\x02\u044D" + + "\u044E\x03\x02\x02\x02\u044E\u044F\b\x88\n\x02\u044F\u0119\x03\x02\x02" + + "\x02\u0450\u0451\x054\x16\x02\u0451\u0452\x03\x02\x02\x02\u0452\u0453" + + "\b\x89\n\x02\u0453\u011B\x03\x02\x02\x02\u0454\u0455\x056\x17\x02\u0455" + + "\u0456\x03\x02\x02\x02\u0456\u0457\b\x8A\n\x02\u0457\u011D\x03\x02\x02" + + "\x02\u0458\u0459\x05B\x1D\x02\u0459\u045A\x03\x02\x02\x02\u045A\u045B" + + "\b\x8B\r\x02\u045B\u045C\b\x8B\x0E\x02\u045C\u011F\x03\x02\x02\x02\u045D" + + "\u045E\x05\u013A\x99\x02\u045E\u045F\x05\u0144\x9E\x02\u045F\u0460\x05" + + "\u0134\x96\x02\u0460\u0461\x05\u0146\x9F\x02\u0461\u0121\x03\x02\x02\x02" + + "\u0462\u0463\x05\u0134\x96\x02\u0463\u0464\x05\u0152\xA5\x02\u0464\u0465" + + "\x05\u0144\x9E\x02\u0465\u0466\x05\u012E\x93\x02\u0466\u0467\x05\u0150" + + "\xA4\x02\u0467\u0468\x05\u013A\x99\x02\u0468\u0469\x05\u0146\x9F\x02\u0469" + + "\u046A\x05\u0144\x9E\x02\u046A\u046B\x05\u014E\xA3\x02\u046B\u0123\x03" + + "\x02\x02\x02\u046C\u046D\x052\x15\x02"; + private static readonly _serializedATNSegment2: string = + "\u046D\u046E\x03\x02\x02\x02\u046E\u046F\b\x8E\n\x02\u046F\u0125\x03\x02" + + "\x02\x02\u0470\u0471\x054\x16\x02\u0471\u0472\x03\x02\x02\x02\u0472\u0473" + + "\b\x8F\n\x02\u0473\u0127\x03\x02\x02\x02\u0474\u0475\x056\x17\x02\u0475" + + "\u0476\x03\x02\x02\x02\u0476\u0477\b\x90\n\x02\u0477\u0129\x03\x02\x02" + + "\x02\u0478\u0479\t\x0E\x02\x02\u0479\u012B\x03\x02\x02\x02\u047A\u047B" + + "\t\x0F\x02\x02\u047B\u012D\x03\x02\x02\x02\u047C\u047D\t\x10\x02\x02\u047D" + + "\u012F\x03\x02\x02\x02\u047E\u047F\t\x11\x02\x02\u047F\u0131\x03\x02\x02" + + "\x02\u0480\u0481\t\t\x02\x02\u0481\u0133\x03\x02\x02\x02\u0482\u0483\t" + + "\x12\x02\x02\u0483\u0135\x03\x02\x02\x02\u0484\u0485\t\x13\x02\x02\u0485" + + "\u0137\x03\x02\x02\x02\u0486\u0487\t\x14\x02\x02\u0487\u0139\x03\x02\x02" + + "\x02\u0488\u0489\t\x15\x02\x02\u0489\u013B\x03\x02\x02\x02\u048A\u048B" + + "\t\x16\x02\x02\u048B\u013D\x03\x02\x02\x02\u048C\u048D\t\x17\x02\x02\u048D" + + "\u013F\x03\x02\x02\x02\u048E\u048F\t\x18\x02\x02\u048F\u0141\x03\x02\x02" + + "\x02\u0490\u0491\t\x19\x02\x02\u0491\u0143\x03\x02\x02\x02\u0492\u0493" + + "\t\x1A\x02\x02\u0493\u0145\x03\x02\x02\x02\u0494\u0495\t\x1B\x02\x02\u0495" + + "\u0147\x03\x02\x02\x02\u0496\u0497\t\x1C\x02\x02\u0497\u0149\x03\x02\x02" + + "\x02\u0498\u0499\t\x1D\x02\x02\u0499\u014B\x03\x02\x02\x02\u049A\u049B" + + "\t\x1E\x02\x02\u049B\u014D\x03\x02\x02\x02\u049C\u049D\t\x1F\x02\x02\u049D" + + "\u014F\x03\x02\x02\x02\u049E\u049F\t \x02\x02\u049F\u0151\x03\x02\x02" + + "\x02\u04A0\u04A1\t!\x02\x02\u04A1\u0153\x03\x02\x02\x02\u04A2\u04A3\t" + + "\"\x02\x02\u04A3\u0155\x03\x02\x02\x02\u04A4\u04A5\t#\x02\x02\u04A5\u0157" + + "\x03\x02\x02\x02\u04A6\u04A7\t$\x02\x02\u04A7\u0159\x03\x02\x02\x02\u04A8" + + "\u04A9\t%\x02\x02\u04A9\u015B\x03\x02\x02\x02\u04AA\u04AB\t&\x02\x02\u04AB" + + "\u015D\x03\x02\x02\x023\x02\x03\x04\x05\x06\x07\b\t\n\v\u01FA\u0204\u0208" + + "\u020B\u0214\u0216\u0221\u024A\u024F\u0258\u025F\u0264\u0266\u0271\u0279" + + "\u027C\u027E\u0283\u0288\u028E\u0295\u029A\u02A0\u02A3\u02AB\u02AF\u032E" + + "\u0333\u0338\u033A\u0340\u0375\u037A\u039D\u03A1\u03A6\u03AB\u03B0\u03B2" + + "\x19\x07\x04\x02\x07\x06\x02\x07\b\x02\x07\x03\x02\x07\x05\x02\x07\n\x02" + + "\x07\x07\x02\x07\v\x02\x02\x03\x02\tA\x02\x07\x02\x02\t\x1C\x02\x06\x02" + + "\x02\tB\x02\t$\x02\t#\x02\tD\x02\t&\x02\tM\x02\x07\t\x02\tI\x02\tV\x02" + + "\tC\x02"; public static readonly _serializedATN: string = Utils.join( [ esql_lexer._serializedATNSegment0, esql_lexer._serializedATNSegment1, + esql_lexer._serializedATNSegment2, ], "", ); diff --git a/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 b/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 index aa2e86b6979e1..9577d28e90254 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 +++ b/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 @@ -20,13 +20,15 @@ query ; sourceCommand - : fromCommand + : explainCommand + | fromCommand | rowCommand | showCommand ; processingCommand : evalCommand + | inlinestatsCommand | limitCommand | keepCommand | sortCommand @@ -96,13 +98,14 @@ field ; fromCommand - : FROM sourceIdentifier (COMMA sourceIdentifier)* metadata? + : FROM fromIdentifier (COMMA fromIdentifier)* metadata? ; metadata - : OPENING_BRACKET METADATA sourceIdentifier (COMMA sourceIdentifier)* CLOSING_BRACKET + : OPENING_BRACKET METADATA fromIdentifier (COMMA fromIdentifier)* CLOSING_BRACKET ; + evalCommand : EVAL fields ; @@ -111,24 +114,37 @@ statsCommand : STATS fields? (BY grouping)? ; +inlinestatsCommand + : INLINESTATS fields (BY grouping)? + ; + grouping : qualifiedName (COMMA qualifiedName)* ; -sourceIdentifier - : SRC_UNQUOTED_IDENTIFIER - | SRC_QUOTED_IDENTIFIER +fromIdentifier + : FROM_UNQUOTED_IDENTIFIER + | QUOTED_IDENTIFIER ; qualifiedName : identifier (DOT identifier)* ; +qualifiedNamePattern + : identifierPattern (DOT identifierPattern)* + ; + identifier : UNQUOTED_IDENTIFIER | QUOTED_IDENTIFIER ; +identifierPattern + : PROJECT_UNQUOTED_IDENTIFIER + | QUOTED_IDENTIFIER + ; + constant : NULL #nullLiteral | integerValue UNQUOTED_IDENTIFIER #qualifiedIntegerLiteral @@ -155,12 +171,12 @@ orderExpression ; keepCommand - : KEEP sourceIdentifier (COMMA sourceIdentifier)* - | PROJECT sourceIdentifier (COMMA sourceIdentifier)* + : KEEP qualifiedNamePattern (COMMA qualifiedNamePattern)* + | PROJECT qualifiedNamePattern (COMMA qualifiedNamePattern)* ; dropCommand - : DROP sourceIdentifier (COMMA sourceIdentifier)* + : DROP qualifiedNamePattern (COMMA qualifiedNamePattern)* ; renameCommand @@ -168,7 +184,7 @@ renameCommand ; renameClause: - oldName=sourceIdentifier AS newName=sourceIdentifier + oldName=qualifiedNamePattern AS newName=qualifiedNamePattern ; dissectCommand @@ -180,7 +196,7 @@ grokCommand ; mvExpandCommand - : MV_EXPAND sourceIdentifier + : MV_EXPAND qualifiedName ; commandOptions @@ -216,15 +232,23 @@ comparisonOperator : EQ | NEQ | LT | LTE | GT | GTE ; +explainCommand + : EXPLAIN subqueryExpression + ; + +subqueryExpression + : OPENING_BRACKET query CLOSING_BRACKET + ; + showCommand : SHOW INFO #showInfo | SHOW FUNCTIONS #showFunctions ; enrichCommand - : ENRICH policyName=sourceIdentifier (ON matchField=sourceIdentifier)? (WITH enrichWithClause (COMMA enrichWithClause)*)? + : ENRICH policyName=fromIdentifier (ON matchField=qualifiedNamePattern)? (WITH enrichWithClause (COMMA enrichWithClause)*)? ; enrichWithClause - : (newName=sourceIdentifier ASSIGN)? enrichField=sourceIdentifier + : (newName=qualifiedNamePattern ASSIGN)? enrichField=qualifiedNamePattern ; \ No newline at end of file diff --git a/packages/kbn-monaco/src/esql/antlr/esql_parser.interp b/packages/kbn-monaco/src/esql/antlr/esql_parser.interp index 649902a25536b..6c8870cecd9cd 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_parser.interp +++ b/packages/kbn-monaco/src/esql/antlr/esql_parser.interp @@ -25,11 +25,16 @@ null null null null +'|' null null null null null +null +'=' +',' +null '.' null null @@ -46,9 +51,6 @@ null null ')' null -null -null -'_' '==' '!=' '<' @@ -76,6 +78,26 @@ null null null null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null token symbolic names: null @@ -83,8 +105,10 @@ DISSECT DROP ENRICH EVAL +EXPLAIN FROM GROK +INLINESTATS KEEP LIMIT MV_EXPAND @@ -99,6 +123,9 @@ UNKNOWN_CMD LINE_COMMENT MULTILINE_COMMENT WS +EXPLAIN_WS +EXPLAIN_LINE_COMMENT +EXPLAIN_MULTILINE_COMMENT PIPE STRING INTEGER_LITERAL @@ -125,9 +152,6 @@ PARAM RLIKE RP TRUE -INFO -FUNCTIONS -UNDERSCORE EQ NEQ LT @@ -146,15 +170,35 @@ QUOTED_IDENTIFIER EXPR_LINE_COMMENT EXPR_MULTILINE_COMMENT EXPR_WS -AS METADATA +FROM_UNQUOTED_IDENTIFIER +FROM_LINE_COMMENT +FROM_MULTILINE_COMMENT +FROM_WS +PROJECT_UNQUOTED_IDENTIFIER +PROJECT_LINE_COMMENT +PROJECT_MULTILINE_COMMENT +PROJECT_WS +AS +RENAME_LINE_COMMENT +RENAME_MULTILINE_COMMENT +RENAME_WS ON WITH -SRC_UNQUOTED_IDENTIFIER -SRC_QUOTED_IDENTIFIER -SRC_LINE_COMMENT -SRC_MULTILINE_COMMENT -SRC_WS +ENRICH_LINE_COMMENT +ENRICH_MULTILINE_COMMENT +ENRICH_WS +ENRICH_FIELD_LINE_COMMENT +ENRICH_FIELD_MULTILINE_COMMENT +ENRICH_FIELD_WS +MVEXPAND_LINE_COMMENT +MVEXPAND_MULTILINE_COMMENT +MVEXPAND_WS +INFO +FUNCTIONS +SHOW_LINE_COMMENT +SHOW_MULTILINE_COMMENT +SHOW_WS rule names: singleStatement @@ -175,10 +219,13 @@ fromCommand metadata evalCommand statsCommand +inlinestatsCommand grouping -sourceIdentifier +fromIdentifier qualifiedName +qualifiedNamePattern identifier +identifierPattern constant limitCommand sortCommand @@ -198,10 +245,12 @@ decimalValue integerValue string comparisonOperator +explainCommand +subqueryExpression showCommand enrichCommand enrichWithClause atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 78, 486, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 100, 10, 3, 12, 3, 14, 3, 103, 11, 3, 3, 4, 3, 4, 3, 4, 5, 4, 108, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 122, 10, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 134, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 141, 10, 7, 12, 7, 14, 7, 144, 11, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 151, 10, 7, 3, 7, 3, 7, 5, 7, 155, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 163, 10, 7, 12, 7, 14, 7, 166, 11, 7, 3, 8, 3, 8, 5, 8, 170, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 177, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 182, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 189, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 195, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 203, 10, 10, 12, 10, 14, 10, 206, 11, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 215, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 223, 10, 12, 12, 12, 14, 12, 226, 11, 12, 5, 12, 228, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 7, 14, 238, 10, 14, 12, 14, 14, 14, 241, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 248, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 254, 10, 16, 12, 16, 14, 16, 257, 11, 16, 3, 16, 5, 16, 260, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 267, 10, 17, 12, 17, 14, 17, 270, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 5, 19, 279, 10, 19, 3, 19, 3, 19, 5, 19, 283, 10, 19, 3, 20, 3, 20, 3, 20, 7, 20, 288, 10, 20, 12, 20, 14, 20, 291, 11, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 7, 22, 298, 10, 22, 12, 22, 14, 22, 301, 11, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 318, 10, 24, 12, 24, 14, 24, 321, 11, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 329, 10, 24, 12, 24, 14, 24, 332, 11, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 340, 10, 24, 12, 24, 14, 24, 343, 11, 24, 3, 24, 3, 24, 5, 24, 347, 10, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 356, 10, 26, 12, 26, 14, 26, 359, 11, 26, 3, 27, 3, 27, 5, 27, 363, 10, 27, 3, 27, 3, 27, 5, 27, 367, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 373, 10, 28, 12, 28, 14, 28, 376, 11, 28, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 382, 10, 28, 12, 28, 14, 28, 385, 11, 28, 5, 28, 387, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 393, 10, 29, 12, 29, 14, 29, 396, 11, 29, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 402, 10, 30, 12, 30, 14, 30, 405, 11, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 415, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 7, 35, 427, 10, 35, 12, 35, 14, 35, 430, 11, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 440, 10, 38, 3, 39, 5, 39, 443, 10, 39, 3, 39, 3, 39, 3, 40, 5, 40, 448, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 460, 10, 43, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 466, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 472, 10, 44, 12, 44, 14, 44, 475, 11, 44, 5, 44, 477, 10, 44, 3, 45, 3, 45, 3, 45, 5, 45, 482, 10, 45, 3, 45, 3, 45, 3, 45, 2, 2, 5, 4, 12, 18, 46, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 2, 10, 3, 2, 58, 59, 3, 2, 60, 62, 3, 2, 74, 75, 3, 2, 65, 66, 4, 2, 29, 29, 32, 32, 3, 2, 35, 36, 4, 2, 34, 34, 48, 48, 3, 2, 52, 57, 2, 516, 2, 90, 3, 2, 2, 2, 4, 93, 3, 2, 2, 2, 6, 107, 3, 2, 2, 2, 8, 121, 3, 2, 2, 2, 10, 123, 3, 2, 2, 2, 12, 154, 3, 2, 2, 2, 14, 181, 3, 2, 2, 2, 16, 188, 3, 2, 2, 2, 18, 194, 3, 2, 2, 2, 20, 214, 3, 2, 2, 2, 22, 216, 3, 2, 2, 2, 24, 231, 3, 2, 2, 2, 26, 234, 3, 2, 2, 2, 28, 247, 3, 2, 2, 2, 30, 249, 3, 2, 2, 2, 32, 261, 3, 2, 2, 2, 34, 273, 3, 2, 2, 2, 36, 276, 3, 2, 2, 2, 38, 284, 3, 2, 2, 2, 40, 292, 3, 2, 2, 2, 42, 294, 3, 2, 2, 2, 44, 302, 3, 2, 2, 2, 46, 346, 3, 2, 2, 2, 48, 348, 3, 2, 2, 2, 50, 351, 3, 2, 2, 2, 52, 360, 3, 2, 2, 2, 54, 386, 3, 2, 2, 2, 56, 388, 3, 2, 2, 2, 58, 397, 3, 2, 2, 2, 60, 406, 3, 2, 2, 2, 62, 410, 3, 2, 2, 2, 64, 416, 3, 2, 2, 2, 66, 420, 3, 2, 2, 2, 68, 423, 3, 2, 2, 2, 70, 431, 3, 2, 2, 2, 72, 435, 3, 2, 2, 2, 74, 439, 3, 2, 2, 2, 76, 442, 3, 2, 2, 2, 78, 447, 3, 2, 2, 2, 80, 451, 3, 2, 2, 2, 82, 453, 3, 2, 2, 2, 84, 459, 3, 2, 2, 2, 86, 461, 3, 2, 2, 2, 88, 481, 3, 2, 2, 2, 90, 91, 5, 4, 3, 2, 91, 92, 7, 2, 2, 3, 92, 3, 3, 2, 2, 2, 93, 94, 8, 3, 1, 2, 94, 95, 5, 6, 4, 2, 95, 101, 3, 2, 2, 2, 96, 97, 12, 3, 2, 2, 97, 98, 7, 23, 2, 2, 98, 100, 5, 8, 5, 2, 99, 96, 3, 2, 2, 2, 100, 103, 3, 2, 2, 2, 101, 99, 3, 2, 2, 2, 101, 102, 3, 2, 2, 2, 102, 5, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 104, 108, 5, 30, 16, 2, 105, 108, 5, 24, 13, 2, 106, 108, 5, 84, 43, 2, 107, 104, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 106, 3, 2, 2, 2, 108, 7, 3, 2, 2, 2, 109, 122, 5, 34, 18, 2, 110, 122, 5, 48, 25, 2, 111, 122, 5, 54, 28, 2, 112, 122, 5, 50, 26, 2, 113, 122, 5, 36, 19, 2, 114, 122, 5, 10, 6, 2, 115, 122, 5, 56, 29, 2, 116, 122, 5, 58, 30, 2, 117, 122, 5, 62, 32, 2, 118, 122, 5, 64, 33, 2, 119, 122, 5, 86, 44, 2, 120, 122, 5, 66, 34, 2, 121, 109, 3, 2, 2, 2, 121, 110, 3, 2, 2, 2, 121, 111, 3, 2, 2, 2, 121, 112, 3, 2, 2, 2, 121, 113, 3, 2, 2, 2, 121, 114, 3, 2, 2, 2, 121, 115, 3, 2, 2, 2, 121, 116, 3, 2, 2, 2, 121, 117, 3, 2, 2, 2, 121, 118, 3, 2, 2, 2, 121, 119, 3, 2, 2, 2, 121, 120, 3, 2, 2, 2, 122, 9, 3, 2, 2, 2, 123, 124, 7, 18, 2, 2, 124, 125, 5, 12, 7, 2, 125, 11, 3, 2, 2, 2, 126, 127, 8, 7, 1, 2, 127, 128, 7, 41, 2, 2, 128, 155, 5, 12, 7, 9, 129, 155, 5, 16, 9, 2, 130, 155, 5, 14, 8, 2, 131, 133, 5, 16, 9, 2, 132, 134, 7, 41, 2, 2, 133, 132, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 136, 7, 38, 2, 2, 136, 137, 7, 37, 2, 2, 137, 142, 5, 16, 9, 2, 138, 139, 7, 31, 2, 2, 139, 141, 5, 16, 9, 2, 140, 138, 3, 2, 2, 2, 141, 144, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 145, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 145, 146, 7, 47, 2, 2, 146, 155, 3, 2, 2, 2, 147, 148, 5, 16, 9, 2, 148, 150, 7, 39, 2, 2, 149, 151, 7, 41, 2, 2, 150, 149, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 153, 7, 42, 2, 2, 153, 155, 3, 2, 2, 2, 154, 126, 3, 2, 2, 2, 154, 129, 3, 2, 2, 2, 154, 130, 3, 2, 2, 2, 154, 131, 3, 2, 2, 2, 154, 147, 3, 2, 2, 2, 155, 164, 3, 2, 2, 2, 156, 157, 12, 6, 2, 2, 157, 158, 7, 28, 2, 2, 158, 163, 5, 12, 7, 7, 159, 160, 12, 5, 2, 2, 160, 161, 7, 44, 2, 2, 161, 163, 5, 12, 7, 6, 162, 156, 3, 2, 2, 2, 162, 159, 3, 2, 2, 2, 163, 166, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 13, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 169, 5, 16, 9, 2, 168, 170, 7, 41, 2, 2, 169, 168, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 172, 7, 40, 2, 2, 172, 173, 5, 80, 41, 2, 173, 182, 3, 2, 2, 2, 174, 176, 5, 16, 9, 2, 175, 177, 7, 41, 2, 2, 176, 175, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 179, 7, 46, 2, 2, 179, 180, 5, 80, 41, 2, 180, 182, 3, 2, 2, 2, 181, 167, 3, 2, 2, 2, 181, 174, 3, 2, 2, 2, 182, 15, 3, 2, 2, 2, 183, 189, 5, 18, 10, 2, 184, 185, 5, 18, 10, 2, 185, 186, 5, 82, 42, 2, 186, 187, 5, 18, 10, 2, 187, 189, 3, 2, 2, 2, 188, 183, 3, 2, 2, 2, 188, 184, 3, 2, 2, 2, 189, 17, 3, 2, 2, 2, 190, 191, 8, 10, 1, 2, 191, 195, 5, 20, 11, 2, 192, 193, 9, 2, 2, 2, 193, 195, 5, 18, 10, 5, 194, 190, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 195, 204, 3, 2, 2, 2, 196, 197, 12, 4, 2, 2, 197, 198, 9, 3, 2, 2, 198, 203, 5, 18, 10, 5, 199, 200, 12, 3, 2, 2, 200, 201, 9, 2, 2, 2, 201, 203, 5, 18, 10, 4, 202, 196, 3, 2, 2, 2, 202, 199, 3, 2, 2, 2, 203, 206, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 19, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 207, 215, 5, 46, 24, 2, 208, 215, 5, 42, 22, 2, 209, 215, 5, 22, 12, 2, 210, 211, 7, 37, 2, 2, 211, 212, 5, 12, 7, 2, 212, 213, 7, 47, 2, 2, 213, 215, 3, 2, 2, 2, 214, 207, 3, 2, 2, 2, 214, 208, 3, 2, 2, 2, 214, 209, 3, 2, 2, 2, 214, 210, 3, 2, 2, 2, 215, 21, 3, 2, 2, 2, 216, 217, 5, 44, 23, 2, 217, 227, 7, 37, 2, 2, 218, 228, 7, 60, 2, 2, 219, 224, 5, 12, 7, 2, 220, 221, 7, 31, 2, 2, 221, 223, 5, 12, 7, 2, 222, 220, 3, 2, 2, 2, 223, 226, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 228, 3, 2, 2, 2, 226, 224, 3, 2, 2, 2, 227, 218, 3, 2, 2, 2, 227, 219, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 7, 47, 2, 2, 230, 23, 3, 2, 2, 2, 231, 232, 7, 14, 2, 2, 232, 233, 5, 26, 14, 2, 233, 25, 3, 2, 2, 2, 234, 239, 5, 28, 15, 2, 235, 236, 7, 31, 2, 2, 236, 238, 5, 28, 15, 2, 237, 235, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 27, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 248, 5, 12, 7, 2, 243, 244, 5, 42, 22, 2, 244, 245, 7, 30, 2, 2, 245, 246, 5, 12, 7, 2, 246, 248, 3, 2, 2, 2, 247, 242, 3, 2, 2, 2, 247, 243, 3, 2, 2, 2, 248, 29, 3, 2, 2, 2, 249, 250, 7, 7, 2, 2, 250, 255, 5, 40, 21, 2, 251, 252, 7, 31, 2, 2, 252, 254, 5, 40, 21, 2, 253, 251, 3, 2, 2, 2, 254, 257, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 258, 260, 5, 32, 17, 2, 259, 258, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 31, 3, 2, 2, 2, 261, 262, 7, 63, 2, 2, 262, 263, 7, 71, 2, 2, 263, 268, 5, 40, 21, 2, 264, 265, 7, 31, 2, 2, 265, 267, 5, 40, 21, 2, 266, 264, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 271, 3, 2, 2, 2, 270, 268, 3, 2, 2, 2, 271, 272, 7, 64, 2, 2, 272, 33, 3, 2, 2, 2, 273, 274, 7, 6, 2, 2, 274, 275, 5, 26, 14, 2, 275, 35, 3, 2, 2, 2, 276, 278, 7, 17, 2, 2, 277, 279, 5, 26, 14, 2, 278, 277, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 282, 3, 2, 2, 2, 280, 281, 7, 27, 2, 2, 281, 283, 5, 38, 20, 2, 282, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 37, 3, 2, 2, 2, 284, 289, 5, 42, 22, 2, 285, 286, 7, 31, 2, 2, 286, 288, 5, 42, 22, 2, 287, 285, 3, 2, 2, 2, 288, 291, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 39, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 293, 9, 4, 2, 2, 293, 41, 3, 2, 2, 2, 294, 299, 5, 44, 23, 2, 295, 296, 7, 33, 2, 2, 296, 298, 5, 44, 23, 2, 297, 295, 3, 2, 2, 2, 298, 301, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 43, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 302, 303, 9, 5, 2, 2, 303, 45, 3, 2, 2, 2, 304, 347, 7, 42, 2, 2, 305, 306, 5, 78, 40, 2, 306, 307, 7, 65, 2, 2, 307, 347, 3, 2, 2, 2, 308, 347, 5, 76, 39, 2, 309, 347, 5, 78, 40, 2, 310, 347, 5, 72, 37, 2, 311, 347, 7, 45, 2, 2, 312, 347, 5, 80, 41, 2, 313, 314, 7, 63, 2, 2, 314, 319, 5, 74, 38, 2, 315, 316, 7, 31, 2, 2, 316, 318, 5, 74, 38, 2, 317, 315, 3, 2, 2, 2, 318, 321, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 322, 3, 2, 2, 2, 321, 319, 3, 2, 2, 2, 322, 323, 7, 64, 2, 2, 323, 347, 3, 2, 2, 2, 324, 325, 7, 63, 2, 2, 325, 330, 5, 72, 37, 2, 326, 327, 7, 31, 2, 2, 327, 329, 5, 72, 37, 2, 328, 326, 3, 2, 2, 2, 329, 332, 3, 2, 2, 2, 330, 328, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 333, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 333, 334, 7, 64, 2, 2, 334, 347, 3, 2, 2, 2, 335, 336, 7, 63, 2, 2, 336, 341, 5, 80, 41, 2, 337, 338, 7, 31, 2, 2, 338, 340, 5, 80, 41, 2, 339, 337, 3, 2, 2, 2, 340, 343, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2, 342, 344, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 344, 345, 7, 64, 2, 2, 345, 347, 3, 2, 2, 2, 346, 304, 3, 2, 2, 2, 346, 305, 3, 2, 2, 2, 346, 308, 3, 2, 2, 2, 346, 309, 3, 2, 2, 2, 346, 310, 3, 2, 2, 2, 346, 311, 3, 2, 2, 2, 346, 312, 3, 2, 2, 2, 346, 313, 3, 2, 2, 2, 346, 324, 3, 2, 2, 2, 346, 335, 3, 2, 2, 2, 347, 47, 3, 2, 2, 2, 348, 349, 7, 10, 2, 2, 349, 350, 7, 25, 2, 2, 350, 49, 3, 2, 2, 2, 351, 352, 7, 16, 2, 2, 352, 357, 5, 52, 27, 2, 353, 354, 7, 31, 2, 2, 354, 356, 5, 52, 27, 2, 355, 353, 3, 2, 2, 2, 356, 359, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 51, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 360, 362, 5, 12, 7, 2, 361, 363, 9, 6, 2, 2, 362, 361, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 366, 3, 2, 2, 2, 364, 365, 7, 43, 2, 2, 365, 367, 9, 7, 2, 2, 366, 364, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 53, 3, 2, 2, 2, 368, 369, 7, 9, 2, 2, 369, 374, 5, 40, 21, 2, 370, 371, 7, 31, 2, 2, 371, 373, 5, 40, 21, 2, 372, 370, 3, 2, 2, 2, 373, 376, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 387, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 377, 378, 7, 12, 2, 2, 378, 383, 5, 40, 21, 2, 379, 380, 7, 31, 2, 2, 380, 382, 5, 40, 21, 2, 381, 379, 3, 2, 2, 2, 382, 385, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 383, 384, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 386, 368, 3, 2, 2, 2, 386, 377, 3, 2, 2, 2, 387, 55, 3, 2, 2, 2, 388, 389, 7, 4, 2, 2, 389, 394, 5, 40, 21, 2, 390, 391, 7, 31, 2, 2, 391, 393, 5, 40, 21, 2, 392, 390, 3, 2, 2, 2, 393, 396, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 57, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 397, 398, 7, 13, 2, 2, 398, 403, 5, 60, 31, 2, 399, 400, 7, 31, 2, 2, 400, 402, 5, 60, 31, 2, 401, 399, 3, 2, 2, 2, 402, 405, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 59, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 406, 407, 5, 40, 21, 2, 407, 408, 7, 70, 2, 2, 408, 409, 5, 40, 21, 2, 409, 61, 3, 2, 2, 2, 410, 411, 7, 3, 2, 2, 411, 412, 5, 20, 11, 2, 412, 414, 5, 80, 41, 2, 413, 415, 5, 68, 35, 2, 414, 413, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 63, 3, 2, 2, 2, 416, 417, 7, 8, 2, 2, 417, 418, 5, 20, 11, 2, 418, 419, 5, 80, 41, 2, 419, 65, 3, 2, 2, 2, 420, 421, 7, 11, 2, 2, 421, 422, 5, 40, 21, 2, 422, 67, 3, 2, 2, 2, 423, 428, 5, 70, 36, 2, 424, 425, 7, 31, 2, 2, 425, 427, 5, 70, 36, 2, 426, 424, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 69, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 5, 44, 23, 2, 432, 433, 7, 30, 2, 2, 433, 434, 5, 46, 24, 2, 434, 71, 3, 2, 2, 2, 435, 436, 9, 8, 2, 2, 436, 73, 3, 2, 2, 2, 437, 440, 5, 76, 39, 2, 438, 440, 5, 78, 40, 2, 439, 437, 3, 2, 2, 2, 439, 438, 3, 2, 2, 2, 440, 75, 3, 2, 2, 2, 441, 443, 9, 2, 2, 2, 442, 441, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 445, 7, 26, 2, 2, 445, 77, 3, 2, 2, 2, 446, 448, 9, 2, 2, 2, 447, 446, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 450, 7, 25, 2, 2, 450, 79, 3, 2, 2, 2, 451, 452, 7, 24, 2, 2, 452, 81, 3, 2, 2, 2, 453, 454, 9, 9, 2, 2, 454, 83, 3, 2, 2, 2, 455, 456, 7, 15, 2, 2, 456, 460, 7, 49, 2, 2, 457, 458, 7, 15, 2, 2, 458, 460, 7, 50, 2, 2, 459, 455, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 85, 3, 2, 2, 2, 461, 462, 7, 5, 2, 2, 462, 465, 5, 40, 21, 2, 463, 464, 7, 72, 2, 2, 464, 466, 5, 40, 21, 2, 465, 463, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 476, 3, 2, 2, 2, 467, 468, 7, 73, 2, 2, 468, 473, 5, 88, 45, 2, 469, 470, 7, 31, 2, 2, 470, 472, 5, 88, 45, 2, 471, 469, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 467, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 87, 3, 2, 2, 2, 478, 479, 5, 40, 21, 2, 479, 480, 7, 30, 2, 2, 480, 482, 3, 2, 2, 2, 481, 478, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 484, 5, 40, 21, 2, 484, 89, 3, 2, 2, 2, 52, 101, 107, 121, 133, 142, 150, 154, 162, 164, 169, 176, 181, 188, 194, 202, 204, 214, 224, 227, 239, 247, 255, 259, 268, 278, 282, 289, 299, 319, 330, 341, 346, 357, 362, 366, 374, 383, 386, 394, 403, 414, 428, 439, 442, 447, 459, 465, 473, 476, 481] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 100, 521, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 110, 10, 3, 12, 3, 14, 3, 113, 11, 3, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 119, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 134, 10, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 146, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 153, 10, 7, 12, 7, 14, 7, 156, 11, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 163, 10, 7, 3, 7, 3, 7, 5, 7, 167, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 175, 10, 7, 12, 7, 14, 7, 178, 11, 7, 3, 8, 3, 8, 5, 8, 182, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 189, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 194, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 201, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 207, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 215, 10, 10, 12, 10, 14, 10, 218, 11, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 227, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 235, 10, 12, 12, 12, 14, 12, 238, 11, 12, 5, 12, 240, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 7, 14, 250, 10, 14, 12, 14, 14, 14, 253, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 260, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 266, 10, 16, 12, 16, 14, 16, 269, 11, 16, 3, 16, 5, 16, 272, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 279, 10, 17, 12, 17, 14, 17, 282, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 5, 19, 291, 10, 19, 3, 19, 3, 19, 5, 19, 295, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 301, 10, 20, 3, 21, 3, 21, 3, 21, 7, 21, 306, 10, 21, 12, 21, 14, 21, 309, 11, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 7, 23, 316, 10, 23, 12, 23, 14, 23, 319, 11, 23, 3, 24, 3, 24, 3, 24, 7, 24, 324, 10, 24, 12, 24, 14, 24, 327, 11, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 346, 10, 27, 12, 27, 14, 27, 349, 11, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 357, 10, 27, 12, 27, 14, 27, 360, 11, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 368, 10, 27, 12, 27, 14, 27, 371, 11, 27, 3, 27, 3, 27, 5, 27, 375, 10, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 384, 10, 29, 12, 29, 14, 29, 387, 11, 29, 3, 30, 3, 30, 5, 30, 391, 10, 30, 3, 30, 3, 30, 5, 30, 395, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 401, 10, 31, 12, 31, 14, 31, 404, 11, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 410, 10, 31, 12, 31, 14, 31, 413, 11, 31, 5, 31, 415, 10, 31, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 421, 10, 32, 12, 32, 14, 32, 424, 11, 32, 3, 33, 3, 33, 3, 33, 3, 33, 7, 33, 430, 10, 33, 12, 33, 14, 33, 433, 11, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 443, 10, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 7, 38, 455, 10, 38, 12, 38, 14, 38, 458, 11, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 5, 41, 468, 10, 41, 3, 42, 5, 42, 471, 10, 42, 3, 42, 3, 42, 3, 43, 5, 43, 476, 10, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 495, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 501, 10, 49, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 507, 10, 49, 12, 49, 14, 49, 510, 11, 49, 5, 49, 512, 10, 49, 3, 50, 3, 50, 3, 50, 5, 50, 517, 10, 50, 3, 50, 3, 50, 3, 50, 2, 2, 5, 4, 12, 18, 51, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 2, 11, 3, 2, 60, 61, 3, 2, 62, 64, 4, 2, 68, 68, 73, 73, 3, 2, 67, 68, 4, 2, 68, 68, 77, 77, 4, 2, 34, 34, 37, 37, 3, 2, 40, 41, 4, 2, 39, 39, 53, 53, 3, 2, 54, 59, 2, 550, 2, 100, 3, 2, 2, 2, 4, 103, 3, 2, 2, 2, 6, 118, 3, 2, 2, 2, 8, 133, 3, 2, 2, 2, 10, 135, 3, 2, 2, 2, 12, 166, 3, 2, 2, 2, 14, 193, 3, 2, 2, 2, 16, 200, 3, 2, 2, 2, 18, 206, 3, 2, 2, 2, 20, 226, 3, 2, 2, 2, 22, 228, 3, 2, 2, 2, 24, 243, 3, 2, 2, 2, 26, 246, 3, 2, 2, 2, 28, 259, 3, 2, 2, 2, 30, 261, 3, 2, 2, 2, 32, 273, 3, 2, 2, 2, 34, 285, 3, 2, 2, 2, 36, 288, 3, 2, 2, 2, 38, 296, 3, 2, 2, 2, 40, 302, 3, 2, 2, 2, 42, 310, 3, 2, 2, 2, 44, 312, 3, 2, 2, 2, 46, 320, 3, 2, 2, 2, 48, 328, 3, 2, 2, 2, 50, 330, 3, 2, 2, 2, 52, 374, 3, 2, 2, 2, 54, 376, 3, 2, 2, 2, 56, 379, 3, 2, 2, 2, 58, 388, 3, 2, 2, 2, 60, 414, 3, 2, 2, 2, 62, 416, 3, 2, 2, 2, 64, 425, 3, 2, 2, 2, 66, 434, 3, 2, 2, 2, 68, 438, 3, 2, 2, 2, 70, 444, 3, 2, 2, 2, 72, 448, 3, 2, 2, 2, 74, 451, 3, 2, 2, 2, 76, 459, 3, 2, 2, 2, 78, 463, 3, 2, 2, 2, 80, 467, 3, 2, 2, 2, 82, 470, 3, 2, 2, 2, 84, 475, 3, 2, 2, 2, 86, 479, 3, 2, 2, 2, 88, 481, 3, 2, 2, 2, 90, 483, 3, 2, 2, 2, 92, 486, 3, 2, 2, 2, 94, 494, 3, 2, 2, 2, 96, 496, 3, 2, 2, 2, 98, 516, 3, 2, 2, 2, 100, 101, 5, 4, 3, 2, 101, 102, 7, 2, 2, 3, 102, 3, 3, 2, 2, 2, 103, 104, 8, 3, 1, 2, 104, 105, 5, 6, 4, 2, 105, 111, 3, 2, 2, 2, 106, 107, 12, 3, 2, 2, 107, 108, 7, 28, 2, 2, 108, 110, 5, 8, 5, 2, 109, 106, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 5, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 119, 5, 90, 46, 2, 115, 119, 5, 30, 16, 2, 116, 119, 5, 24, 13, 2, 117, 119, 5, 94, 48, 2, 118, 114, 3, 2, 2, 2, 118, 115, 3, 2, 2, 2, 118, 116, 3, 2, 2, 2, 118, 117, 3, 2, 2, 2, 119, 7, 3, 2, 2, 2, 120, 134, 5, 34, 18, 2, 121, 134, 5, 38, 20, 2, 122, 134, 5, 54, 28, 2, 123, 134, 5, 60, 31, 2, 124, 134, 5, 56, 29, 2, 125, 134, 5, 36, 19, 2, 126, 134, 5, 10, 6, 2, 127, 134, 5, 62, 32, 2, 128, 134, 5, 64, 33, 2, 129, 134, 5, 68, 35, 2, 130, 134, 5, 70, 36, 2, 131, 134, 5, 96, 49, 2, 132, 134, 5, 72, 37, 2, 133, 120, 3, 2, 2, 2, 133, 121, 3, 2, 2, 2, 133, 122, 3, 2, 2, 2, 133, 123, 3, 2, 2, 2, 133, 124, 3, 2, 2, 2, 133, 125, 3, 2, 2, 2, 133, 126, 3, 2, 2, 2, 133, 127, 3, 2, 2, 2, 133, 128, 3, 2, 2, 2, 133, 129, 3, 2, 2, 2, 133, 130, 3, 2, 2, 2, 133, 131, 3, 2, 2, 2, 133, 132, 3, 2, 2, 2, 134, 9, 3, 2, 2, 2, 135, 136, 7, 20, 2, 2, 136, 137, 5, 12, 7, 2, 137, 11, 3, 2, 2, 2, 138, 139, 8, 7, 1, 2, 139, 140, 7, 46, 2, 2, 140, 167, 5, 12, 7, 9, 141, 167, 5, 16, 9, 2, 142, 167, 5, 14, 8, 2, 143, 145, 5, 16, 9, 2, 144, 146, 7, 46, 2, 2, 145, 144, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 7, 43, 2, 2, 148, 149, 7, 42, 2, 2, 149, 154, 5, 16, 9, 2, 150, 151, 7, 36, 2, 2, 151, 153, 5, 16, 9, 2, 152, 150, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 157, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 158, 7, 52, 2, 2, 158, 167, 3, 2, 2, 2, 159, 160, 5, 16, 9, 2, 160, 162, 7, 44, 2, 2, 161, 163, 7, 46, 2, 2, 162, 161, 3, 2, 2, 2, 162, 163, 3, 2, 2, 2, 163, 164, 3, 2, 2, 2, 164, 165, 7, 47, 2, 2, 165, 167, 3, 2, 2, 2, 166, 138, 3, 2, 2, 2, 166, 141, 3, 2, 2, 2, 166, 142, 3, 2, 2, 2, 166, 143, 3, 2, 2, 2, 166, 159, 3, 2, 2, 2, 167, 176, 3, 2, 2, 2, 168, 169, 12, 6, 2, 2, 169, 170, 7, 33, 2, 2, 170, 175, 5, 12, 7, 7, 171, 172, 12, 5, 2, 2, 172, 173, 7, 49, 2, 2, 173, 175, 5, 12, 7, 6, 174, 168, 3, 2, 2, 2, 174, 171, 3, 2, 2, 2, 175, 178, 3, 2, 2, 2, 176, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 13, 3, 2, 2, 2, 178, 176, 3, 2, 2, 2, 179, 181, 5, 16, 9, 2, 180, 182, 7, 46, 2, 2, 181, 180, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 184, 7, 45, 2, 2, 184, 185, 5, 86, 44, 2, 185, 194, 3, 2, 2, 2, 186, 188, 5, 16, 9, 2, 187, 189, 7, 46, 2, 2, 188, 187, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 191, 7, 51, 2, 2, 191, 192, 5, 86, 44, 2, 192, 194, 3, 2, 2, 2, 193, 179, 3, 2, 2, 2, 193, 186, 3, 2, 2, 2, 194, 15, 3, 2, 2, 2, 195, 201, 5, 18, 10, 2, 196, 197, 5, 18, 10, 2, 197, 198, 5, 88, 45, 2, 198, 199, 5, 18, 10, 2, 199, 201, 3, 2, 2, 2, 200, 195, 3, 2, 2, 2, 200, 196, 3, 2, 2, 2, 201, 17, 3, 2, 2, 2, 202, 203, 8, 10, 1, 2, 203, 207, 5, 20, 11, 2, 204, 205, 9, 2, 2, 2, 205, 207, 5, 18, 10, 5, 206, 202, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 207, 216, 3, 2, 2, 2, 208, 209, 12, 4, 2, 2, 209, 210, 9, 3, 2, 2, 210, 215, 5, 18, 10, 5, 211, 212, 12, 3, 2, 2, 212, 213, 9, 2, 2, 2, 213, 215, 5, 18, 10, 4, 214, 208, 3, 2, 2, 2, 214, 211, 3, 2, 2, 2, 215, 218, 3, 2, 2, 2, 216, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 19, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 219, 227, 5, 52, 27, 2, 220, 227, 5, 44, 23, 2, 221, 227, 5, 22, 12, 2, 222, 223, 7, 42, 2, 2, 223, 224, 5, 12, 7, 2, 224, 225, 7, 52, 2, 2, 225, 227, 3, 2, 2, 2, 226, 219, 3, 2, 2, 2, 226, 220, 3, 2, 2, 2, 226, 221, 3, 2, 2, 2, 226, 222, 3, 2, 2, 2, 227, 21, 3, 2, 2, 2, 228, 229, 5, 48, 25, 2, 229, 239, 7, 42, 2, 2, 230, 240, 7, 62, 2, 2, 231, 236, 5, 12, 7, 2, 232, 233, 7, 36, 2, 2, 233, 235, 5, 12, 7, 2, 234, 232, 3, 2, 2, 2, 235, 238, 3, 2, 2, 2, 236, 234, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 240, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 239, 230, 3, 2, 2, 2, 239, 231, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 242, 7, 52, 2, 2, 242, 23, 3, 2, 2, 2, 243, 244, 7, 16, 2, 2, 244, 245, 5, 26, 14, 2, 245, 25, 3, 2, 2, 2, 246, 251, 5, 28, 15, 2, 247, 248, 7, 36, 2, 2, 248, 250, 5, 28, 15, 2, 249, 247, 3, 2, 2, 2, 250, 253, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 27, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 254, 260, 5, 12, 7, 2, 255, 256, 5, 44, 23, 2, 256, 257, 7, 35, 2, 2, 257, 258, 5, 12, 7, 2, 258, 260, 3, 2, 2, 2, 259, 254, 3, 2, 2, 2, 259, 255, 3, 2, 2, 2, 260, 29, 3, 2, 2, 2, 261, 262, 7, 8, 2, 2, 262, 267, 5, 42, 22, 2, 263, 264, 7, 36, 2, 2, 264, 266, 5, 42, 22, 2, 265, 263, 3, 2, 2, 2, 266, 269, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 271, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 270, 272, 5, 32, 17, 2, 271, 270, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 31, 3, 2, 2, 2, 273, 274, 7, 65, 2, 2, 274, 275, 7, 72, 2, 2, 275, 280, 5, 42, 22, 2, 276, 277, 7, 36, 2, 2, 277, 279, 5, 42, 22, 2, 278, 276, 3, 2, 2, 2, 279, 282, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 283, 3, 2, 2, 2, 282, 280, 3, 2, 2, 2, 283, 284, 7, 66, 2, 2, 284, 33, 3, 2, 2, 2, 285, 286, 7, 6, 2, 2, 286, 287, 5, 26, 14, 2, 287, 35, 3, 2, 2, 2, 288, 290, 7, 19, 2, 2, 289, 291, 5, 26, 14, 2, 290, 289, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 294, 3, 2, 2, 2, 292, 293, 7, 32, 2, 2, 293, 295, 5, 40, 21, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 37, 3, 2, 2, 2, 296, 297, 7, 10, 2, 2, 297, 300, 5, 26, 14, 2, 298, 299, 7, 32, 2, 2, 299, 301, 5, 40, 21, 2, 300, 298, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 39, 3, 2, 2, 2, 302, 307, 5, 44, 23, 2, 303, 304, 7, 36, 2, 2, 304, 306, 5, 44, 23, 2, 305, 303, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 41, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 310, 311, 9, 4, 2, 2, 311, 43, 3, 2, 2, 2, 312, 317, 5, 48, 25, 2, 313, 314, 7, 38, 2, 2, 314, 316, 5, 48, 25, 2, 315, 313, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 45, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 320, 325, 5, 50, 26, 2, 321, 322, 7, 38, 2, 2, 322, 324, 5, 50, 26, 2, 323, 321, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 47, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 328, 329, 9, 5, 2, 2, 329, 49, 3, 2, 2, 2, 330, 331, 9, 6, 2, 2, 331, 51, 3, 2, 2, 2, 332, 375, 7, 47, 2, 2, 333, 334, 5, 84, 43, 2, 334, 335, 7, 67, 2, 2, 335, 375, 3, 2, 2, 2, 336, 375, 5, 82, 42, 2, 337, 375, 5, 84, 43, 2, 338, 375, 5, 78, 40, 2, 339, 375, 7, 50, 2, 2, 340, 375, 5, 86, 44, 2, 341, 342, 7, 65, 2, 2, 342, 347, 5, 80, 41, 2, 343, 344, 7, 36, 2, 2, 344, 346, 5, 80, 41, 2, 345, 343, 3, 2, 2, 2, 346, 349, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 350, 3, 2, 2, 2, 349, 347, 3, 2, 2, 2, 350, 351, 7, 66, 2, 2, 351, 375, 3, 2, 2, 2, 352, 353, 7, 65, 2, 2, 353, 358, 5, 78, 40, 2, 354, 355, 7, 36, 2, 2, 355, 357, 5, 78, 40, 2, 356, 354, 3, 2, 2, 2, 357, 360, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 361, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 361, 362, 7, 66, 2, 2, 362, 375, 3, 2, 2, 2, 363, 364, 7, 65, 2, 2, 364, 369, 5, 86, 44, 2, 365, 366, 7, 36, 2, 2, 366, 368, 5, 86, 44, 2, 367, 365, 3, 2, 2, 2, 368, 371, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 372, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 372, 373, 7, 66, 2, 2, 373, 375, 3, 2, 2, 2, 374, 332, 3, 2, 2, 2, 374, 333, 3, 2, 2, 2, 374, 336, 3, 2, 2, 2, 374, 337, 3, 2, 2, 2, 374, 338, 3, 2, 2, 2, 374, 339, 3, 2, 2, 2, 374, 340, 3, 2, 2, 2, 374, 341, 3, 2, 2, 2, 374, 352, 3, 2, 2, 2, 374, 363, 3, 2, 2, 2, 375, 53, 3, 2, 2, 2, 376, 377, 7, 12, 2, 2, 377, 378, 7, 30, 2, 2, 378, 55, 3, 2, 2, 2, 379, 380, 7, 18, 2, 2, 380, 385, 5, 58, 30, 2, 381, 382, 7, 36, 2, 2, 382, 384, 5, 58, 30, 2, 383, 381, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 57, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 388, 390, 5, 12, 7, 2, 389, 391, 9, 7, 2, 2, 390, 389, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 394, 3, 2, 2, 2, 392, 393, 7, 48, 2, 2, 393, 395, 9, 8, 2, 2, 394, 392, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 59, 3, 2, 2, 2, 396, 397, 7, 11, 2, 2, 397, 402, 5, 46, 24, 2, 398, 399, 7, 36, 2, 2, 399, 401, 5, 46, 24, 2, 400, 398, 3, 2, 2, 2, 401, 404, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 415, 3, 2, 2, 2, 404, 402, 3, 2, 2, 2, 405, 406, 7, 14, 2, 2, 406, 411, 5, 46, 24, 2, 407, 408, 7, 36, 2, 2, 408, 410, 5, 46, 24, 2, 409, 407, 3, 2, 2, 2, 410, 413, 3, 2, 2, 2, 411, 409, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 415, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 414, 396, 3, 2, 2, 2, 414, 405, 3, 2, 2, 2, 415, 61, 3, 2, 2, 2, 416, 417, 7, 4, 2, 2, 417, 422, 5, 46, 24, 2, 418, 419, 7, 36, 2, 2, 419, 421, 5, 46, 24, 2, 420, 418, 3, 2, 2, 2, 421, 424, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 63, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 425, 426, 7, 15, 2, 2, 426, 431, 5, 66, 34, 2, 427, 428, 7, 36, 2, 2, 428, 430, 5, 66, 34, 2, 429, 427, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 65, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 435, 5, 46, 24, 2, 435, 436, 7, 81, 2, 2, 436, 437, 5, 46, 24, 2, 437, 67, 3, 2, 2, 2, 438, 439, 7, 3, 2, 2, 439, 440, 5, 20, 11, 2, 440, 442, 5, 86, 44, 2, 441, 443, 5, 74, 38, 2, 442, 441, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 69, 3, 2, 2, 2, 444, 445, 7, 9, 2, 2, 445, 446, 5, 20, 11, 2, 446, 447, 5, 86, 44, 2, 447, 71, 3, 2, 2, 2, 448, 449, 7, 13, 2, 2, 449, 450, 5, 44, 23, 2, 450, 73, 3, 2, 2, 2, 451, 456, 5, 76, 39, 2, 452, 453, 7, 36, 2, 2, 453, 455, 5, 76, 39, 2, 454, 452, 3, 2, 2, 2, 455, 458, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 75, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 459, 460, 5, 48, 25, 2, 460, 461, 7, 35, 2, 2, 461, 462, 5, 52, 27, 2, 462, 77, 3, 2, 2, 2, 463, 464, 9, 9, 2, 2, 464, 79, 3, 2, 2, 2, 465, 468, 5, 82, 42, 2, 466, 468, 5, 84, 43, 2, 467, 465, 3, 2, 2, 2, 467, 466, 3, 2, 2, 2, 468, 81, 3, 2, 2, 2, 469, 471, 9, 2, 2, 2, 470, 469, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 473, 7, 31, 2, 2, 473, 83, 3, 2, 2, 2, 474, 476, 9, 2, 2, 2, 475, 474, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 478, 7, 30, 2, 2, 478, 85, 3, 2, 2, 2, 479, 480, 7, 29, 2, 2, 480, 87, 3, 2, 2, 2, 481, 482, 9, 10, 2, 2, 482, 89, 3, 2, 2, 2, 483, 484, 7, 7, 2, 2, 484, 485, 5, 92, 47, 2, 485, 91, 3, 2, 2, 2, 486, 487, 7, 65, 2, 2, 487, 488, 5, 4, 3, 2, 488, 489, 7, 66, 2, 2, 489, 93, 3, 2, 2, 2, 490, 491, 7, 17, 2, 2, 491, 495, 7, 96, 2, 2, 492, 493, 7, 17, 2, 2, 493, 495, 7, 97, 2, 2, 494, 490, 3, 2, 2, 2, 494, 492, 3, 2, 2, 2, 495, 95, 3, 2, 2, 2, 496, 497, 7, 5, 2, 2, 497, 500, 5, 42, 22, 2, 498, 499, 7, 85, 2, 2, 499, 501, 5, 46, 24, 2, 500, 498, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 511, 3, 2, 2, 2, 502, 503, 7, 86, 2, 2, 503, 508, 5, 98, 50, 2, 504, 505, 7, 36, 2, 2, 505, 507, 5, 98, 50, 2, 506, 504, 3, 2, 2, 2, 507, 510, 3, 2, 2, 2, 508, 506, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 512, 3, 2, 2, 2, 510, 508, 3, 2, 2, 2, 511, 502, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 97, 3, 2, 2, 2, 513, 514, 5, 46, 24, 2, 514, 515, 7, 35, 2, 2, 515, 517, 3, 2, 2, 2, 516, 513, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 519, 5, 46, 24, 2, 519, 99, 3, 2, 2, 2, 54, 111, 118, 133, 145, 154, 162, 166, 174, 176, 181, 188, 193, 200, 206, 214, 216, 226, 236, 239, 251, 259, 267, 271, 280, 290, 294, 300, 307, 317, 325, 347, 358, 369, 374, 385, 390, 394, 402, 411, 414, 422, 431, 442, 456, 467, 470, 475, 494, 500, 508, 511, 516] \ No newline at end of file diff --git a/packages/kbn-monaco/src/esql/antlr/esql_parser.tokens b/packages/kbn-monaco/src/esql/antlr/esql_parser.tokens index c3160ce1f6472..85a98c3a6d268 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_parser.tokens +++ b/packages/kbn-monaco/src/esql/antlr/esql_parser.tokens @@ -2,92 +2,116 @@ DISSECT=1 DROP=2 ENRICH=3 EVAL=4 -FROM=5 -GROK=6 -KEEP=7 -LIMIT=8 -MV_EXPAND=9 -PROJECT=10 -RENAME=11 -ROW=12 -SHOW=13 -SORT=14 -STATS=15 -WHERE=16 -UNKNOWN_CMD=17 -LINE_COMMENT=18 -MULTILINE_COMMENT=19 -WS=20 -PIPE=21 -STRING=22 -INTEGER_LITERAL=23 -DECIMAL_LITERAL=24 -BY=25 -AND=26 -ASC=27 -ASSIGN=28 -COMMA=29 -DESC=30 -DOT=31 -FALSE=32 -FIRST=33 -LAST=34 -LP=35 -IN=36 -IS=37 -LIKE=38 -NOT=39 -NULL=40 -NULLS=41 -OR=42 -PARAM=43 -RLIKE=44 -RP=45 -TRUE=46 -INFO=47 -FUNCTIONS=48 -UNDERSCORE=49 -EQ=50 -NEQ=51 -LT=52 -LTE=53 -GT=54 -GTE=55 -PLUS=56 -MINUS=57 -ASTERISK=58 -SLASH=59 -PERCENT=60 -OPENING_BRACKET=61 -CLOSING_BRACKET=62 -UNQUOTED_IDENTIFIER=63 -QUOTED_IDENTIFIER=64 -EXPR_LINE_COMMENT=65 -EXPR_MULTILINE_COMMENT=66 -EXPR_WS=67 -AS=68 -METADATA=69 -ON=70 -WITH=71 -SRC_UNQUOTED_IDENTIFIER=72 -SRC_QUOTED_IDENTIFIER=73 -SRC_LINE_COMMENT=74 -SRC_MULTILINE_COMMENT=75 -SRC_WS=76 -'.'=31 -'('=35 -'?'=43 -')'=45 -'_'=49 -'=='=50 -'!='=51 -'<'=52 -'<='=53 -'>'=54 -'>='=55 -'+'=56 -'-'=57 -'*'=58 -'/'=59 -'%'=60 -']'=62 +EXPLAIN=5 +FROM=6 +GROK=7 +INLINESTATS=8 +KEEP=9 +LIMIT=10 +MV_EXPAND=11 +PROJECT=12 +RENAME=13 +ROW=14 +SHOW=15 +SORT=16 +STATS=17 +WHERE=18 +UNKNOWN_CMD=19 +LINE_COMMENT=20 +MULTILINE_COMMENT=21 +WS=22 +EXPLAIN_WS=23 +EXPLAIN_LINE_COMMENT=24 +EXPLAIN_MULTILINE_COMMENT=25 +PIPE=26 +STRING=27 +INTEGER_LITERAL=28 +DECIMAL_LITERAL=29 +BY=30 +AND=31 +ASC=32 +ASSIGN=33 +COMMA=34 +DESC=35 +DOT=36 +FALSE=37 +FIRST=38 +LAST=39 +LP=40 +IN=41 +IS=42 +LIKE=43 +NOT=44 +NULL=45 +NULLS=46 +OR=47 +PARAM=48 +RLIKE=49 +RP=50 +TRUE=51 +EQ=52 +NEQ=53 +LT=54 +LTE=55 +GT=56 +GTE=57 +PLUS=58 +MINUS=59 +ASTERISK=60 +SLASH=61 +PERCENT=62 +OPENING_BRACKET=63 +CLOSING_BRACKET=64 +UNQUOTED_IDENTIFIER=65 +QUOTED_IDENTIFIER=66 +EXPR_LINE_COMMENT=67 +EXPR_MULTILINE_COMMENT=68 +EXPR_WS=69 +METADATA=70 +FROM_UNQUOTED_IDENTIFIER=71 +FROM_LINE_COMMENT=72 +FROM_MULTILINE_COMMENT=73 +FROM_WS=74 +PROJECT_UNQUOTED_IDENTIFIER=75 +PROJECT_LINE_COMMENT=76 +PROJECT_MULTILINE_COMMENT=77 +PROJECT_WS=78 +AS=79 +RENAME_LINE_COMMENT=80 +RENAME_MULTILINE_COMMENT=81 +RENAME_WS=82 +ON=83 +WITH=84 +ENRICH_LINE_COMMENT=85 +ENRICH_MULTILINE_COMMENT=86 +ENRICH_WS=87 +ENRICH_FIELD_LINE_COMMENT=88 +ENRICH_FIELD_MULTILINE_COMMENT=89 +ENRICH_FIELD_WS=90 +MVEXPAND_LINE_COMMENT=91 +MVEXPAND_MULTILINE_COMMENT=92 +MVEXPAND_WS=93 +INFO=94 +FUNCTIONS=95 +SHOW_LINE_COMMENT=96 +SHOW_MULTILINE_COMMENT=97 +SHOW_WS=98 +'|'=26 +'='=33 +','=34 +'.'=36 +'('=40 +'?'=48 +')'=50 +'=='=52 +'!='=53 +'<'=54 +'<='=55 +'>'=56 +'>='=57 +'+'=58 +'-'=59 +'*'=60 +'/'=61 +'%'=62 +']'=64 diff --git a/packages/kbn-monaco/src/esql/antlr/esql_parser.ts b/packages/kbn-monaco/src/esql/antlr/esql_parser.ts index 8e0a4ca8199b8..90d3da25c8d1c 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_parser.ts +++ b/packages/kbn-monaco/src/esql/antlr/esql_parser.ts @@ -31,78 +31,100 @@ export class esql_parser extends Parser { public static readonly DROP = 2; public static readonly ENRICH = 3; public static readonly EVAL = 4; - public static readonly FROM = 5; - public static readonly GROK = 6; - public static readonly KEEP = 7; - public static readonly LIMIT = 8; - public static readonly MV_EXPAND = 9; - public static readonly PROJECT = 10; - public static readonly RENAME = 11; - public static readonly ROW = 12; - public static readonly SHOW = 13; - public static readonly SORT = 14; - public static readonly STATS = 15; - public static readonly WHERE = 16; - public static readonly UNKNOWN_CMD = 17; - public static readonly LINE_COMMENT = 18; - public static readonly MULTILINE_COMMENT = 19; - public static readonly WS = 20; - public static readonly PIPE = 21; - public static readonly STRING = 22; - public static readonly INTEGER_LITERAL = 23; - public static readonly DECIMAL_LITERAL = 24; - public static readonly BY = 25; - public static readonly AND = 26; - public static readonly ASC = 27; - public static readonly ASSIGN = 28; - public static readonly COMMA = 29; - public static readonly DESC = 30; - public static readonly DOT = 31; - public static readonly FALSE = 32; - public static readonly FIRST = 33; - public static readonly LAST = 34; - public static readonly LP = 35; - public static readonly IN = 36; - public static readonly IS = 37; - public static readonly LIKE = 38; - public static readonly NOT = 39; - public static readonly NULL = 40; - public static readonly NULLS = 41; - public static readonly OR = 42; - public static readonly PARAM = 43; - public static readonly RLIKE = 44; - public static readonly RP = 45; - public static readonly TRUE = 46; - public static readonly INFO = 47; - public static readonly FUNCTIONS = 48; - public static readonly UNDERSCORE = 49; - public static readonly EQ = 50; - public static readonly NEQ = 51; - public static readonly LT = 52; - public static readonly LTE = 53; - public static readonly GT = 54; - public static readonly GTE = 55; - public static readonly PLUS = 56; - public static readonly MINUS = 57; - public static readonly ASTERISK = 58; - public static readonly SLASH = 59; - public static readonly PERCENT = 60; - public static readonly OPENING_BRACKET = 61; - public static readonly CLOSING_BRACKET = 62; - public static readonly UNQUOTED_IDENTIFIER = 63; - public static readonly QUOTED_IDENTIFIER = 64; - public static readonly EXPR_LINE_COMMENT = 65; - public static readonly EXPR_MULTILINE_COMMENT = 66; - public static readonly EXPR_WS = 67; - public static readonly AS = 68; - public static readonly METADATA = 69; - public static readonly ON = 70; - public static readonly WITH = 71; - public static readonly SRC_UNQUOTED_IDENTIFIER = 72; - public static readonly SRC_QUOTED_IDENTIFIER = 73; - public static readonly SRC_LINE_COMMENT = 74; - public static readonly SRC_MULTILINE_COMMENT = 75; - public static readonly SRC_WS = 76; + public static readonly EXPLAIN = 5; + public static readonly FROM = 6; + public static readonly GROK = 7; + public static readonly INLINESTATS = 8; + public static readonly KEEP = 9; + public static readonly LIMIT = 10; + public static readonly MV_EXPAND = 11; + public static readonly PROJECT = 12; + public static readonly RENAME = 13; + public static readonly ROW = 14; + public static readonly SHOW = 15; + public static readonly SORT = 16; + public static readonly STATS = 17; + public static readonly WHERE = 18; + public static readonly UNKNOWN_CMD = 19; + public static readonly LINE_COMMENT = 20; + public static readonly MULTILINE_COMMENT = 21; + public static readonly WS = 22; + public static readonly EXPLAIN_WS = 23; + public static readonly EXPLAIN_LINE_COMMENT = 24; + public static readonly EXPLAIN_MULTILINE_COMMENT = 25; + public static readonly PIPE = 26; + public static readonly STRING = 27; + public static readonly INTEGER_LITERAL = 28; + public static readonly DECIMAL_LITERAL = 29; + public static readonly BY = 30; + public static readonly AND = 31; + public static readonly ASC = 32; + public static readonly ASSIGN = 33; + public static readonly COMMA = 34; + public static readonly DESC = 35; + public static readonly DOT = 36; + public static readonly FALSE = 37; + public static readonly FIRST = 38; + public static readonly LAST = 39; + public static readonly LP = 40; + public static readonly IN = 41; + public static readonly IS = 42; + public static readonly LIKE = 43; + public static readonly NOT = 44; + public static readonly NULL = 45; + public static readonly NULLS = 46; + public static readonly OR = 47; + public static readonly PARAM = 48; + public static readonly RLIKE = 49; + public static readonly RP = 50; + public static readonly TRUE = 51; + public static readonly EQ = 52; + public static readonly NEQ = 53; + public static readonly LT = 54; + public static readonly LTE = 55; + public static readonly GT = 56; + public static readonly GTE = 57; + public static readonly PLUS = 58; + public static readonly MINUS = 59; + public static readonly ASTERISK = 60; + public static readonly SLASH = 61; + public static readonly PERCENT = 62; + public static readonly OPENING_BRACKET = 63; + public static readonly CLOSING_BRACKET = 64; + public static readonly UNQUOTED_IDENTIFIER = 65; + public static readonly QUOTED_IDENTIFIER = 66; + public static readonly EXPR_LINE_COMMENT = 67; + public static readonly EXPR_MULTILINE_COMMENT = 68; + public static readonly EXPR_WS = 69; + public static readonly METADATA = 70; + public static readonly FROM_UNQUOTED_IDENTIFIER = 71; + public static readonly FROM_LINE_COMMENT = 72; + public static readonly FROM_MULTILINE_COMMENT = 73; + public static readonly FROM_WS = 74; + public static readonly PROJECT_UNQUOTED_IDENTIFIER = 75; + public static readonly PROJECT_LINE_COMMENT = 76; + public static readonly PROJECT_MULTILINE_COMMENT = 77; + public static readonly PROJECT_WS = 78; + public static readonly AS = 79; + public static readonly RENAME_LINE_COMMENT = 80; + public static readonly RENAME_MULTILINE_COMMENT = 81; + public static readonly RENAME_WS = 82; + public static readonly ON = 83; + public static readonly WITH = 84; + public static readonly ENRICH_LINE_COMMENT = 85; + public static readonly ENRICH_MULTILINE_COMMENT = 86; + public static readonly ENRICH_WS = 87; + public static readonly ENRICH_FIELD_LINE_COMMENT = 88; + public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 89; + public static readonly ENRICH_FIELD_WS = 90; + public static readonly MVEXPAND_LINE_COMMENT = 91; + public static readonly MVEXPAND_MULTILINE_COMMENT = 92; + public static readonly MVEXPAND_WS = 93; + public static readonly INFO = 94; + public static readonly FUNCTIONS = 95; + public static readonly SHOW_LINE_COMMENT = 96; + public static readonly SHOW_MULTILINE_COMMENT = 97; + public static readonly SHOW_WS = 98; public static readonly RULE_singleStatement = 0; public static readonly RULE_query = 1; public static readonly RULE_sourceCommand = 2; @@ -121,69 +143,82 @@ export class esql_parser extends Parser { public static readonly RULE_metadata = 15; public static readonly RULE_evalCommand = 16; public static readonly RULE_statsCommand = 17; - public static readonly RULE_grouping = 18; - public static readonly RULE_sourceIdentifier = 19; - public static readonly RULE_qualifiedName = 20; - public static readonly RULE_identifier = 21; - public static readonly RULE_constant = 22; - public static readonly RULE_limitCommand = 23; - public static readonly RULE_sortCommand = 24; - public static readonly RULE_orderExpression = 25; - public static readonly RULE_keepCommand = 26; - public static readonly RULE_dropCommand = 27; - public static readonly RULE_renameCommand = 28; - public static readonly RULE_renameClause = 29; - public static readonly RULE_dissectCommand = 30; - public static readonly RULE_grokCommand = 31; - public static readonly RULE_mvExpandCommand = 32; - public static readonly RULE_commandOptions = 33; - public static readonly RULE_commandOption = 34; - public static readonly RULE_booleanValue = 35; - public static readonly RULE_numericValue = 36; - public static readonly RULE_decimalValue = 37; - public static readonly RULE_integerValue = 38; - public static readonly RULE_string = 39; - public static readonly RULE_comparisonOperator = 40; - public static readonly RULE_showCommand = 41; - public static readonly RULE_enrichCommand = 42; - public static readonly RULE_enrichWithClause = 43; + public static readonly RULE_inlinestatsCommand = 18; + public static readonly RULE_grouping = 19; + public static readonly RULE_fromIdentifier = 20; + public static readonly RULE_qualifiedName = 21; + public static readonly RULE_qualifiedNamePattern = 22; + public static readonly RULE_identifier = 23; + public static readonly RULE_identifierPattern = 24; + public static readonly RULE_constant = 25; + public static readonly RULE_limitCommand = 26; + public static readonly RULE_sortCommand = 27; + public static readonly RULE_orderExpression = 28; + public static readonly RULE_keepCommand = 29; + public static readonly RULE_dropCommand = 30; + public static readonly RULE_renameCommand = 31; + public static readonly RULE_renameClause = 32; + public static readonly RULE_dissectCommand = 33; + public static readonly RULE_grokCommand = 34; + public static readonly RULE_mvExpandCommand = 35; + public static readonly RULE_commandOptions = 36; + public static readonly RULE_commandOption = 37; + public static readonly RULE_booleanValue = 38; + public static readonly RULE_numericValue = 39; + public static readonly RULE_decimalValue = 40; + public static readonly RULE_integerValue = 41; + public static readonly RULE_string = 42; + public static readonly RULE_comparisonOperator = 43; + public static readonly RULE_explainCommand = 44; + public static readonly RULE_subqueryExpression = 45; + public static readonly RULE_showCommand = 46; + public static readonly RULE_enrichCommand = 47; + public static readonly RULE_enrichWithClause = 48; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "singleStatement", "query", "sourceCommand", "processingCommand", "whereCommand", "booleanExpression", "regexBooleanExpression", "valueExpression", "operatorExpression", "primaryExpression", "functionExpression", "rowCommand", "fields", "field", - "fromCommand", "metadata", "evalCommand", "statsCommand", "grouping", - "sourceIdentifier", "qualifiedName", "identifier", "constant", "limitCommand", - "sortCommand", "orderExpression", "keepCommand", "dropCommand", "renameCommand", - "renameClause", "dissectCommand", "grokCommand", "mvExpandCommand", "commandOptions", + "fromCommand", "metadata", "evalCommand", "statsCommand", "inlinestatsCommand", + "grouping", "fromIdentifier", "qualifiedName", "qualifiedNamePattern", + "identifier", "identifierPattern", "constant", "limitCommand", "sortCommand", + "orderExpression", "keepCommand", "dropCommand", "renameCommand", "renameClause", + "dissectCommand", "grokCommand", "mvExpandCommand", "commandOptions", "commandOption", "booleanValue", "numericValue", "decimalValue", "integerValue", - "string", "comparisonOperator", "showCommand", "enrichCommand", "enrichWithClause", + "string", "comparisonOperator", "explainCommand", "subqueryExpression", + "showCommand", "enrichCommand", "enrichWithClause", ]; private static readonly _LITERAL_NAMES: Array = [ undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, "'.'", undefined, undefined, undefined, - "'('", undefined, undefined, undefined, undefined, undefined, undefined, - undefined, "'?'", undefined, "')'", undefined, undefined, undefined, "'_'", + undefined, undefined, undefined, undefined, undefined, "'|'", undefined, + undefined, undefined, undefined, undefined, undefined, "'='", "','", undefined, + "'.'", undefined, undefined, undefined, "'('", undefined, undefined, undefined, + undefined, undefined, undefined, undefined, "'?'", undefined, "')'", undefined, "'=='", "'!='", "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", undefined, "']'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, "DISSECT", "DROP", "ENRICH", "EVAL", "FROM", "GROK", "KEEP", - "LIMIT", "MV_EXPAND", "PROJECT", "RENAME", "ROW", "SHOW", "SORT", "STATS", - "WHERE", "UNKNOWN_CMD", "LINE_COMMENT", "MULTILINE_COMMENT", "WS", "PIPE", - "STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", "BY", "AND", "ASC", "ASSIGN", - "COMMA", "DESC", "DOT", "FALSE", "FIRST", "LAST", "LP", "IN", "IS", "LIKE", - "NOT", "NULL", "NULLS", "OR", "PARAM", "RLIKE", "RP", "TRUE", "INFO", - "FUNCTIONS", "UNDERSCORE", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", - "MINUS", "ASTERISK", "SLASH", "PERCENT", "OPENING_BRACKET", "CLOSING_BRACKET", - "UNQUOTED_IDENTIFIER", "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", - "EXPR_WS", "AS", "METADATA", "ON", "WITH", "SRC_UNQUOTED_IDENTIFIER", - "SRC_QUOTED_IDENTIFIER", "SRC_LINE_COMMENT", "SRC_MULTILINE_COMMENT", - "SRC_WS", + undefined, "DISSECT", "DROP", "ENRICH", "EVAL", "EXPLAIN", "FROM", "GROK", + "INLINESTATS", "KEEP", "LIMIT", "MV_EXPAND", "PROJECT", "RENAME", "ROW", + "SHOW", "SORT", "STATS", "WHERE", "UNKNOWN_CMD", "LINE_COMMENT", "MULTILINE_COMMENT", + "WS", "EXPLAIN_WS", "EXPLAIN_LINE_COMMENT", "EXPLAIN_MULTILINE_COMMENT", + "PIPE", "STRING", "INTEGER_LITERAL", "DECIMAL_LITERAL", "BY", "AND", "ASC", + "ASSIGN", "COMMA", "DESC", "DOT", "FALSE", "FIRST", "LAST", "LP", "IN", + "IS", "LIKE", "NOT", "NULL", "NULLS", "OR", "PARAM", "RLIKE", "RP", "TRUE", + "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", + "PERCENT", "OPENING_BRACKET", "CLOSING_BRACKET", "UNQUOTED_IDENTIFIER", + "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", "EXPR_WS", + "METADATA", "FROM_UNQUOTED_IDENTIFIER", "FROM_LINE_COMMENT", "FROM_MULTILINE_COMMENT", + "FROM_WS", "PROJECT_UNQUOTED_IDENTIFIER", "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", + "PROJECT_WS", "AS", "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", + "RENAME_WS", "ON", "WITH", "ENRICH_LINE_COMMENT", "ENRICH_MULTILINE_COMMENT", + "ENRICH_WS", "ENRICH_FIELD_LINE_COMMENT", "ENRICH_FIELD_MULTILINE_COMMENT", + "ENRICH_FIELD_WS", "MVEXPAND_LINE_COMMENT", "MVEXPAND_MULTILINE_COMMENT", + "MVEXPAND_WS", "INFO", "FUNCTIONS", "SHOW_LINE_COMMENT", "SHOW_MULTILINE_COMMENT", + "SHOW_WS", ]; public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(esql_parser._LITERAL_NAMES, esql_parser._SYMBOLIC_NAMES, []); @@ -214,9 +249,9 @@ export class esql_parser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 88; + this.state = 98; this.query(0); - this.state = 89; + this.state = 99; this.match(esql_parser.EOF); } } @@ -258,11 +293,11 @@ export class esql_parser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 92; + this.state = 102; this.sourceCommand(); } this._ctx._stop = this._input.tryLT(-1); - this.state = 99; + this.state = 109; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 0, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -275,18 +310,18 @@ export class esql_parser extends Parser { { _localctx = new CompositeQueryContext(new QueryContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, esql_parser.RULE_query); - this.state = 94; + this.state = 104; if (!(this.precpred(this._ctx, 1))) { throw new FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 95; + this.state = 105; this.match(esql_parser.PIPE); - this.state = 96; + this.state = 106; this.processingCommand(); } } } - this.state = 101; + this.state = 111; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 0, this._ctx); } @@ -311,27 +346,34 @@ export class esql_parser extends Parser { let _localctx: SourceCommandContext = new SourceCommandContext(this._ctx, this.state); this.enterRule(_localctx, 4, esql_parser.RULE_sourceCommand); try { - this.state = 105; + this.state = 116; this._errHandler.sync(this); switch (this._input.LA(1)) { - case esql_parser.FROM: + case esql_parser.EXPLAIN: this.enterOuterAlt(_localctx, 1); { - this.state = 102; + this.state = 112; + this.explainCommand(); + } + break; + case esql_parser.FROM: + this.enterOuterAlt(_localctx, 2); + { + this.state = 113; this.fromCommand(); } break; case esql_parser.ROW: - this.enterOuterAlt(_localctx, 2); + this.enterOuterAlt(_localctx, 3); { - this.state = 103; + this.state = 114; this.rowCommand(); } break; case esql_parser.SHOW: - this.enterOuterAlt(_localctx, 3); + this.enterOuterAlt(_localctx, 4); { - this.state = 104; + this.state = 115; this.showCommand(); } break; @@ -358,91 +400,98 @@ export class esql_parser extends Parser { let _localctx: ProcessingCommandContext = new ProcessingCommandContext(this._ctx, this.state); this.enterRule(_localctx, 6, esql_parser.RULE_processingCommand); try { - this.state = 119; + this.state = 131; this._errHandler.sync(this); switch (this._input.LA(1)) { case esql_parser.EVAL: this.enterOuterAlt(_localctx, 1); { - this.state = 107; + this.state = 118; this.evalCommand(); } break; - case esql_parser.LIMIT: + case esql_parser.INLINESTATS: this.enterOuterAlt(_localctx, 2); { - this.state = 108; + this.state = 119; + this.inlinestatsCommand(); + } + break; + case esql_parser.LIMIT: + this.enterOuterAlt(_localctx, 3); + { + this.state = 120; this.limitCommand(); } break; case esql_parser.KEEP: case esql_parser.PROJECT: - this.enterOuterAlt(_localctx, 3); + this.enterOuterAlt(_localctx, 4); { - this.state = 109; + this.state = 121; this.keepCommand(); } break; case esql_parser.SORT: - this.enterOuterAlt(_localctx, 4); + this.enterOuterAlt(_localctx, 5); { - this.state = 110; + this.state = 122; this.sortCommand(); } break; case esql_parser.STATS: - this.enterOuterAlt(_localctx, 5); + this.enterOuterAlt(_localctx, 6); { - this.state = 111; + this.state = 123; this.statsCommand(); } break; case esql_parser.WHERE: - this.enterOuterAlt(_localctx, 6); + this.enterOuterAlt(_localctx, 7); { - this.state = 112; + this.state = 124; this.whereCommand(); } break; case esql_parser.DROP: - this.enterOuterAlt(_localctx, 7); + this.enterOuterAlt(_localctx, 8); { - this.state = 113; + this.state = 125; this.dropCommand(); } break; case esql_parser.RENAME: - this.enterOuterAlt(_localctx, 8); + this.enterOuterAlt(_localctx, 9); { - this.state = 114; + this.state = 126; this.renameCommand(); } break; case esql_parser.DISSECT: - this.enterOuterAlt(_localctx, 9); + this.enterOuterAlt(_localctx, 10); { - this.state = 115; + this.state = 127; this.dissectCommand(); } break; case esql_parser.GROK: - this.enterOuterAlt(_localctx, 10); + this.enterOuterAlt(_localctx, 11); { - this.state = 116; + this.state = 128; this.grokCommand(); } break; case esql_parser.ENRICH: - this.enterOuterAlt(_localctx, 11); + this.enterOuterAlt(_localctx, 12); { - this.state = 117; + this.state = 129; this.enrichCommand(); } break; case esql_parser.MV_EXPAND: - this.enterOuterAlt(_localctx, 12); + this.enterOuterAlt(_localctx, 13); { - this.state = 118; + this.state = 130; this.mvExpandCommand(); } break; @@ -471,9 +520,9 @@ export class esql_parser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 121; + this.state = 133; this.match(esql_parser.WHERE); - this.state = 122; + this.state = 134; this.booleanExpression(0); } } @@ -511,7 +560,7 @@ export class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 152; + this.state = 164; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 6, this._ctx) ) { case 1: @@ -520,9 +569,9 @@ export class esql_parser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 125; + this.state = 137; this.match(esql_parser.NOT); - this.state = 126; + this.state = 138; this.booleanExpression(7); } break; @@ -532,7 +581,7 @@ export class esql_parser extends Parser { _localctx = new BooleanDefaultContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 127; + this.state = 139; this.valueExpression(); } break; @@ -542,7 +591,7 @@ export class esql_parser extends Parser { _localctx = new RegexExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 128; + this.state = 140; this.regexBooleanExpression(); } break; @@ -552,41 +601,41 @@ export class esql_parser extends Parser { _localctx = new LogicalInContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 129; + this.state = 141; this.valueExpression(); - this.state = 131; + this.state = 143; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === esql_parser.NOT) { { - this.state = 130; + this.state = 142; this.match(esql_parser.NOT); } } - this.state = 133; + this.state = 145; this.match(esql_parser.IN); - this.state = 134; + this.state = 146; this.match(esql_parser.LP); - this.state = 135; + this.state = 147; this.valueExpression(); - this.state = 140; + this.state = 152; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === esql_parser.COMMA) { { { - this.state = 136; + this.state = 148; this.match(esql_parser.COMMA); - this.state = 137; + this.state = 149; this.valueExpression(); } } - this.state = 142; + this.state = 154; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 143; + this.state = 155; this.match(esql_parser.RP); } break; @@ -596,27 +645,27 @@ export class esql_parser extends Parser { _localctx = new IsNullContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 145; + this.state = 157; this.valueExpression(); - this.state = 146; + this.state = 158; this.match(esql_parser.IS); - this.state = 148; + this.state = 160; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === esql_parser.NOT) { { - this.state = 147; + this.state = 159; this.match(esql_parser.NOT); } } - this.state = 150; + this.state = 162; this.match(esql_parser.NULL); } break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 162; + this.state = 174; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 8, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -626,7 +675,7 @@ export class esql_parser extends Parser { } _prevctx = _localctx; { - this.state = 160; + this.state = 172; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { case 1: @@ -634,13 +683,13 @@ export class esql_parser extends Parser { _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); (_localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, esql_parser.RULE_booleanExpression); - this.state = 154; + this.state = 166; if (!(this.precpred(this._ctx, 4))) { throw new FailedPredicateException(this, "this.precpred(this._ctx, 4)"); } - this.state = 155; + this.state = 167; (_localctx as LogicalBinaryContext)._operator = this.match(esql_parser.AND); - this.state = 156; + this.state = 168; (_localctx as LogicalBinaryContext)._right = this.booleanExpression(5); } break; @@ -650,20 +699,20 @@ export class esql_parser extends Parser { _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); (_localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, esql_parser.RULE_booleanExpression); - this.state = 157; + this.state = 169; if (!(this.precpred(this._ctx, 3))) { throw new FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 158; + this.state = 170; (_localctx as LogicalBinaryContext)._operator = this.match(esql_parser.OR); - this.state = 159; + this.state = 171; (_localctx as LogicalBinaryContext)._right = this.booleanExpression(4); } break; } } } - this.state = 164; + this.state = 176; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 8, this._ctx); } @@ -689,27 +738,27 @@ export class esql_parser extends Parser { this.enterRule(_localctx, 12, esql_parser.RULE_regexBooleanExpression); let _la: number; try { - this.state = 179; + this.state = 191; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 11, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 165; + this.state = 177; this.valueExpression(); - this.state = 167; + this.state = 179; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === esql_parser.NOT) { { - this.state = 166; + this.state = 178; this.match(esql_parser.NOT); } } - this.state = 169; + this.state = 181; _localctx._kind = this.match(esql_parser.LIKE); - this.state = 170; + this.state = 182; _localctx._pattern = this.string(); } break; @@ -717,21 +766,21 @@ export class esql_parser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 172; + this.state = 184; this.valueExpression(); - this.state = 174; + this.state = 186; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === esql_parser.NOT) { { - this.state = 173; + this.state = 185; this.match(esql_parser.NOT); } } - this.state = 176; + this.state = 188; _localctx._kind = this.match(esql_parser.RLIKE); - this.state = 177; + this.state = 189; _localctx._pattern = this.string(); } break; @@ -756,14 +805,14 @@ export class esql_parser extends Parser { let _localctx: ValueExpressionContext = new ValueExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 14, esql_parser.RULE_valueExpression); try { - this.state = 186; + this.state = 198; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 12, this._ctx) ) { case 1: _localctx = new ValueExpressionDefaultContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 181; + this.state = 193; this.operatorExpression(0); } break; @@ -772,11 +821,11 @@ export class esql_parser extends Parser { _localctx = new ComparisonContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 182; + this.state = 194; (_localctx as ComparisonContext)._left = this.operatorExpression(0); - this.state = 183; + this.state = 195; this.comparisonOperator(); - this.state = 184; + this.state = 196; (_localctx as ComparisonContext)._right = this.operatorExpression(0); } break; @@ -816,7 +865,7 @@ export class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 192; + this.state = 204; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 13, this._ctx) ) { case 1: @@ -825,7 +874,7 @@ export class esql_parser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 189; + this.state = 201; this.primaryExpression(); } break; @@ -835,7 +884,7 @@ export class esql_parser extends Parser { _localctx = new ArithmeticUnaryContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 190; + this.state = 202; (_localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if (!(_la === esql_parser.PLUS || _la === esql_parser.MINUS)) { @@ -848,13 +897,13 @@ export class esql_parser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 191; + this.state = 203; this.operatorExpression(3); } break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 202; + this.state = 214; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 15, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -864,7 +913,7 @@ export class esql_parser extends Parser { } _prevctx = _localctx; { - this.state = 200; + this.state = 212; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 14, this._ctx) ) { case 1: @@ -872,14 +921,14 @@ export class esql_parser extends Parser { _localctx = new ArithmeticBinaryContext(new OperatorExpressionContext(_parentctx, _parentState)); (_localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, esql_parser.RULE_operatorExpression); - this.state = 194; + this.state = 206; if (!(this.precpred(this._ctx, 2))) { throw new FailedPredicateException(this, "this.precpred(this._ctx, 2)"); } - this.state = 195; + this.state = 207; (_localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if (!(((((_la - 58)) & ~0x1F) === 0 && ((1 << (_la - 58)) & ((1 << (esql_parser.ASTERISK - 58)) | (1 << (esql_parser.SLASH - 58)) | (1 << (esql_parser.PERCENT - 58)))) !== 0))) { + if (!(((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (esql_parser.ASTERISK - 60)) | (1 << (esql_parser.SLASH - 60)) | (1 << (esql_parser.PERCENT - 60)))) !== 0))) { (_localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -889,7 +938,7 @@ export class esql_parser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 196; + this.state = 208; (_localctx as ArithmeticBinaryContext)._right = this.operatorExpression(3); } break; @@ -899,11 +948,11 @@ export class esql_parser extends Parser { _localctx = new ArithmeticBinaryContext(new OperatorExpressionContext(_parentctx, _parentState)); (_localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, esql_parser.RULE_operatorExpression); - this.state = 197; + this.state = 209; if (!(this.precpred(this._ctx, 1))) { throw new FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 198; + this.state = 210; (_localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if (!(_la === esql_parser.PLUS || _la === esql_parser.MINUS)) { @@ -916,14 +965,14 @@ export class esql_parser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 199; + this.state = 211; (_localctx as ArithmeticBinaryContext)._right = this.operatorExpression(2); } break; } } } - this.state = 204; + this.state = 216; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 15, this._ctx); } @@ -948,14 +997,14 @@ export class esql_parser extends Parser { let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 18, esql_parser.RULE_primaryExpression); try { - this.state = 212; + this.state = 224; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 16, this._ctx) ) { case 1: _localctx = new ConstantDefaultContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 205; + this.state = 217; this.constant(); } break; @@ -964,7 +1013,7 @@ export class esql_parser extends Parser { _localctx = new DereferenceContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 206; + this.state = 218; this.qualifiedName(); } break; @@ -973,7 +1022,7 @@ export class esql_parser extends Parser { _localctx = new FunctionContext(_localctx); this.enterOuterAlt(_localctx, 3); { - this.state = 207; + this.state = 219; this.functionExpression(); } break; @@ -982,11 +1031,11 @@ export class esql_parser extends Parser { _localctx = new ParenthesizedExpressionContext(_localctx); this.enterOuterAlt(_localctx, 4); { - this.state = 208; + this.state = 220; this.match(esql_parser.LP); - this.state = 209; + this.state = 221; this.booleanExpression(0); - this.state = 210; + this.state = 222; this.match(esql_parser.RP); } break; @@ -1014,16 +1063,16 @@ export class esql_parser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 214; + this.state = 226; this.identifier(); - this.state = 215; + this.state = 227; this.match(esql_parser.LP); - this.state = 225; + this.state = 237; this._errHandler.sync(this); switch (this._input.LA(1)) { case esql_parser.ASTERISK: { - this.state = 216; + this.state = 228; this.match(esql_parser.ASTERISK); } break; @@ -1043,21 +1092,21 @@ export class esql_parser extends Parser { case esql_parser.QUOTED_IDENTIFIER: { { - this.state = 217; + this.state = 229; this.booleanExpression(0); - this.state = 222; + this.state = 234; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === esql_parser.COMMA) { { { - this.state = 218; + this.state = 230; this.match(esql_parser.COMMA); - this.state = 219; + this.state = 231; this.booleanExpression(0); } } - this.state = 224; + this.state = 236; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1069,7 +1118,7 @@ export class esql_parser extends Parser { default: break; } - this.state = 227; + this.state = 239; this.match(esql_parser.RP); } } @@ -1094,9 +1143,9 @@ export class esql_parser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 229; + this.state = 241; this.match(esql_parser.ROW); - this.state = 230; + this.state = 242; this.fields(); } } @@ -1122,23 +1171,23 @@ export class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 232; + this.state = 244; this.field(); - this.state = 237; + this.state = 249; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 19, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 233; + this.state = 245; this.match(esql_parser.COMMA); - this.state = 234; + this.state = 246; this.field(); } } } - this.state = 239; + this.state = 251; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 19, this._ctx); } @@ -1163,13 +1212,13 @@ export class esql_parser extends Parser { let _localctx: FieldContext = new FieldContext(this._ctx, this.state); this.enterRule(_localctx, 26, esql_parser.RULE_field); try { - this.state = 245; + this.state = 257; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 20, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 240; + this.state = 252; this.booleanExpression(0); } break; @@ -1177,11 +1226,11 @@ export class esql_parser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 241; + this.state = 253; this.qualifiedName(); - this.state = 242; + this.state = 254; this.match(esql_parser.ASSIGN); - this.state = 243; + this.state = 255; this.booleanExpression(0); } break; @@ -1209,34 +1258,34 @@ export class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 247; + this.state = 259; this.match(esql_parser.FROM); - this.state = 248; - this.sourceIdentifier(); - this.state = 253; + this.state = 260; + this.fromIdentifier(); + this.state = 265; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 21, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 249; + this.state = 261; this.match(esql_parser.COMMA); - this.state = 250; - this.sourceIdentifier(); + this.state = 262; + this.fromIdentifier(); } } } - this.state = 255; + this.state = 267; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 21, this._ctx); } - this.state = 257; + this.state = 269; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 22, this._ctx) ) { case 1: { - this.state = 256; + this.state = 268; this.metadata(); } break; @@ -1265,29 +1314,29 @@ export class esql_parser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 259; + this.state = 271; this.match(esql_parser.OPENING_BRACKET); - this.state = 260; + this.state = 272; this.match(esql_parser.METADATA); - this.state = 261; - this.sourceIdentifier(); - this.state = 266; + this.state = 273; + this.fromIdentifier(); + this.state = 278; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === esql_parser.COMMA) { { { - this.state = 262; + this.state = 274; this.match(esql_parser.COMMA); - this.state = 263; - this.sourceIdentifier(); + this.state = 275; + this.fromIdentifier(); } } - this.state = 268; + this.state = 280; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 269; + this.state = 281; this.match(esql_parser.CLOSING_BRACKET); } } @@ -1312,9 +1361,9 @@ export class esql_parser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 271; + this.state = 283; this.match(esql_parser.EVAL); - this.state = 272; + this.state = 284; this.fields(); } } @@ -1339,26 +1388,65 @@ export class esql_parser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 274; + this.state = 286; this.match(esql_parser.STATS); - this.state = 276; + this.state = 288; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 24, this._ctx) ) { case 1: { - this.state = 275; + this.state = 287; this.fields(); } break; } - this.state = 280; + this.state = 292; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 25, this._ctx) ) { case 1: { - this.state = 278; + this.state = 290; this.match(esql_parser.BY); - this.state = 279; + this.state = 291; + this.grouping(); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public inlinestatsCommand(): InlinestatsCommandContext { + let _localctx: InlinestatsCommandContext = new InlinestatsCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 36, esql_parser.RULE_inlinestatsCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 294; + this.match(esql_parser.INLINESTATS); + this.state = 295; + this.fields(); + this.state = 298; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 26, this._ctx) ) { + case 1: + { + this.state = 296; + this.match(esql_parser.BY); + this.state = 297; this.grouping(); } break; @@ -1382,30 +1470,30 @@ export class esql_parser extends Parser { // @RuleVersion(0) public grouping(): GroupingContext { let _localctx: GroupingContext = new GroupingContext(this._ctx, this.state); - this.enterRule(_localctx, 36, esql_parser.RULE_grouping); + this.enterRule(_localctx, 38, esql_parser.RULE_grouping); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 282; + this.state = 300; this.qualifiedName(); - this.state = 287; + this.state = 305; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 26, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 27, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 283; + this.state = 301; this.match(esql_parser.COMMA); - this.state = 284; + this.state = 302; this.qualifiedName(); } } } - this.state = 289; + this.state = 307; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 26, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 27, this._ctx); } } } @@ -1424,16 +1512,16 @@ export class esql_parser extends Parser { return _localctx; } // @RuleVersion(0) - public sourceIdentifier(): SourceIdentifierContext { - let _localctx: SourceIdentifierContext = new SourceIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 38, esql_parser.RULE_sourceIdentifier); + public fromIdentifier(): FromIdentifierContext { + let _localctx: FromIdentifierContext = new FromIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 40, esql_parser.RULE_fromIdentifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 290; + this.state = 308; _la = this._input.LA(1); - if (!(_la === esql_parser.SRC_UNQUOTED_IDENTIFIER || _la === esql_parser.SRC_QUOTED_IDENTIFIER)) { + if (!(_la === esql_parser.QUOTED_IDENTIFIER || _la === esql_parser.FROM_UNQUOTED_IDENTIFIER)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1462,30 +1550,74 @@ export class esql_parser extends Parser { // @RuleVersion(0) public qualifiedName(): QualifiedNameContext { let _localctx: QualifiedNameContext = new QualifiedNameContext(this._ctx, this.state); - this.enterRule(_localctx, 40, esql_parser.RULE_qualifiedName); + this.enterRule(_localctx, 42, esql_parser.RULE_qualifiedName); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 292; + this.state = 310; this.identifier(); - this.state = 297; + this.state = 315; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 27, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 28, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 293; + this.state = 311; this.match(esql_parser.DOT); - this.state = 294; + this.state = 312; this.identifier(); } } } - this.state = 299; + this.state = 317; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 27, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 28, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public qualifiedNamePattern(): QualifiedNamePatternContext { + let _localctx: QualifiedNamePatternContext = new QualifiedNamePatternContext(this._ctx, this.state); + this.enterRule(_localctx, 44, esql_parser.RULE_qualifiedNamePattern); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 318; + this.identifierPattern(); + this.state = 323; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 29, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 319; + this.match(esql_parser.DOT); + this.state = 320; + this.identifierPattern(); + } + } + } + this.state = 325; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 29, this._ctx); } } } @@ -1506,12 +1638,12 @@ export class esql_parser extends Parser { // @RuleVersion(0) public identifier(): IdentifierContext { let _localctx: IdentifierContext = new IdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 42, esql_parser.RULE_identifier); + this.enterRule(_localctx, 46, esql_parser.RULE_identifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 300; + this.state = 326; _la = this._input.LA(1); if (!(_la === esql_parser.UNQUOTED_IDENTIFIER || _la === esql_parser.QUOTED_IDENTIFIER)) { this._errHandler.recoverInline(this); @@ -1540,19 +1672,55 @@ export class esql_parser extends Parser { return _localctx; } // @RuleVersion(0) + public identifierPattern(): IdentifierPatternContext { + let _localctx: IdentifierPatternContext = new IdentifierPatternContext(this._ctx, this.state); + this.enterRule(_localctx, 48, esql_parser.RULE_identifierPattern); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 328; + _la = this._input.LA(1); + if (!(_la === esql_parser.QUOTED_IDENTIFIER || _la === esql_parser.PROJECT_UNQUOTED_IDENTIFIER)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) public constant(): ConstantContext { let _localctx: ConstantContext = new ConstantContext(this._ctx, this.state); - this.enterRule(_localctx, 44, esql_parser.RULE_constant); + this.enterRule(_localctx, 50, esql_parser.RULE_constant); let _la: number; try { - this.state = 344; + this.state = 372; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 31, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 33, this._ctx) ) { case 1: _localctx = new NullLiteralContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 302; + this.state = 330; this.match(esql_parser.NULL); } break; @@ -1561,9 +1729,9 @@ export class esql_parser extends Parser { _localctx = new QualifiedIntegerLiteralContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 303; + this.state = 331; this.integerValue(); - this.state = 304; + this.state = 332; this.match(esql_parser.UNQUOTED_IDENTIFIER); } break; @@ -1572,7 +1740,7 @@ export class esql_parser extends Parser { _localctx = new DecimalLiteralContext(_localctx); this.enterOuterAlt(_localctx, 3); { - this.state = 306; + this.state = 334; this.decimalValue(); } break; @@ -1581,7 +1749,7 @@ export class esql_parser extends Parser { _localctx = new IntegerLiteralContext(_localctx); this.enterOuterAlt(_localctx, 4); { - this.state = 307; + this.state = 335; this.integerValue(); } break; @@ -1590,7 +1758,7 @@ export class esql_parser extends Parser { _localctx = new BooleanLiteralContext(_localctx); this.enterOuterAlt(_localctx, 5); { - this.state = 308; + this.state = 336; this.booleanValue(); } break; @@ -1599,7 +1767,7 @@ export class esql_parser extends Parser { _localctx = new InputParamContext(_localctx); this.enterOuterAlt(_localctx, 6); { - this.state = 309; + this.state = 337; this.match(esql_parser.PARAM); } break; @@ -1608,7 +1776,7 @@ export class esql_parser extends Parser { _localctx = new StringLiteralContext(_localctx); this.enterOuterAlt(_localctx, 7); { - this.state = 310; + this.state = 338; this.string(); } break; @@ -1617,27 +1785,27 @@ export class esql_parser extends Parser { _localctx = new NumericArrayLiteralContext(_localctx); this.enterOuterAlt(_localctx, 8); { - this.state = 311; + this.state = 339; this.match(esql_parser.OPENING_BRACKET); - this.state = 312; + this.state = 340; this.numericValue(); - this.state = 317; + this.state = 345; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === esql_parser.COMMA) { { { - this.state = 313; + this.state = 341; this.match(esql_parser.COMMA); - this.state = 314; + this.state = 342; this.numericValue(); } } - this.state = 319; + this.state = 347; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 320; + this.state = 348; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -1646,27 +1814,27 @@ export class esql_parser extends Parser { _localctx = new BooleanArrayLiteralContext(_localctx); this.enterOuterAlt(_localctx, 9); { - this.state = 322; + this.state = 350; this.match(esql_parser.OPENING_BRACKET); - this.state = 323; + this.state = 351; this.booleanValue(); - this.state = 328; + this.state = 356; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === esql_parser.COMMA) { { { - this.state = 324; + this.state = 352; this.match(esql_parser.COMMA); - this.state = 325; + this.state = 353; this.booleanValue(); } } - this.state = 330; + this.state = 358; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 331; + this.state = 359; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -1675,27 +1843,27 @@ export class esql_parser extends Parser { _localctx = new StringArrayLiteralContext(_localctx); this.enterOuterAlt(_localctx, 10); { - this.state = 333; + this.state = 361; this.match(esql_parser.OPENING_BRACKET); - this.state = 334; + this.state = 362; this.string(); - this.state = 339; + this.state = 367; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === esql_parser.COMMA) { { { - this.state = 335; + this.state = 363; this.match(esql_parser.COMMA); - this.state = 336; + this.state = 364; this.string(); } } - this.state = 341; + this.state = 369; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 342; + this.state = 370; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -1718,13 +1886,13 @@ export class esql_parser extends Parser { // @RuleVersion(0) public limitCommand(): LimitCommandContext { let _localctx: LimitCommandContext = new LimitCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 46, esql_parser.RULE_limitCommand); + this.enterRule(_localctx, 52, esql_parser.RULE_limitCommand); try { this.enterOuterAlt(_localctx, 1); { - this.state = 346; + this.state = 374; this.match(esql_parser.LIMIT); - this.state = 347; + this.state = 375; this.match(esql_parser.INTEGER_LITERAL); } } @@ -1745,32 +1913,32 @@ export class esql_parser extends Parser { // @RuleVersion(0) public sortCommand(): SortCommandContext { let _localctx: SortCommandContext = new SortCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 48, esql_parser.RULE_sortCommand); + this.enterRule(_localctx, 54, esql_parser.RULE_sortCommand); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 349; + this.state = 377; this.match(esql_parser.SORT); - this.state = 350; + this.state = 378; this.orderExpression(); - this.state = 355; + this.state = 383; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 32, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 34, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 351; + this.state = 379; this.match(esql_parser.COMMA); - this.state = 352; + this.state = 380; this.orderExpression(); } } } - this.state = 357; + this.state = 385; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 32, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 34, this._ctx); } } } @@ -1791,19 +1959,19 @@ export class esql_parser extends Parser { // @RuleVersion(0) public orderExpression(): OrderExpressionContext { let _localctx: OrderExpressionContext = new OrderExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 50, esql_parser.RULE_orderExpression); + this.enterRule(_localctx, 56, esql_parser.RULE_orderExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 358; + this.state = 386; this.booleanExpression(0); - this.state = 360; + this.state = 388; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 33, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 35, this._ctx) ) { case 1: { - this.state = 359; + this.state = 387; _localctx._ordering = this._input.LT(1); _la = this._input.LA(1); if (!(_la === esql_parser.ASC || _la === esql_parser.DESC)) { @@ -1819,14 +1987,14 @@ export class esql_parser extends Parser { } break; } - this.state = 364; + this.state = 392; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 34, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 36, this._ctx) ) { case 1: { - this.state = 362; + this.state = 390; this.match(esql_parser.NULLS); - this.state = 363; + this.state = 391; _localctx._nullOrdering = this._input.LT(1); _la = this._input.LA(1); if (!(_la === esql_parser.FIRST || _la === esql_parser.LAST)) { @@ -1861,63 +2029,63 @@ export class esql_parser extends Parser { // @RuleVersion(0) public keepCommand(): KeepCommandContext { let _localctx: KeepCommandContext = new KeepCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 52, esql_parser.RULE_keepCommand); + this.enterRule(_localctx, 58, esql_parser.RULE_keepCommand); try { let _alt: number; - this.state = 384; + this.state = 412; this._errHandler.sync(this); switch (this._input.LA(1)) { case esql_parser.KEEP: this.enterOuterAlt(_localctx, 1); { - this.state = 366; + this.state = 394; this.match(esql_parser.KEEP); - this.state = 367; - this.sourceIdentifier(); - this.state = 372; + this.state = 395; + this.qualifiedNamePattern(); + this.state = 400; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 35, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 37, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 368; + this.state = 396; this.match(esql_parser.COMMA); - this.state = 369; - this.sourceIdentifier(); + this.state = 397; + this.qualifiedNamePattern(); } } } - this.state = 374; + this.state = 402; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 35, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 37, this._ctx); } } break; case esql_parser.PROJECT: this.enterOuterAlt(_localctx, 2); { - this.state = 375; + this.state = 403; this.match(esql_parser.PROJECT); - this.state = 376; - this.sourceIdentifier(); - this.state = 381; + this.state = 404; + this.qualifiedNamePattern(); + this.state = 409; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 38, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 377; + this.state = 405; this.match(esql_parser.COMMA); - this.state = 378; - this.sourceIdentifier(); + this.state = 406; + this.qualifiedNamePattern(); } } } - this.state = 383; + this.state = 411; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 38, this._ctx); } } break; @@ -1942,32 +2110,32 @@ export class esql_parser extends Parser { // @RuleVersion(0) public dropCommand(): DropCommandContext { let _localctx: DropCommandContext = new DropCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 54, esql_parser.RULE_dropCommand); + this.enterRule(_localctx, 60, esql_parser.RULE_dropCommand); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 386; + this.state = 414; this.match(esql_parser.DROP); - this.state = 387; - this.sourceIdentifier(); - this.state = 392; + this.state = 415; + this.qualifiedNamePattern(); + this.state = 420; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 38, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 40, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 388; + this.state = 416; this.match(esql_parser.COMMA); - this.state = 389; - this.sourceIdentifier(); + this.state = 417; + this.qualifiedNamePattern(); } } } - this.state = 394; + this.state = 422; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 38, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 40, this._ctx); } } } @@ -1988,32 +2156,32 @@ export class esql_parser extends Parser { // @RuleVersion(0) public renameCommand(): RenameCommandContext { let _localctx: RenameCommandContext = new RenameCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 56, esql_parser.RULE_renameCommand); + this.enterRule(_localctx, 62, esql_parser.RULE_renameCommand); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 395; + this.state = 423; this.match(esql_parser.RENAME); - this.state = 396; + this.state = 424; this.renameClause(); - this.state = 401; + this.state = 429; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 39, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 397; + this.state = 425; this.match(esql_parser.COMMA); - this.state = 398; + this.state = 426; this.renameClause(); } } } - this.state = 403; + this.state = 431; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 39, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); } } } @@ -2034,16 +2202,16 @@ export class esql_parser extends Parser { // @RuleVersion(0) public renameClause(): RenameClauseContext { let _localctx: RenameClauseContext = new RenameClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 58, esql_parser.RULE_renameClause); + this.enterRule(_localctx, 64, esql_parser.RULE_renameClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 404; - _localctx._oldName = this.sourceIdentifier(); - this.state = 405; + this.state = 432; + _localctx._oldName = this.qualifiedNamePattern(); + this.state = 433; this.match(esql_parser.AS); - this.state = 406; - _localctx._newName = this.sourceIdentifier(); + this.state = 434; + _localctx._newName = this.qualifiedNamePattern(); } } catch (re) { @@ -2063,22 +2231,22 @@ export class esql_parser extends Parser { // @RuleVersion(0) public dissectCommand(): DissectCommandContext { let _localctx: DissectCommandContext = new DissectCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 60, esql_parser.RULE_dissectCommand); + this.enterRule(_localctx, 66, esql_parser.RULE_dissectCommand); try { this.enterOuterAlt(_localctx, 1); { - this.state = 408; + this.state = 436; this.match(esql_parser.DISSECT); - this.state = 409; + this.state = 437; this.primaryExpression(); - this.state = 410; + this.state = 438; this.string(); - this.state = 412; + this.state = 440; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 40, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 42, this._ctx) ) { case 1: { - this.state = 411; + this.state = 439; this.commandOptions(); } break; @@ -2102,15 +2270,15 @@ export class esql_parser extends Parser { // @RuleVersion(0) public grokCommand(): GrokCommandContext { let _localctx: GrokCommandContext = new GrokCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 62, esql_parser.RULE_grokCommand); + this.enterRule(_localctx, 68, esql_parser.RULE_grokCommand); try { this.enterOuterAlt(_localctx, 1); { - this.state = 414; + this.state = 442; this.match(esql_parser.GROK); - this.state = 415; + this.state = 443; this.primaryExpression(); - this.state = 416; + this.state = 444; this.string(); } } @@ -2131,14 +2299,14 @@ export class esql_parser extends Parser { // @RuleVersion(0) public mvExpandCommand(): MvExpandCommandContext { let _localctx: MvExpandCommandContext = new MvExpandCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 64, esql_parser.RULE_mvExpandCommand); + this.enterRule(_localctx, 70, esql_parser.RULE_mvExpandCommand); try { this.enterOuterAlt(_localctx, 1); { - this.state = 418; + this.state = 446; this.match(esql_parser.MV_EXPAND); - this.state = 419; - this.sourceIdentifier(); + this.state = 447; + this.qualifiedName(); } } catch (re) { @@ -2158,30 +2326,30 @@ export class esql_parser extends Parser { // @RuleVersion(0) public commandOptions(): CommandOptionsContext { let _localctx: CommandOptionsContext = new CommandOptionsContext(this._ctx, this.state); - this.enterRule(_localctx, 66, esql_parser.RULE_commandOptions); + this.enterRule(_localctx, 72, esql_parser.RULE_commandOptions); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 421; + this.state = 449; this.commandOption(); - this.state = 426; + this.state = 454; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 422; + this.state = 450; this.match(esql_parser.COMMA); - this.state = 423; + this.state = 451; this.commandOption(); } } } - this.state = 428; + this.state = 456; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); } } } @@ -2202,15 +2370,15 @@ export class esql_parser extends Parser { // @RuleVersion(0) public commandOption(): CommandOptionContext { let _localctx: CommandOptionContext = new CommandOptionContext(this._ctx, this.state); - this.enterRule(_localctx, 68, esql_parser.RULE_commandOption); + this.enterRule(_localctx, 74, esql_parser.RULE_commandOption); try { this.enterOuterAlt(_localctx, 1); { - this.state = 429; + this.state = 457; this.identifier(); - this.state = 430; + this.state = 458; this.match(esql_parser.ASSIGN); - this.state = 431; + this.state = 459; this.constant(); } } @@ -2231,12 +2399,12 @@ export class esql_parser extends Parser { // @RuleVersion(0) public booleanValue(): BooleanValueContext { let _localctx: BooleanValueContext = new BooleanValueContext(this._ctx, this.state); - this.enterRule(_localctx, 70, esql_parser.RULE_booleanValue); + this.enterRule(_localctx, 76, esql_parser.RULE_booleanValue); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 433; + this.state = 461; _la = this._input.LA(1); if (!(_la === esql_parser.FALSE || _la === esql_parser.TRUE)) { this._errHandler.recoverInline(this); @@ -2267,15 +2435,15 @@ export class esql_parser extends Parser { // @RuleVersion(0) public numericValue(): NumericValueContext { let _localctx: NumericValueContext = new NumericValueContext(this._ctx, this.state); - this.enterRule(_localctx, 72, esql_parser.RULE_numericValue); + this.enterRule(_localctx, 78, esql_parser.RULE_numericValue); try { - this.state = 437; + this.state = 465; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 42, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 44, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 435; + this.state = 463; this.decimalValue(); } break; @@ -2283,7 +2451,7 @@ export class esql_parser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 436; + this.state = 464; this.integerValue(); } break; @@ -2306,17 +2474,17 @@ export class esql_parser extends Parser { // @RuleVersion(0) public decimalValue(): DecimalValueContext { let _localctx: DecimalValueContext = new DecimalValueContext(this._ctx, this.state); - this.enterRule(_localctx, 74, esql_parser.RULE_decimalValue); + this.enterRule(_localctx, 80, esql_parser.RULE_decimalValue); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 440; + this.state = 468; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === esql_parser.PLUS || _la === esql_parser.MINUS) { { - this.state = 439; + this.state = 467; _la = this._input.LA(1); if (!(_la === esql_parser.PLUS || _la === esql_parser.MINUS)) { this._errHandler.recoverInline(this); @@ -2331,7 +2499,7 @@ export class esql_parser extends Parser { } } - this.state = 442; + this.state = 470; this.match(esql_parser.DECIMAL_LITERAL); } } @@ -2352,17 +2520,17 @@ export class esql_parser extends Parser { // @RuleVersion(0) public integerValue(): IntegerValueContext { let _localctx: IntegerValueContext = new IntegerValueContext(this._ctx, this.state); - this.enterRule(_localctx, 76, esql_parser.RULE_integerValue); + this.enterRule(_localctx, 82, esql_parser.RULE_integerValue); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 445; + this.state = 473; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === esql_parser.PLUS || _la === esql_parser.MINUS) { { - this.state = 444; + this.state = 472; _la = this._input.LA(1); if (!(_la === esql_parser.PLUS || _la === esql_parser.MINUS)) { this._errHandler.recoverInline(this); @@ -2377,7 +2545,7 @@ export class esql_parser extends Parser { } } - this.state = 447; + this.state = 475; this.match(esql_parser.INTEGER_LITERAL); } } @@ -2398,11 +2566,11 @@ export class esql_parser extends Parser { // @RuleVersion(0) public string(): StringContext { let _localctx: StringContext = new StringContext(this._ctx, this.state); - this.enterRule(_localctx, 78, esql_parser.RULE_string); + this.enterRule(_localctx, 84, esql_parser.RULE_string); try { this.enterOuterAlt(_localctx, 1); { - this.state = 449; + this.state = 477; this.match(esql_parser.STRING); } } @@ -2423,14 +2591,14 @@ export class esql_parser extends Parser { // @RuleVersion(0) public comparisonOperator(): ComparisonOperatorContext { let _localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 80, esql_parser.RULE_comparisonOperator); + this.enterRule(_localctx, 86, esql_parser.RULE_comparisonOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 451; + this.state = 479; _la = this._input.LA(1); - if (!(((((_la - 50)) & ~0x1F) === 0 && ((1 << (_la - 50)) & ((1 << (esql_parser.EQ - 50)) | (1 << (esql_parser.NEQ - 50)) | (1 << (esql_parser.LT - 50)) | (1 << (esql_parser.LTE - 50)) | (1 << (esql_parser.GT - 50)) | (1 << (esql_parser.GTE - 50)))) !== 0))) { + if (!(((((_la - 52)) & ~0x1F) === 0 && ((1 << (_la - 52)) & ((1 << (esql_parser.EQ - 52)) | (1 << (esql_parser.NEQ - 52)) | (1 << (esql_parser.LT - 52)) | (1 << (esql_parser.LTE - 52)) | (1 << (esql_parser.GT - 52)) | (1 << (esql_parser.GTE - 52)))) !== 0))) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2457,20 +2625,76 @@ export class esql_parser extends Parser { return _localctx; } // @RuleVersion(0) + public explainCommand(): ExplainCommandContext { + let _localctx: ExplainCommandContext = new ExplainCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 88, esql_parser.RULE_explainCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 481; + this.match(esql_parser.EXPLAIN); + this.state = 482; + this.subqueryExpression(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public subqueryExpression(): SubqueryExpressionContext { + let _localctx: SubqueryExpressionContext = new SubqueryExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 90, esql_parser.RULE_subqueryExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 484; + this.match(esql_parser.OPENING_BRACKET); + this.state = 485; + this.query(0); + this.state = 486; + this.match(esql_parser.CLOSING_BRACKET); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) public showCommand(): ShowCommandContext { let _localctx: ShowCommandContext = new ShowCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 82, esql_parser.RULE_showCommand); + this.enterRule(_localctx, 92, esql_parser.RULE_showCommand); try { - this.state = 457; + this.state = 492; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 45, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 47, this._ctx) ) { case 1: _localctx = new ShowInfoContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 453; + this.state = 488; this.match(esql_parser.SHOW); - this.state = 454; + this.state = 489; this.match(esql_parser.INFO); } break; @@ -2479,9 +2703,9 @@ export class esql_parser extends Parser { _localctx = new ShowFunctionsContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 455; + this.state = 490; this.match(esql_parser.SHOW); - this.state = 456; + this.state = 491; this.match(esql_parser.FUNCTIONS); } break; @@ -2504,53 +2728,53 @@ export class esql_parser extends Parser { // @RuleVersion(0) public enrichCommand(): EnrichCommandContext { let _localctx: EnrichCommandContext = new EnrichCommandContext(this._ctx, this.state); - this.enterRule(_localctx, 84, esql_parser.RULE_enrichCommand); + this.enterRule(_localctx, 94, esql_parser.RULE_enrichCommand); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 459; + this.state = 494; this.match(esql_parser.ENRICH); - this.state = 460; - _localctx._policyName = this.sourceIdentifier(); - this.state = 463; + this.state = 495; + _localctx._policyName = this.fromIdentifier(); + this.state = 498; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 46, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 48, this._ctx) ) { case 1: { - this.state = 461; + this.state = 496; this.match(esql_parser.ON); - this.state = 462; - _localctx._matchField = this.sourceIdentifier(); + this.state = 497; + _localctx._matchField = this.qualifiedNamePattern(); } break; } - this.state = 474; + this.state = 509; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 48, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 50, this._ctx) ) { case 1: { - this.state = 465; + this.state = 500; this.match(esql_parser.WITH); - this.state = 466; + this.state = 501; this.enrichWithClause(); - this.state = 471; + this.state = 506; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 467; + this.state = 502; this.match(esql_parser.COMMA); - this.state = 468; + this.state = 503; this.enrichWithClause(); } } } - this.state = 473; + this.state = 508; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 47, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 49, this._ctx); } } break; @@ -2574,24 +2798,24 @@ export class esql_parser extends Parser { // @RuleVersion(0) public enrichWithClause(): EnrichWithClauseContext { let _localctx: EnrichWithClauseContext = new EnrichWithClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 86, esql_parser.RULE_enrichWithClause); + this.enterRule(_localctx, 96, esql_parser.RULE_enrichWithClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 479; + this.state = 514; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 49, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 51, this._ctx) ) { case 1: { - this.state = 476; - _localctx._newName = this.sourceIdentifier(); - this.state = 477; + this.state = 511; + _localctx._newName = this.qualifiedNamePattern(); + this.state = 512; this.match(esql_parser.ASSIGN); } break; } - this.state = 481; - _localctx._enrichField = this.sourceIdentifier(); + this.state = 516; + _localctx._enrichField = this.qualifiedNamePattern(); } } catch (re) { @@ -2651,7 +2875,7 @@ export class esql_parser extends Parser { } public static readonly _serializedATN: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03N\u01E6\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03d\u0209\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -2659,233 +2883,249 @@ export class esql_parser extends Parser { "\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C\x04" + "\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04#" + "\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + - "\x04,\t,\x04-\t-\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03" + - "\x03\x03\x03\x03\x07\x03d\n\x03\f\x03\x0E\x03g\v\x03\x03\x04\x03\x04\x03" + - "\x04\x05\x04l\n\x04\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03" + - "\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x05\x05z\n\x05\x03\x06\x03" + - "\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05" + - "\x07\x86\n\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\x8D\n\x07" + - "\f\x07\x0E\x07\x90\v\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07" + - "\x97\n\x07\x03\x07\x03\x07\x05\x07\x9B\n\x07\x03\x07\x03\x07\x03\x07\x03" + - "\x07\x03\x07\x03\x07\x07\x07\xA3\n\x07\f\x07\x0E\x07\xA6\v\x07\x03\b\x03" + - "\b\x05\b\xAA\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\xB1\n\b\x03\b\x03" + - "\b\x03\b\x05\b\xB6\n\b\x03\t\x03\t\x03\t\x03\t\x03\t\x05\t\xBD\n\t\x03" + - "\n\x03\n\x03\n\x03\n\x05\n\xC3\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n" + - "\x07\n\xCB\n\n\f\n\x0E\n\xCE\v\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03" + - "\v\x05\v\xD7\n\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x07\f\xDF\n\f\f\f" + - "\x0E\f\xE2\v\f\x05\f\xE4\n\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\x0E\x03" + - "\x0E\x03\x0E\x07\x0E\xEE\n\x0E\f\x0E\x0E\x0E\xF1\v\x0E\x03\x0F\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x05\x0F\xF8\n\x0F\x03\x10\x03\x10\x03\x10\x03" + - "\x10\x07\x10\xFE\n\x10\f\x10\x0E\x10\u0101\v\x10\x03\x10\x05\x10\u0104" + - "\n\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x07\x11\u010B\n\x11\f\x11" + - "\x0E\x11\u010E\v\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x13\x03" + - "\x13\x05\x13\u0117\n\x13\x03\x13\x03\x13\x05\x13\u011B\n\x13\x03\x14\x03" + - "\x14\x03\x14\x07\x14\u0120\n\x14\f\x14\x0E\x14\u0123\v\x14\x03\x15\x03" + - "\x15\x03\x16\x03\x16\x03\x16\x07\x16\u012A\n\x16\f\x16\x0E\x16\u012D\v" + - "\x16\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + - "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x07\x18\u013E\n\x18" + - "\f\x18\x0E\x18\u0141\v\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + - "\x18\x07\x18\u0149\n\x18\f\x18\x0E\x18\u014C\v\x18\x03\x18\x03\x18\x03" + - "\x18\x03\x18\x03\x18\x03\x18\x07\x18\u0154\n\x18\f\x18\x0E\x18\u0157\v" + - "\x18\x03\x18\x03\x18\x05\x18\u015B\n\x18\x03\x19\x03\x19\x03\x19\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1A\x07\x1A\u0164\n\x1A\f\x1A\x0E\x1A\u0167\v\x1A" + - "\x03\x1B\x03\x1B\x05\x1B\u016B\n\x1B\x03\x1B\x03\x1B\x05\x1B\u016F\n\x1B" + - "\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x07\x1C\u0175\n\x1C\f\x1C\x0E\x1C\u0178" + - "\v\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x07\x1C\u017E\n\x1C\f\x1C\x0E\x1C" + - "\u0181\v\x1C\x05\x1C\u0183\n\x1C\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x07\x1D" + - "\u0189\n\x1D\f\x1D\x0E\x1D\u018C\v\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + - "\x07\x1E\u0192\n\x1E\f\x1E\x0E\x1E\u0195\v\x1E\x03\x1F\x03\x1F\x03\x1F" + - "\x03\x1F\x03 \x03 \x03 \x03 \x05 \u019F\n \x03!\x03!\x03!\x03!\x03\"\x03" + - "\"\x03\"\x03#\x03#\x03#\x07#\u01AB\n#\f#\x0E#\u01AE\v#\x03$\x03$\x03$" + - "\x03$\x03%\x03%\x03&\x03&\x05&\u01B8\n&\x03\'\x05\'\u01BB\n\'\x03\'\x03" + - "\'\x03(\x05(\u01C0\n(\x03(\x03(\x03)\x03)\x03*\x03*\x03+\x03+\x03+\x03" + - "+\x05+\u01CC\n+\x03,\x03,\x03,\x03,\x05,\u01D2\n,\x03,\x03,\x03,\x03," + - "\x07,\u01D8\n,\f,\x0E,\u01DB\v,\x05,\u01DD\n,\x03-\x03-\x03-\x05-\u01E2" + - "\n-\x03-\x03-\x03-\x02\x02\x05\x04\f\x12.\x02\x02\x04\x02\x06\x02\b\x02" + - "\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C" + - "\x02\x1E\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026" + - "\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02" + - "R\x02T\x02V\x02X\x02\x02\n\x03\x02:;\x03\x02<>\x03\x02JK\x03\x02AB\x04" + - "\x02\x1D\x1D \x03\x02#$\x04\x02\"\"00\x03\x0249\x02\u0204\x02Z\x03\x02" + - "\x02\x02\x04]\x03\x02\x02\x02\x06k\x03\x02\x02\x02\by\x03\x02\x02\x02" + - "\n{\x03\x02\x02\x02\f\x9A\x03\x02\x02\x02\x0E\xB5\x03\x02\x02\x02\x10" + - "\xBC\x03\x02\x02\x02\x12\xC2\x03\x02\x02\x02\x14\xD6\x03\x02\x02\x02\x16" + - "\xD8\x03\x02\x02\x02\x18\xE7\x03\x02\x02\x02\x1A\xEA\x03\x02\x02\x02\x1C" + - "\xF7\x03\x02\x02\x02\x1E\xF9\x03\x02\x02\x02 \u0105\x03\x02\x02\x02\"" + - "\u0111\x03\x02\x02\x02$\u0114\x03\x02\x02\x02&\u011C\x03\x02\x02\x02(" + - "\u0124\x03\x02\x02\x02*\u0126\x03\x02\x02\x02,\u012E\x03\x02\x02\x02." + - "\u015A\x03\x02\x02\x020\u015C\x03\x02\x02\x022\u015F\x03\x02\x02\x024" + - "\u0168\x03\x02\x02\x026\u0182\x03\x02\x02\x028\u0184\x03\x02\x02\x02:" + - "\u018D\x03\x02\x02\x02<\u0196\x03\x02\x02\x02>\u019A\x03\x02\x02\x02@" + - "\u01A0\x03\x02\x02\x02B\u01A4\x03\x02\x02\x02D\u01A7\x03\x02\x02\x02F" + - "\u01AF\x03\x02\x02\x02H\u01B3\x03\x02\x02\x02J\u01B7\x03\x02\x02\x02L" + - "\u01BA\x03\x02\x02\x02N\u01BF\x03\x02\x02\x02P\u01C3\x03\x02\x02\x02R" + - "\u01C5\x03\x02\x02\x02T\u01CB\x03\x02\x02\x02V\u01CD\x03\x02\x02\x02X" + - "\u01E1\x03\x02\x02\x02Z[\x05\x04\x03\x02[\\\x07\x02\x02\x03\\\x03\x03" + - "\x02\x02\x02]^\b\x03\x01\x02^_\x05\x06\x04\x02_e\x03\x02\x02\x02`a\f\x03" + - "\x02\x02ab\x07\x17\x02\x02bd\x05\b\x05\x02c`\x03\x02\x02\x02dg\x03\x02" + - "\x02\x02ec\x03\x02\x02\x02ef\x03\x02\x02\x02f\x05\x03\x02\x02\x02ge\x03" + - "\x02\x02\x02hl\x05\x1E\x10\x02il\x05\x18\r\x02jl\x05T+\x02kh\x03\x02\x02" + - "\x02ki\x03\x02\x02\x02kj\x03\x02\x02\x02l\x07\x03\x02\x02\x02mz\x05\"" + - "\x12\x02nz\x050\x19\x02oz\x056\x1C\x02pz\x052\x1A\x02qz\x05$\x13\x02r" + - "z\x05\n\x06\x02sz\x058\x1D\x02tz\x05:\x1E\x02uz\x05> \x02vz\x05@!\x02" + - "wz\x05V,\x02xz\x05B\"\x02ym\x03\x02\x02\x02yn\x03\x02\x02\x02yo\x03\x02" + - "\x02\x02yp\x03\x02\x02\x02yq\x03\x02\x02\x02yr\x03\x02\x02\x02ys\x03\x02" + - "\x02\x02yt\x03\x02\x02\x02yu\x03\x02\x02\x02yv\x03\x02\x02\x02yw\x03\x02" + - "\x02\x02yx\x03\x02\x02\x02z\t\x03\x02\x02\x02{|\x07\x12\x02\x02|}\x05" + - "\f\x07\x02}\v\x03\x02\x02\x02~\x7F\b\x07\x01\x02\x7F\x80\x07)\x02\x02" + - "\x80\x9B\x05\f\x07\t\x81\x9B\x05\x10\t\x02\x82\x9B\x05\x0E\b\x02\x83\x85" + - "\x05\x10\t\x02\x84\x86\x07)\x02\x02\x85\x84\x03\x02\x02\x02\x85\x86\x03" + - "\x02\x02\x02\x86\x87\x03\x02\x02\x02\x87\x88\x07&\x02\x02\x88\x89\x07" + - "%\x02\x02\x89\x8E\x05\x10\t\x02\x8A\x8B\x07\x1F\x02\x02\x8B\x8D\x05\x10" + - "\t\x02\x8C\x8A\x03\x02\x02\x02\x8D\x90\x03\x02\x02\x02\x8E\x8C\x03\x02" + - "\x02\x02\x8E\x8F\x03\x02\x02\x02\x8F\x91\x03\x02\x02\x02\x90\x8E\x03\x02" + - "\x02\x02\x91\x92\x07/\x02\x02\x92\x9B\x03\x02\x02\x02\x93\x94\x05\x10" + - "\t\x02\x94\x96\x07\'\x02\x02\x95\x97\x07)\x02\x02\x96\x95\x03\x02\x02" + - "\x02\x96\x97\x03\x02\x02\x02\x97\x98\x03\x02\x02\x02\x98\x99\x07*\x02" + - "\x02\x99\x9B\x03\x02\x02\x02\x9A~\x03\x02\x02\x02\x9A\x81\x03\x02\x02" + - "\x02\x9A\x82\x03\x02\x02\x02\x9A\x83\x03\x02\x02\x02\x9A\x93\x03\x02\x02" + - "\x02\x9B\xA4\x03\x02\x02\x02\x9C\x9D\f\x06\x02\x02\x9D\x9E\x07\x1C\x02" + - "\x02\x9E\xA3\x05\f\x07\x07\x9F\xA0\f\x05\x02\x02\xA0\xA1\x07,\x02\x02" + - "\xA1\xA3\x05\f\x07\x06\xA2\x9C\x03\x02\x02\x02\xA2\x9F\x03\x02\x02\x02" + - "\xA3\xA6\x03\x02\x02\x02\xA4\xA2\x03\x02\x02\x02\xA4\xA5\x03\x02\x02\x02" + - "\xA5\r\x03\x02\x02\x02\xA6\xA4\x03\x02\x02\x02\xA7\xA9\x05\x10\t\x02\xA8" + - "\xAA\x07)\x02\x02\xA9\xA8\x03\x02\x02\x02\xA9\xAA\x03\x02\x02\x02\xAA" + - "\xAB\x03\x02\x02\x02\xAB\xAC\x07(\x02\x02\xAC\xAD\x05P)\x02\xAD\xB6\x03" + - "\x02\x02\x02\xAE\xB0\x05\x10\t\x02\xAF\xB1\x07)\x02\x02\xB0\xAF\x03\x02" + - "\x02\x02\xB0\xB1\x03\x02\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2\xB3\x07." + - "\x02\x02\xB3\xB4\x05P)\x02\xB4\xB6\x03\x02\x02\x02\xB5\xA7\x03\x02\x02" + - "\x02\xB5\xAE\x03\x02\x02\x02\xB6\x0F\x03\x02\x02\x02\xB7\xBD\x05\x12\n" + - "\x02\xB8\xB9\x05\x12\n\x02\xB9\xBA\x05R*\x02\xBA\xBB\x05\x12\n\x02\xBB" + - "\xBD\x03\x02\x02\x02\xBC\xB7\x03\x02\x02\x02\xBC\xB8\x03\x02\x02\x02\xBD" + - "\x11\x03\x02\x02\x02\xBE\xBF\b\n\x01\x02\xBF\xC3\x05\x14\v\x02\xC0\xC1" + - "\t\x02\x02\x02\xC1\xC3\x05\x12\n\x05\xC2\xBE\x03\x02\x02\x02\xC2\xC0\x03" + - "\x02\x02\x02\xC3\xCC\x03\x02\x02\x02\xC4\xC5\f\x04\x02\x02\xC5\xC6\t\x03" + - "\x02\x02\xC6\xCB\x05\x12\n\x05\xC7\xC8\f\x03\x02\x02\xC8\xC9\t\x02\x02" + - "\x02\xC9\xCB\x05\x12\n\x04\xCA\xC4\x03\x02\x02\x02\xCA\xC7\x03\x02\x02" + - "\x02\xCB\xCE\x03\x02\x02\x02\xCC\xCA\x03\x02\x02\x02\xCC\xCD\x03\x02\x02" + - "\x02\xCD\x13\x03\x02\x02\x02\xCE\xCC\x03\x02\x02\x02\xCF\xD7\x05.\x18" + - "\x02\xD0\xD7\x05*\x16\x02\xD1\xD7\x05\x16\f\x02\xD2\xD3\x07%\x02\x02\xD3" + - "\xD4\x05\f\x07\x02\xD4\xD5\x07/\x02\x02\xD5\xD7\x03\x02\x02\x02\xD6\xCF" + - "\x03\x02\x02\x02\xD6\xD0\x03\x02\x02\x02\xD6\xD1\x03\x02\x02\x02\xD6\xD2" + - "\x03\x02\x02\x02\xD7\x15\x03\x02\x02\x02\xD8\xD9\x05,\x17\x02\xD9\xE3" + - "\x07%\x02\x02\xDA\xE4\x07<\x02\x02\xDB\xE0\x05\f\x07\x02\xDC\xDD\x07\x1F" + - "\x02\x02\xDD\xDF\x05\f\x07\x02\xDE\xDC\x03\x02\x02\x02\xDF\xE2\x03\x02" + - "\x02\x02\xE0\xDE\x03\x02\x02\x02\xE0\xE1\x03\x02\x02\x02\xE1\xE4\x03\x02" + - "\x02\x02\xE2\xE0\x03\x02\x02\x02\xE3\xDA\x03\x02\x02\x02\xE3\xDB\x03\x02" + - "\x02\x02\xE3\xE4\x03\x02\x02\x02\xE4\xE5\x03\x02\x02\x02\xE5\xE6\x07/" + - "\x02\x02\xE6\x17\x03\x02\x02\x02\xE7\xE8\x07\x0E\x02\x02\xE8\xE9\x05\x1A" + - "\x0E\x02\xE9\x19\x03\x02\x02\x02\xEA\xEF\x05\x1C\x0F\x02\xEB\xEC\x07\x1F" + - "\x02\x02\xEC\xEE\x05\x1C\x0F\x02\xED\xEB\x03\x02\x02\x02\xEE\xF1\x03\x02" + - "\x02\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02\xF0\x1B\x03\x02" + - "\x02\x02\xF1\xEF\x03\x02\x02\x02\xF2\xF8\x05\f\x07\x02\xF3\xF4\x05*\x16" + - "\x02\xF4\xF5\x07\x1E\x02\x02\xF5\xF6\x05\f\x07\x02\xF6\xF8\x03\x02\x02" + - "\x02\xF7\xF2\x03\x02\x02\x02\xF7\xF3\x03\x02\x02\x02\xF8\x1D\x03\x02\x02" + - "\x02\xF9\xFA\x07\x07\x02\x02\xFA\xFF\x05(\x15\x02\xFB\xFC\x07\x1F\x02" + - "\x02\xFC\xFE\x05(\x15\x02\xFD\xFB\x03\x02\x02\x02\xFE\u0101\x03\x02\x02" + - "\x02\xFF\xFD\x03\x02\x02\x02\xFF\u0100\x03\x02\x02\x02\u0100\u0103\x03" + - "\x02\x02\x02\u0101\xFF\x03\x02\x02\x02\u0102\u0104\x05 \x11\x02\u0103" + - "\u0102\x03\x02\x02\x02\u0103\u0104\x03\x02\x02\x02\u0104\x1F\x03\x02\x02" + - "\x02\u0105\u0106\x07?\x02\x02\u0106\u0107\x07G\x02\x02\u0107\u010C\x05" + - "(\x15\x02\u0108\u0109\x07\x1F\x02\x02\u0109\u010B\x05(\x15\x02\u010A\u0108" + - "\x03\x02\x02\x02\u010B\u010E\x03\x02\x02\x02\u010C\u010A\x03\x02\x02\x02" + - "\u010C\u010D\x03\x02\x02\x02\u010D\u010F\x03\x02\x02\x02\u010E\u010C\x03" + - "\x02\x02\x02\u010F\u0110\x07@\x02\x02\u0110!\x03\x02\x02\x02\u0111\u0112" + - "\x07\x06\x02\x02\u0112\u0113\x05\x1A\x0E\x02\u0113#\x03\x02\x02\x02\u0114" + - "\u0116\x07\x11\x02\x02\u0115\u0117\x05\x1A\x0E\x02\u0116\u0115\x03\x02" + - "\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117\u011A\x03\x02\x02\x02\u0118" + - "\u0119\x07\x1B\x02\x02\u0119\u011B\x05&\x14\x02\u011A\u0118\x03\x02\x02" + - "\x02\u011A\u011B\x03\x02\x02\x02\u011B%\x03\x02\x02\x02\u011C\u0121\x05" + - "*\x16\x02\u011D\u011E\x07\x1F\x02\x02\u011E\u0120\x05*\x16\x02\u011F\u011D" + - "\x03\x02\x02\x02\u0120\u0123\x03\x02\x02\x02\u0121\u011F\x03\x02\x02\x02" + - "\u0121\u0122\x03\x02\x02\x02\u0122\'\x03\x02\x02\x02\u0123\u0121\x03\x02" + - "\x02\x02\u0124\u0125\t\x04\x02\x02\u0125)\x03\x02\x02\x02\u0126\u012B" + - "\x05,\x17\x02\u0127\u0128\x07!\x02\x02\u0128\u012A\x05,\x17\x02\u0129" + - "\u0127\x03\x02\x02\x02\u012A\u012D\x03\x02\x02\x02\u012B\u0129\x03\x02" + - "\x02\x02\u012B\u012C\x03\x02\x02\x02\u012C+\x03\x02\x02\x02\u012D\u012B" + - "\x03\x02\x02\x02\u012E\u012F\t\x05\x02\x02\u012F-\x03\x02\x02\x02\u0130" + - "\u015B\x07*\x02\x02\u0131\u0132\x05N(\x02\u0132\u0133\x07A\x02\x02\u0133" + - "\u015B\x03\x02\x02\x02\u0134\u015B\x05L\'\x02\u0135\u015B\x05N(\x02\u0136" + - "\u015B\x05H%\x02\u0137\u015B\x07-\x02\x02\u0138\u015B\x05P)\x02\u0139" + - "\u013A\x07?\x02\x02\u013A\u013F\x05J&\x02\u013B\u013C\x07\x1F\x02\x02" + - "\u013C\u013E\x05J&\x02\u013D\u013B\x03\x02\x02\x02\u013E\u0141\x03\x02" + - "\x02\x02\u013F\u013D\x03\x02\x02\x02\u013F\u0140\x03\x02\x02\x02\u0140" + - "\u0142\x03\x02\x02\x02\u0141\u013F\x03\x02\x02\x02\u0142\u0143\x07@\x02" + - "\x02\u0143\u015B\x03\x02\x02\x02\u0144\u0145\x07?\x02\x02\u0145\u014A" + - "\x05H%\x02\u0146\u0147\x07\x1F\x02\x02\u0147\u0149\x05H%\x02\u0148\u0146" + - "\x03\x02\x02\x02\u0149\u014C\x03\x02\x02\x02\u014A\u0148\x03\x02\x02\x02" + - "\u014A\u014B\x03\x02\x02\x02\u014B\u014D\x03\x02\x02\x02\u014C\u014A\x03" + - "\x02\x02\x02\u014D\u014E\x07@\x02\x02\u014E\u015B\x03\x02\x02\x02\u014F" + - "\u0150\x07?\x02\x02\u0150\u0155\x05P)\x02\u0151\u0152\x07\x1F\x02\x02" + - "\u0152\u0154\x05P)\x02\u0153\u0151\x03\x02\x02\x02\u0154\u0157\x03\x02" + - "\x02\x02\u0155\u0153\x03\x02\x02\x02\u0155\u0156\x03\x02\x02\x02\u0156" + - "\u0158\x03\x02\x02\x02\u0157\u0155\x03\x02\x02\x02\u0158\u0159\x07@\x02" + - "\x02\u0159\u015B\x03\x02\x02\x02\u015A\u0130\x03\x02\x02\x02\u015A\u0131" + - "\x03\x02\x02\x02\u015A\u0134\x03\x02\x02\x02\u015A\u0135\x03\x02\x02\x02" + - "\u015A\u0136\x03\x02\x02\x02\u015A\u0137\x03\x02\x02\x02\u015A\u0138\x03" + - "\x02\x02\x02\u015A\u0139\x03\x02\x02\x02\u015A\u0144\x03\x02\x02\x02\u015A" + - "\u014F\x03\x02\x02\x02\u015B/\x03\x02\x02\x02\u015C\u015D\x07\n\x02\x02" + - "\u015D\u015E\x07\x19\x02\x02\u015E1\x03\x02\x02\x02\u015F\u0160\x07\x10" + - "\x02\x02\u0160\u0165\x054\x1B\x02\u0161\u0162\x07\x1F\x02\x02\u0162\u0164" + - "\x054\x1B\x02\u0163\u0161\x03\x02\x02\x02\u0164\u0167\x03\x02\x02\x02" + - "\u0165\u0163\x03\x02\x02\x02\u0165\u0166\x03\x02\x02\x02\u01663\x03\x02" + - "\x02\x02\u0167\u0165\x03\x02\x02\x02\u0168\u016A\x05\f\x07\x02\u0169\u016B" + - "\t\x06\x02\x02\u016A\u0169\x03\x02\x02\x02\u016A\u016B\x03\x02\x02\x02" + - "\u016B\u016E\x03\x02\x02\x02\u016C\u016D\x07+\x02\x02\u016D\u016F\t\x07" + - "\x02\x02\u016E\u016C\x03\x02\x02\x02\u016E\u016F\x03\x02\x02\x02\u016F" + - "5\x03\x02\x02\x02\u0170\u0171\x07\t\x02\x02\u0171\u0176\x05(\x15\x02\u0172" + - "\u0173\x07\x1F\x02\x02\u0173\u0175\x05(\x15\x02\u0174\u0172\x03\x02\x02" + - "\x02\u0175\u0178\x03\x02\x02\x02\u0176\u0174\x03\x02\x02\x02\u0176\u0177" + - "\x03\x02\x02\x02\u0177\u0183\x03\x02\x02\x02\u0178\u0176\x03\x02\x02\x02" + - "\u0179\u017A\x07\f\x02\x02\u017A\u017F\x05(\x15\x02\u017B\u017C\x07\x1F" + - "\x02\x02\u017C\u017E\x05(\x15\x02\u017D\u017B\x03\x02\x02\x02\u017E\u0181" + - "\x03\x02\x02\x02\u017F\u017D\x03\x02\x02\x02\u017F\u0180\x03\x02\x02\x02" + - "\u0180\u0183\x03\x02\x02\x02\u0181\u017F\x03\x02\x02\x02\u0182\u0170\x03" + - "\x02\x02\x02\u0182\u0179\x03\x02\x02\x02\u01837\x03\x02\x02\x02\u0184" + - "\u0185\x07\x04\x02\x02\u0185\u018A\x05(\x15\x02\u0186\u0187\x07\x1F\x02" + - "\x02\u0187\u0189\x05(\x15\x02\u0188\u0186\x03\x02\x02\x02\u0189\u018C" + - "\x03\x02\x02\x02\u018A\u0188\x03\x02\x02\x02\u018A\u018B\x03\x02\x02\x02" + - "\u018B9\x03\x02\x02\x02\u018C\u018A\x03\x02\x02\x02\u018D\u018E\x07\r" + - "\x02\x02\u018E\u0193\x05<\x1F\x02\u018F\u0190\x07\x1F\x02\x02\u0190\u0192" + - "\x05<\x1F\x02\u0191\u018F\x03\x02\x02\x02\u0192\u0195\x03\x02\x02\x02" + - "\u0193\u0191\x03\x02\x02\x02\u0193\u0194\x03\x02\x02\x02\u0194;\x03\x02" + - "\x02\x02\u0195\u0193\x03\x02\x02\x02\u0196\u0197\x05(\x15\x02\u0197\u0198" + - "\x07F\x02\x02\u0198\u0199\x05(\x15\x02\u0199=\x03\x02\x02\x02\u019A\u019B" + - "\x07\x03\x02\x02\u019B\u019C\x05\x14\v\x02\u019C\u019E\x05P)\x02\u019D" + - "\u019F\x05D#\x02\u019E\u019D\x03\x02\x02\x02\u019E\u019F\x03\x02\x02\x02" + - "\u019F?\x03\x02\x02\x02\u01A0\u01A1\x07\b\x02\x02\u01A1\u01A2\x05\x14" + - "\v\x02\u01A2\u01A3\x05P)\x02\u01A3A\x03\x02\x02\x02\u01A4\u01A5\x07\v" + - "\x02\x02\u01A5\u01A6\x05(\x15\x02\u01A6C\x03\x02\x02\x02\u01A7\u01AC\x05" + - "F$\x02\u01A8\u01A9\x07\x1F\x02\x02\u01A9\u01AB\x05F$\x02\u01AA\u01A8\x03" + - "\x02\x02\x02\u01AB\u01AE\x03\x02\x02\x02\u01AC\u01AA\x03\x02\x02\x02\u01AC" + - "\u01AD\x03\x02\x02\x02\u01ADE\x03\x02\x02\x02\u01AE\u01AC\x03\x02\x02" + - "\x02\u01AF\u01B0\x05,\x17\x02\u01B0\u01B1\x07\x1E\x02\x02\u01B1\u01B2" + - "\x05.\x18\x02\u01B2G\x03\x02\x02\x02\u01B3\u01B4\t\b\x02\x02\u01B4I\x03" + - "\x02\x02\x02\u01B5\u01B8\x05L\'\x02\u01B6\u01B8\x05N(\x02\u01B7\u01B5" + - "\x03\x02\x02\x02\u01B7\u01B6\x03\x02\x02\x02\u01B8K\x03\x02\x02\x02\u01B9" + - "\u01BB\t\x02\x02\x02\u01BA\u01B9\x03\x02\x02\x02\u01BA\u01BB\x03\x02\x02" + - "\x02\u01BB\u01BC\x03\x02\x02\x02\u01BC\u01BD\x07\x1A\x02\x02\u01BDM\x03" + - "\x02\x02\x02\u01BE\u01C0\t\x02\x02\x02\u01BF\u01BE\x03\x02\x02\x02\u01BF" + - "\u01C0\x03\x02\x02\x02\u01C0\u01C1\x03\x02\x02\x02\u01C1\u01C2\x07\x19" + - "\x02\x02\u01C2O\x03\x02\x02\x02\u01C3\u01C4\x07\x18\x02\x02\u01C4Q\x03" + - "\x02\x02\x02\u01C5\u01C6\t\t\x02\x02\u01C6S\x03\x02\x02\x02\u01C7\u01C8" + - "\x07\x0F\x02\x02\u01C8\u01CC\x071\x02\x02\u01C9\u01CA\x07\x0F\x02\x02" + - "\u01CA\u01CC\x072\x02\x02\u01CB\u01C7\x03\x02\x02\x02\u01CB\u01C9\x03" + - "\x02\x02\x02\u01CCU\x03\x02\x02\x02\u01CD\u01CE\x07\x05\x02\x02\u01CE" + - "\u01D1\x05(\x15\x02\u01CF\u01D0\x07H\x02\x02\u01D0\u01D2\x05(\x15\x02" + - "\u01D1\u01CF\x03\x02\x02\x02\u01D1\u01D2\x03\x02\x02\x02\u01D2\u01DC\x03" + - "\x02\x02\x02\u01D3\u01D4\x07I\x02\x02\u01D4\u01D9\x05X-\x02\u01D5\u01D6" + - "\x07\x1F\x02\x02\u01D6\u01D8\x05X-\x02\u01D7\u01D5\x03\x02\x02\x02\u01D8" + - "\u01DB\x03\x02\x02\x02\u01D9\u01D7\x03\x02\x02\x02\u01D9\u01DA\x03\x02" + - "\x02\x02\u01DA\u01DD\x03\x02\x02\x02\u01DB\u01D9\x03\x02\x02\x02\u01DC" + - "\u01D3\x03\x02\x02\x02\u01DC\u01DD\x03\x02\x02\x02\u01DDW\x03\x02\x02" + - "\x02\u01DE\u01DF\x05(\x15\x02\u01DF\u01E0\x07\x1E\x02\x02\u01E0\u01E2" + - "\x03\x02\x02\x02\u01E1\u01DE\x03\x02\x02\x02\u01E1\u01E2\x03\x02\x02\x02" + - "\u01E2\u01E3\x03\x02\x02\x02\u01E3\u01E4\x05(\x15\x02\u01E4Y\x03\x02\x02" + - "\x024eky\x85\x8E\x96\x9A\xA2\xA4\xA9\xB0\xB5\xBC\xC2\xCA\xCC\xD6\xE0\xE3" + - "\xEF\xF7\xFF\u0103\u010C\u0116\u011A\u0121\u012B\u013F\u014A\u0155\u015A" + - "\u0165\u016A\u016E\u0176\u017F\u0182\u018A\u0193\u019E\u01AC\u01B7\u01BA" + - "\u01BF\u01CB\u01D1\u01D9\u01DC\u01E1"; + "\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x03\x02\x03\x02" + + "\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x07\x03n\n\x03" + + "\f\x03\x0E\x03q\v\x03\x03\x04\x03\x04\x03\x04\x03\x04\x05\x04w\n\x04\x03" + + "\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03" + + "\x05\x03\x05\x03\x05\x03\x05\x05\x05\x86\n\x05\x03\x06\x03\x06\x03\x06" + + "\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\x92\n" + + "\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\x99\n\x07\f\x07\x0E" + + "\x07\x9C\v\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\xA3\n\x07" + + "\x03\x07\x03\x07\x05\x07\xA7\n\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03" + + "\x07\x03\x07\x07\x07\xAF\n\x07\f\x07\x0E\x07\xB2\v\x07\x03\b\x03\b\x05" + + "\b\xB6\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\xBD\n\b\x03\b\x03\b\x03" + + "\b\x05\b\xC2\n\b\x03\t\x03\t\x03\t\x03\t\x03\t\x05\t\xC9\n\t\x03\n\x03" + + "\n\x03\n\x03\n\x05\n\xCF\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x07\n" + + "\xD7\n\n\f\n\x0E\n\xDA\v\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x05" + + "\v\xE3\n\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x07\f\xEB\n\f\f\f\x0E\f" + + "\xEE\v\f\x05\f\xF0\n\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03" + + "\x0E\x07\x0E\xFA\n\x0E\f\x0E\x0E\x0E\xFD\v\x0E\x03\x0F\x03\x0F\x03\x0F" + + "\x03\x0F\x03\x0F\x05\x0F\u0104\n\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x07" + + "\x10\u010A\n\x10\f\x10\x0E\x10\u010D\v\x10\x03\x10\x05\x10\u0110\n\x10" + + "\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x07\x11\u0117\n\x11\f\x11\x0E" + + "\x11\u011A\v\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13" + + "\x05\x13\u0123\n\x13\x03\x13\x03\x13\x05\x13\u0127\n\x13\x03\x14\x03\x14" + + "\x03\x14\x03\x14\x05\x14\u012D\n\x14\x03\x15\x03\x15\x03\x15\x07\x15\u0132" + + "\n\x15\f\x15\x0E\x15\u0135\v\x15\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17" + + "\x07\x17\u013C\n\x17\f\x17\x0E\x17\u013F\v\x17\x03\x18\x03\x18\x03\x18" + + "\x07\x18\u0144\n\x18\f\x18\x0E\x18\u0147\v\x18\x03\x19\x03\x19\x03\x1A" + + "\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B" + + "\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x07\x1B\u015A\n\x1B\f\x1B\x0E" + + "\x1B\u015D\v\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x07\x1B" + + "\u0165\n\x1B\f\x1B\x0E\x1B\u0168\v\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B" + + "\x03\x1B\x03\x1B\x07\x1B\u0170\n\x1B\f\x1B\x0E\x1B\u0173\v\x1B\x03\x1B" + + "\x03\x1B\x05\x1B\u0177\n\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03" + + "\x1D\x03\x1D\x07\x1D\u0180\n\x1D\f\x1D\x0E\x1D\u0183\v\x1D\x03\x1E\x03" + + "\x1E\x05\x1E\u0187\n\x1E\x03\x1E\x03\x1E\x05\x1E\u018B\n\x1E\x03\x1F\x03" + + "\x1F\x03\x1F\x03\x1F\x07\x1F\u0191\n\x1F\f\x1F\x0E\x1F\u0194\v\x1F\x03" + + "\x1F\x03\x1F\x03\x1F\x03\x1F\x07\x1F\u019A\n\x1F\f\x1F\x0E\x1F\u019D\v" + + "\x1F\x05\x1F\u019F\n\x1F\x03 \x03 \x03 \x03 \x07 \u01A5\n \f \x0E \u01A8" + + "\v \x03!\x03!\x03!\x03!\x07!\u01AE\n!\f!\x0E!\u01B1\v!\x03\"\x03\"\x03" + + "\"\x03\"\x03#\x03#\x03#\x03#\x05#\u01BB\n#\x03$\x03$\x03$\x03$\x03%\x03" + + "%\x03%\x03&\x03&\x03&\x07&\u01C7\n&\f&\x0E&\u01CA\v&\x03\'\x03\'\x03\'" + + "\x03\'\x03(\x03(\x03)\x03)\x05)\u01D4\n)\x03*\x05*\u01D7\n*\x03*\x03*" + + "\x03+\x05+\u01DC\n+\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03.\x03.\x03/" + + "\x03/\x03/\x03/\x030\x030\x030\x030\x050\u01EF\n0\x031\x031\x031\x031" + + "\x051\u01F5\n1\x031\x031\x031\x031\x071\u01FB\n1\f1\x0E1\u01FE\v1\x05" + + "1\u0200\n1\x032\x032\x032\x052\u0205\n2\x032\x032\x032\x02\x02\x05\x04" + + "\f\x123\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12" + + "\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02&" + + "\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02" + + "B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02" + + "^\x02`\x02b\x02\x02\v\x03\x02<=\x03\x02>@\x04\x02DDII\x03\x02CD\x04\x02" + + "DDMM\x04\x02\"\"%%\x03\x02()\x04\x02\'\'55\x03\x026;\x02\u0226\x02d\x03" + + "\x02\x02\x02\x04g\x03\x02\x02\x02\x06v\x03\x02\x02\x02\b\x85\x03\x02\x02" + + "\x02\n\x87\x03\x02\x02\x02\f\xA6\x03\x02\x02\x02\x0E\xC1\x03\x02\x02\x02" + + "\x10\xC8\x03\x02\x02\x02\x12\xCE\x03\x02\x02\x02\x14\xE2\x03\x02\x02\x02" + + "\x16\xE4\x03\x02\x02\x02\x18\xF3\x03\x02\x02\x02\x1A\xF6\x03\x02\x02\x02" + + "\x1C\u0103\x03\x02\x02\x02\x1E\u0105\x03\x02\x02\x02 \u0111\x03\x02\x02" + + "\x02\"\u011D\x03\x02\x02\x02$\u0120\x03\x02\x02\x02&\u0128\x03\x02\x02" + + "\x02(\u012E\x03\x02\x02\x02*\u0136\x03\x02\x02\x02,\u0138\x03\x02\x02" + + "\x02.\u0140\x03\x02\x02\x020\u0148\x03\x02\x02\x022\u014A\x03\x02\x02" + + "\x024\u0176\x03\x02\x02\x026\u0178\x03\x02\x02\x028\u017B\x03\x02\x02" + + "\x02:\u0184\x03\x02\x02\x02<\u019E\x03\x02\x02\x02>\u01A0\x03\x02\x02" + + "\x02@\u01A9\x03\x02\x02\x02B\u01B2\x03\x02\x02\x02D\u01B6\x03\x02\x02" + + "\x02F\u01BC\x03\x02\x02\x02H\u01C0\x03\x02\x02\x02J\u01C3\x03\x02\x02" + + "\x02L\u01CB\x03\x02\x02\x02N\u01CF\x03\x02\x02\x02P\u01D3\x03\x02\x02" + + "\x02R\u01D6\x03\x02\x02\x02T\u01DB\x03\x02\x02\x02V\u01DF\x03\x02\x02" + + "\x02X\u01E1\x03\x02\x02\x02Z\u01E3\x03\x02\x02\x02\\\u01E6\x03\x02\x02" + + "\x02^\u01EE\x03\x02\x02\x02`\u01F0\x03\x02\x02\x02b\u0204\x03\x02\x02" + + "\x02de\x05\x04\x03\x02ef\x07\x02\x02\x03f\x03\x03\x02\x02\x02gh\b\x03" + + "\x01\x02hi\x05\x06\x04\x02io\x03\x02\x02\x02jk\f\x03\x02\x02kl\x07\x1C" + + "\x02\x02ln\x05\b\x05\x02mj\x03\x02\x02\x02nq\x03\x02\x02\x02om\x03\x02" + + "\x02\x02op\x03\x02\x02\x02p\x05\x03\x02\x02\x02qo\x03\x02\x02\x02rw\x05" + + "Z.\x02sw\x05\x1E\x10\x02tw\x05\x18\r\x02uw\x05^0\x02vr\x03\x02\x02\x02" + + "vs\x03\x02\x02\x02vt\x03\x02\x02\x02vu\x03\x02\x02\x02w\x07\x03\x02\x02" + + "\x02x\x86\x05\"\x12\x02y\x86\x05&\x14\x02z\x86\x056\x1C\x02{\x86\x05<" + + "\x1F\x02|\x86\x058\x1D\x02}\x86\x05$\x13\x02~\x86\x05\n\x06\x02\x7F\x86" + + "\x05> \x02\x80\x86\x05@!\x02\x81\x86\x05D#\x02\x82\x86\x05F$\x02\x83\x86" + + "\x05`1\x02\x84\x86\x05H%\x02\x85x\x03\x02\x02\x02\x85y\x03\x02\x02\x02" + + "\x85z\x03\x02\x02\x02\x85{\x03\x02\x02\x02\x85|\x03\x02\x02\x02\x85}\x03" + + "\x02\x02\x02\x85~\x03\x02\x02\x02\x85\x7F\x03\x02\x02\x02\x85\x80\x03" + + "\x02\x02\x02\x85\x81\x03\x02\x02\x02\x85\x82\x03\x02\x02\x02\x85\x83\x03" + + "\x02\x02\x02\x85\x84\x03\x02\x02\x02\x86\t\x03\x02\x02\x02\x87\x88\x07" + + "\x14\x02\x02\x88\x89\x05\f\x07\x02\x89\v\x03\x02\x02\x02\x8A\x8B\b\x07" + + "\x01\x02\x8B\x8C\x07.\x02\x02\x8C\xA7\x05\f\x07\t\x8D\xA7\x05\x10\t\x02" + + "\x8E\xA7\x05\x0E\b\x02\x8F\x91\x05\x10\t\x02\x90\x92\x07.\x02\x02\x91" + + "\x90\x03\x02\x02\x02\x91\x92\x03\x02\x02\x02\x92\x93\x03\x02\x02\x02\x93" + + "\x94\x07+\x02\x02\x94\x95\x07*\x02\x02\x95\x9A\x05\x10\t\x02\x96\x97\x07" + + "$\x02\x02\x97\x99\x05\x10\t\x02\x98\x96\x03\x02\x02\x02\x99\x9C\x03\x02" + + "\x02\x02\x9A\x98\x03\x02\x02\x02\x9A\x9B\x03\x02\x02\x02\x9B\x9D\x03\x02" + + "\x02\x02\x9C\x9A\x03\x02\x02\x02\x9D\x9E\x074\x02\x02\x9E\xA7\x03\x02" + + "\x02\x02\x9F\xA0\x05\x10\t\x02\xA0\xA2\x07,\x02\x02\xA1\xA3\x07.\x02\x02" + + "\xA2\xA1\x03\x02\x02\x02\xA2\xA3\x03\x02\x02\x02\xA3\xA4\x03\x02\x02\x02" + + "\xA4\xA5\x07/\x02\x02\xA5\xA7\x03\x02\x02\x02\xA6\x8A\x03\x02\x02\x02" + + "\xA6\x8D\x03\x02\x02\x02\xA6\x8E\x03\x02\x02\x02\xA6\x8F\x03\x02\x02\x02" + + "\xA6\x9F\x03\x02\x02\x02\xA7\xB0\x03\x02\x02\x02\xA8\xA9\f\x06\x02\x02" + + "\xA9\xAA\x07!\x02\x02\xAA\xAF\x05\f\x07\x07\xAB\xAC\f\x05\x02\x02\xAC" + + "\xAD\x071\x02\x02\xAD\xAF\x05\f\x07\x06\xAE\xA8\x03\x02\x02\x02\xAE\xAB" + + "\x03\x02\x02\x02\xAF\xB2\x03\x02\x02\x02\xB0\xAE\x03\x02\x02\x02\xB0\xB1" + + "\x03\x02\x02\x02\xB1\r\x03\x02\x02\x02\xB2\xB0\x03\x02\x02\x02\xB3\xB5" + + "\x05\x10\t\x02\xB4\xB6\x07.\x02\x02\xB5\xB4\x03\x02\x02\x02\xB5\xB6\x03" + + "\x02\x02\x02\xB6\xB7\x03\x02\x02\x02\xB7\xB8\x07-\x02\x02\xB8\xB9\x05" + + "V,\x02\xB9\xC2\x03\x02\x02\x02\xBA\xBC\x05\x10\t\x02\xBB\xBD\x07.\x02" + + "\x02\xBC\xBB\x03\x02\x02\x02\xBC\xBD\x03\x02\x02\x02\xBD\xBE\x03\x02\x02" + + "\x02\xBE\xBF\x073\x02\x02\xBF\xC0\x05V,\x02\xC0\xC2\x03\x02\x02\x02\xC1" + + "\xB3\x03\x02\x02\x02\xC1\xBA\x03\x02\x02\x02\xC2\x0F\x03\x02\x02\x02\xC3" + + "\xC9\x05\x12\n\x02\xC4\xC5\x05\x12\n\x02\xC5\xC6\x05X-\x02\xC6\xC7\x05" + + "\x12\n\x02\xC7\xC9\x03\x02\x02\x02\xC8\xC3\x03\x02\x02\x02\xC8\xC4\x03" + + "\x02\x02\x02\xC9\x11\x03\x02\x02\x02\xCA\xCB\b\n\x01\x02\xCB\xCF\x05\x14" + + "\v\x02\xCC\xCD\t\x02\x02\x02\xCD\xCF\x05\x12\n\x05\xCE\xCA\x03\x02\x02" + + "\x02\xCE\xCC\x03\x02\x02\x02\xCF\xD8\x03\x02\x02\x02\xD0\xD1\f\x04\x02" + + "\x02\xD1\xD2\t\x03\x02\x02\xD2\xD7\x05\x12\n\x05\xD3\xD4\f\x03\x02\x02" + + "\xD4\xD5\t\x02\x02\x02\xD5\xD7\x05\x12\n\x04\xD6\xD0\x03\x02\x02\x02\xD6" + + "\xD3\x03\x02\x02\x02\xD7\xDA\x03\x02\x02\x02\xD8\xD6\x03\x02\x02\x02\xD8" + + "\xD9\x03\x02\x02\x02\xD9\x13\x03\x02\x02\x02\xDA\xD8\x03\x02\x02\x02\xDB" + + "\xE3\x054\x1B\x02\xDC\xE3\x05,\x17\x02\xDD\xE3\x05\x16\f\x02\xDE\xDF\x07" + + "*\x02\x02\xDF\xE0\x05\f\x07\x02\xE0\xE1\x074\x02\x02\xE1\xE3\x03\x02\x02" + + "\x02\xE2\xDB\x03\x02\x02\x02\xE2\xDC\x03\x02\x02\x02\xE2\xDD\x03\x02\x02" + + "\x02\xE2\xDE\x03\x02\x02\x02\xE3\x15\x03\x02\x02\x02\xE4\xE5\x050\x19" + + "\x02\xE5\xEF\x07*\x02\x02\xE6\xF0\x07>\x02\x02\xE7\xEC\x05\f\x07\x02\xE8" + + "\xE9\x07$\x02\x02\xE9\xEB\x05\f\x07\x02\xEA\xE8\x03\x02\x02\x02\xEB\xEE" + + "\x03\x02\x02\x02\xEC\xEA\x03\x02\x02\x02\xEC\xED\x03\x02\x02\x02\xED\xF0" + + "\x03\x02\x02\x02\xEE\xEC\x03\x02\x02\x02\xEF\xE6\x03\x02\x02\x02\xEF\xE7" + + "\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02\xF0\xF1\x03\x02\x02\x02\xF1\xF2" + + "\x074\x02\x02\xF2\x17\x03\x02\x02\x02\xF3\xF4\x07\x10\x02\x02\xF4\xF5" + + "\x05\x1A\x0E\x02\xF5\x19\x03\x02\x02\x02\xF6\xFB\x05\x1C\x0F\x02\xF7\xF8" + + "\x07$\x02\x02\xF8\xFA\x05\x1C\x0F\x02\xF9\xF7\x03\x02\x02\x02\xFA\xFD" + + "\x03\x02\x02\x02\xFB\xF9\x03\x02\x02\x02\xFB\xFC\x03\x02\x02\x02\xFC\x1B" + + "\x03\x02\x02\x02\xFD\xFB\x03\x02\x02\x02\xFE\u0104\x05\f\x07\x02\xFF\u0100" + + "\x05,\x17\x02\u0100\u0101\x07#\x02\x02\u0101\u0102\x05\f\x07\x02\u0102" + + "\u0104\x03\x02\x02\x02\u0103\xFE\x03\x02\x02\x02\u0103\xFF\x03\x02\x02" + + "\x02\u0104\x1D\x03\x02\x02\x02\u0105\u0106\x07\b\x02\x02\u0106\u010B\x05" + + "*\x16\x02\u0107\u0108\x07$\x02\x02\u0108\u010A\x05*\x16\x02\u0109\u0107" + + "\x03\x02\x02\x02\u010A\u010D\x03\x02\x02\x02\u010B\u0109\x03\x02\x02\x02" + + "\u010B\u010C\x03\x02\x02\x02\u010C\u010F\x03\x02\x02\x02\u010D\u010B\x03" + + "\x02\x02\x02\u010E\u0110\x05 \x11\x02\u010F\u010E\x03\x02\x02\x02\u010F" + + "\u0110\x03\x02\x02\x02\u0110\x1F\x03\x02\x02\x02\u0111\u0112\x07A\x02" + + "\x02\u0112\u0113\x07H\x02\x02\u0113\u0118\x05*\x16\x02\u0114\u0115\x07" + + "$\x02\x02\u0115\u0117\x05*\x16\x02\u0116\u0114\x03\x02\x02\x02\u0117\u011A" + + "\x03\x02\x02\x02\u0118\u0116\x03\x02\x02\x02\u0118\u0119\x03\x02\x02\x02" + + "\u0119\u011B\x03\x02\x02\x02\u011A\u0118\x03\x02\x02\x02\u011B\u011C\x07" + + "B\x02\x02\u011C!\x03\x02\x02\x02\u011D\u011E\x07\x06\x02\x02\u011E\u011F" + + "\x05\x1A\x0E\x02\u011F#\x03\x02\x02\x02\u0120\u0122\x07\x13\x02\x02\u0121" + + "\u0123\x05\x1A\x0E\x02\u0122\u0121\x03\x02\x02\x02\u0122\u0123\x03\x02" + + "\x02\x02\u0123\u0126\x03\x02\x02\x02\u0124\u0125\x07 \x02\x02\u0125\u0127" + + "\x05(\x15\x02\u0126\u0124\x03\x02\x02\x02\u0126\u0127\x03\x02\x02\x02" + + "\u0127%\x03\x02\x02\x02\u0128\u0129\x07\n\x02\x02\u0129\u012C\x05\x1A" + + "\x0E\x02\u012A\u012B\x07 \x02\x02\u012B\u012D\x05(\x15\x02\u012C\u012A" + + "\x03\x02\x02\x02\u012C\u012D\x03\x02\x02\x02\u012D\'\x03\x02\x02\x02\u012E" + + "\u0133\x05,\x17\x02\u012F\u0130\x07$\x02\x02\u0130\u0132\x05,\x17\x02" + + "\u0131\u012F\x03\x02\x02\x02\u0132\u0135\x03\x02\x02\x02\u0133\u0131\x03" + + "\x02\x02\x02\u0133\u0134\x03\x02\x02\x02\u0134)\x03\x02\x02\x02\u0135" + + "\u0133\x03\x02\x02\x02\u0136\u0137\t\x04\x02\x02\u0137+\x03\x02\x02\x02" + + "\u0138\u013D\x050\x19\x02\u0139\u013A\x07&\x02\x02\u013A\u013C\x050\x19" + + "\x02\u013B\u0139\x03\x02\x02\x02\u013C\u013F\x03\x02\x02\x02\u013D\u013B" + + "\x03\x02\x02\x02\u013D\u013E\x03\x02\x02\x02\u013E-\x03\x02\x02\x02\u013F" + + "\u013D\x03\x02\x02\x02\u0140\u0145\x052\x1A\x02\u0141\u0142\x07&\x02\x02" + + "\u0142\u0144\x052\x1A\x02\u0143\u0141\x03\x02\x02\x02\u0144\u0147\x03" + + "\x02\x02\x02\u0145\u0143\x03\x02\x02\x02\u0145\u0146\x03\x02\x02\x02\u0146" + + "/\x03\x02\x02\x02\u0147\u0145\x03\x02\x02\x02\u0148\u0149\t\x05\x02\x02" + + "\u01491\x03\x02\x02\x02\u014A\u014B\t\x06\x02\x02\u014B3\x03\x02\x02\x02" + + "\u014C\u0177\x07/\x02\x02\u014D\u014E\x05T+\x02\u014E\u014F\x07C\x02\x02" + + "\u014F\u0177\x03\x02\x02\x02\u0150\u0177\x05R*\x02\u0151\u0177\x05T+\x02" + + "\u0152\u0177\x05N(\x02\u0153\u0177\x072\x02\x02\u0154\u0177\x05V,\x02" + + "\u0155\u0156\x07A\x02\x02\u0156\u015B\x05P)\x02\u0157\u0158\x07$\x02\x02" + + "\u0158\u015A\x05P)\x02\u0159\u0157\x03\x02\x02\x02\u015A\u015D\x03\x02" + + "\x02\x02\u015B\u0159\x03\x02\x02\x02\u015B\u015C\x03\x02\x02\x02\u015C" + + "\u015E\x03\x02\x02\x02\u015D\u015B\x03\x02\x02\x02\u015E\u015F\x07B\x02" + + "\x02\u015F\u0177\x03\x02\x02\x02\u0160\u0161\x07A\x02\x02\u0161\u0166" + + "\x05N(\x02\u0162\u0163\x07$\x02\x02\u0163\u0165\x05N(\x02\u0164\u0162" + + "\x03\x02\x02\x02\u0165\u0168\x03\x02\x02\x02\u0166\u0164\x03\x02\x02\x02" + + "\u0166\u0167\x03\x02\x02\x02\u0167\u0169\x03\x02\x02\x02\u0168\u0166\x03" + + "\x02\x02\x02\u0169\u016A\x07B\x02\x02\u016A\u0177\x03\x02\x02\x02\u016B" + + "\u016C\x07A\x02\x02\u016C\u0171\x05V,\x02\u016D\u016E\x07$\x02\x02\u016E" + + "\u0170\x05V,\x02\u016F\u016D\x03\x02\x02\x02\u0170\u0173\x03\x02\x02\x02" + + "\u0171\u016F\x03\x02\x02\x02\u0171\u0172\x03\x02\x02\x02\u0172\u0174\x03" + + "\x02\x02\x02\u0173\u0171\x03\x02\x02\x02\u0174\u0175\x07B\x02\x02\u0175" + + "\u0177\x03\x02\x02\x02\u0176\u014C\x03\x02\x02\x02\u0176\u014D\x03\x02" + + "\x02\x02\u0176\u0150\x03\x02\x02\x02\u0176\u0151\x03\x02\x02\x02\u0176" + + "\u0152\x03\x02\x02\x02\u0176\u0153\x03\x02\x02\x02\u0176\u0154\x03\x02" + + "\x02\x02\u0176\u0155\x03\x02\x02\x02\u0176\u0160\x03\x02\x02\x02\u0176" + + "\u016B\x03\x02\x02\x02\u01775\x03\x02\x02\x02\u0178\u0179\x07\f\x02\x02" + + "\u0179\u017A\x07\x1E\x02\x02\u017A7\x03\x02\x02\x02\u017B\u017C\x07\x12" + + "\x02\x02\u017C\u0181\x05:\x1E\x02\u017D\u017E\x07$\x02\x02\u017E\u0180" + + "\x05:\x1E\x02\u017F\u017D\x03\x02\x02\x02\u0180\u0183\x03\x02\x02\x02" + + "\u0181\u017F\x03\x02\x02\x02\u0181\u0182\x03\x02\x02\x02\u01829\x03\x02" + + "\x02\x02\u0183\u0181\x03\x02\x02\x02\u0184\u0186\x05\f\x07\x02\u0185\u0187" + + "\t\x07\x02\x02\u0186\u0185\x03\x02\x02\x02\u0186\u0187\x03\x02\x02\x02" + + "\u0187\u018A\x03\x02\x02\x02\u0188\u0189\x070\x02\x02\u0189\u018B\t\b" + + "\x02\x02\u018A\u0188\x03\x02\x02\x02\u018A\u018B\x03\x02\x02\x02\u018B" + + ";\x03\x02\x02\x02\u018C\u018D\x07\v\x02\x02\u018D\u0192\x05.\x18\x02\u018E" + + "\u018F\x07$\x02\x02\u018F\u0191\x05.\x18\x02\u0190\u018E\x03\x02\x02\x02" + + "\u0191\u0194\x03\x02\x02\x02\u0192\u0190\x03\x02\x02\x02\u0192\u0193\x03" + + "\x02\x02\x02\u0193\u019F\x03\x02\x02\x02\u0194\u0192\x03\x02\x02\x02\u0195" + + "\u0196\x07\x0E\x02\x02\u0196\u019B\x05.\x18\x02\u0197\u0198\x07$\x02\x02" + + "\u0198\u019A\x05.\x18\x02\u0199\u0197\x03\x02\x02\x02\u019A\u019D\x03" + + "\x02\x02\x02\u019B\u0199\x03\x02\x02\x02\u019B\u019C\x03\x02\x02\x02\u019C" + + "\u019F\x03\x02\x02\x02\u019D\u019B\x03\x02\x02\x02\u019E\u018C\x03\x02" + + "\x02\x02\u019E\u0195\x03\x02\x02\x02\u019F=\x03\x02\x02\x02\u01A0\u01A1" + + "\x07\x04\x02\x02\u01A1\u01A6\x05.\x18\x02\u01A2\u01A3\x07$\x02\x02\u01A3" + + "\u01A5\x05.\x18\x02\u01A4\u01A2\x03\x02\x02\x02\u01A5\u01A8\x03\x02\x02" + + "\x02\u01A6\u01A4\x03\x02\x02\x02\u01A6\u01A7\x03\x02\x02\x02\u01A7?\x03" + + "\x02\x02\x02\u01A8\u01A6\x03\x02\x02\x02\u01A9\u01AA\x07\x0F\x02\x02\u01AA" + + "\u01AF\x05B\"\x02\u01AB\u01AC\x07$\x02\x02\u01AC\u01AE\x05B\"\x02\u01AD" + + "\u01AB\x03\x02\x02\x02\u01AE\u01B1\x03\x02\x02\x02\u01AF\u01AD\x03\x02" + + "\x02\x02\u01AF\u01B0\x03\x02\x02\x02\u01B0A\x03\x02\x02\x02\u01B1\u01AF" + + "\x03\x02\x02\x02\u01B2\u01B3\x05.\x18\x02\u01B3\u01B4\x07Q\x02\x02\u01B4" + + "\u01B5\x05.\x18\x02\u01B5C\x03\x02\x02\x02\u01B6\u01B7\x07\x03\x02\x02" + + "\u01B7\u01B8\x05\x14\v\x02\u01B8\u01BA\x05V,\x02\u01B9\u01BB\x05J&\x02" + + "\u01BA\u01B9\x03\x02\x02\x02\u01BA\u01BB\x03\x02\x02\x02\u01BBE\x03\x02" + + "\x02\x02\u01BC\u01BD\x07\t\x02\x02\u01BD\u01BE\x05\x14\v\x02\u01BE\u01BF" + + "\x05V,\x02\u01BFG\x03\x02\x02\x02\u01C0\u01C1\x07\r\x02\x02\u01C1\u01C2" + + "\x05,\x17\x02\u01C2I\x03\x02\x02\x02\u01C3\u01C8\x05L\'\x02\u01C4\u01C5" + + "\x07$\x02\x02\u01C5\u01C7\x05L\'\x02\u01C6\u01C4\x03\x02\x02\x02\u01C7" + + "\u01CA\x03\x02\x02\x02\u01C8\u01C6\x03\x02\x02\x02\u01C8\u01C9\x03\x02" + + "\x02\x02\u01C9K\x03\x02\x02\x02\u01CA\u01C8\x03\x02\x02\x02\u01CB\u01CC" + + "\x050\x19\x02\u01CC\u01CD\x07#\x02\x02\u01CD\u01CE\x054\x1B\x02\u01CE" + + "M\x03\x02\x02\x02\u01CF\u01D0\t\t\x02\x02\u01D0O\x03\x02\x02\x02\u01D1" + + "\u01D4\x05R*\x02\u01D2\u01D4\x05T+\x02\u01D3\u01D1\x03\x02\x02\x02\u01D3" + + "\u01D2\x03\x02\x02\x02\u01D4Q\x03\x02\x02\x02\u01D5\u01D7\t\x02\x02\x02" + + "\u01D6\u01D5\x03\x02\x02\x02\u01D6\u01D7\x03\x02\x02\x02\u01D7\u01D8\x03" + + "\x02\x02\x02\u01D8\u01D9\x07\x1F\x02\x02\u01D9S\x03\x02\x02\x02\u01DA" + + "\u01DC\t\x02\x02\x02\u01DB\u01DA\x03\x02\x02\x02\u01DB\u01DC\x03\x02\x02" + + "\x02\u01DC\u01DD\x03\x02\x02\x02\u01DD\u01DE\x07\x1E\x02\x02\u01DEU\x03" + + "\x02\x02\x02\u01DF\u01E0\x07\x1D\x02\x02\u01E0W\x03\x02\x02\x02\u01E1" + + "\u01E2\t\n\x02\x02\u01E2Y\x03\x02\x02\x02\u01E3\u01E4\x07\x07\x02\x02" + + "\u01E4\u01E5\x05\\/\x02\u01E5[\x03\x02\x02\x02\u01E6\u01E7\x07A\x02\x02" + + "\u01E7\u01E8\x05\x04\x03\x02\u01E8\u01E9\x07B\x02\x02\u01E9]\x03\x02\x02" + + "\x02\u01EA\u01EB\x07\x11\x02\x02\u01EB\u01EF\x07`\x02\x02\u01EC\u01ED" + + "\x07\x11\x02\x02\u01ED\u01EF\x07a\x02\x02\u01EE\u01EA\x03\x02\x02\x02" + + "\u01EE\u01EC\x03\x02\x02\x02\u01EF_\x03\x02\x02\x02\u01F0\u01F1\x07\x05" + + "\x02\x02\u01F1\u01F4\x05*\x16\x02\u01F2\u01F3\x07U\x02\x02\u01F3\u01F5" + + "\x05.\x18\x02\u01F4\u01F2\x03\x02\x02\x02\u01F4\u01F5\x03\x02\x02\x02" + + "\u01F5\u01FF\x03\x02\x02\x02\u01F6\u01F7\x07V\x02\x02\u01F7\u01FC\x05" + + "b2\x02\u01F8\u01F9\x07$\x02\x02\u01F9\u01FB\x05b2\x02\u01FA\u01F8\x03" + + "\x02\x02\x02\u01FB\u01FE\x03\x02\x02\x02\u01FC\u01FA\x03\x02\x02\x02\u01FC" + + "\u01FD\x03\x02\x02\x02\u01FD\u0200\x03\x02\x02\x02\u01FE\u01FC\x03\x02" + + "\x02\x02\u01FF\u01F6\x03\x02\x02\x02\u01FF\u0200\x03\x02\x02\x02\u0200" + + "a\x03\x02\x02\x02\u0201\u0202\x05.\x18\x02\u0202\u0203\x07#\x02\x02\u0203" + + "\u0205\x03\x02\x02\x02\u0204\u0201\x03\x02\x02\x02\u0204\u0205\x03\x02" + + "\x02\x02\u0205\u0206\x03\x02\x02\x02\u0206\u0207\x05.\x18\x02\u0207c\x03" + + "\x02\x02\x026ov\x85\x91\x9A\xA2\xA6\xAE\xB0\xB5\xBC\xC1\xC8\xCE\xD6\xD8" + + "\xE2\xEC\xEF\xFB\u0103\u010B\u010F\u0118\u0122\u0126\u012C\u0133\u013D" + + "\u0145\u015B\u0166\u0171\u0176\u0181\u0186\u018A\u0192\u019B\u019E\u01A6" + + "\u01AF\u01BA\u01C8\u01D3\u01D6\u01DB\u01EE\u01F4\u01FC\u01FF\u0204"; public static __ATN: ATN; public static get _ATN(): ATN { if (!esql_parser.__ATN) { @@ -2981,6 +3221,9 @@ export class CompositeQueryContext extends QueryContext { export class SourceCommandContext extends ParserRuleContext { + public explainCommand(): ExplainCommandContext | undefined { + return this.tryGetRuleContext(0, ExplainCommandContext); + } public fromCommand(): FromCommandContext | undefined { return this.tryGetRuleContext(0, FromCommandContext); } @@ -3014,6 +3257,9 @@ export class ProcessingCommandContext extends ParserRuleContext { public evalCommand(): EvalCommandContext | undefined { return this.tryGetRuleContext(0, EvalCommandContext); } + public inlinestatsCommand(): InlinestatsCommandContext | undefined { + return this.tryGetRuleContext(0, InlinestatsCommandContext); + } public limitCommand(): LimitCommandContext | undefined { return this.tryGetRuleContext(0, LimitCommandContext); } @@ -3690,13 +3936,13 @@ export class FieldContext extends ParserRuleContext { export class FromCommandContext extends ParserRuleContext { public FROM(): TerminalNode { return this.getToken(esql_parser.FROM, 0); } - public sourceIdentifier(): SourceIdentifierContext[]; - public sourceIdentifier(i: number): SourceIdentifierContext; - public sourceIdentifier(i?: number): SourceIdentifierContext | SourceIdentifierContext[] { + public fromIdentifier(): FromIdentifierContext[]; + public fromIdentifier(i: number): FromIdentifierContext; + public fromIdentifier(i?: number): FromIdentifierContext | FromIdentifierContext[] { if (i === undefined) { - return this.getRuleContexts(SourceIdentifierContext); + return this.getRuleContexts(FromIdentifierContext); } else { - return this.getRuleContext(i, SourceIdentifierContext); + return this.getRuleContext(i, FromIdentifierContext); } } public COMMA(): TerminalNode[]; @@ -3734,13 +3980,13 @@ export class FromCommandContext extends ParserRuleContext { export class MetadataContext extends ParserRuleContext { public OPENING_BRACKET(): TerminalNode { return this.getToken(esql_parser.OPENING_BRACKET, 0); } public METADATA(): TerminalNode { return this.getToken(esql_parser.METADATA, 0); } - public sourceIdentifier(): SourceIdentifierContext[]; - public sourceIdentifier(i: number): SourceIdentifierContext; - public sourceIdentifier(i?: number): SourceIdentifierContext | SourceIdentifierContext[] { + public fromIdentifier(): FromIdentifierContext[]; + public fromIdentifier(i: number): FromIdentifierContext; + public fromIdentifier(i?: number): FromIdentifierContext | FromIdentifierContext[] { if (i === undefined) { - return this.getRuleContexts(SourceIdentifierContext); + return this.getRuleContexts(FromIdentifierContext); } else { - return this.getRuleContext(i, SourceIdentifierContext); + return this.getRuleContext(i, FromIdentifierContext); } } public CLOSING_BRACKET(): TerminalNode { return this.getToken(esql_parser.CLOSING_BRACKET, 0); } @@ -3827,6 +4073,35 @@ export class StatsCommandContext extends ParserRuleContext { } +export class InlinestatsCommandContext extends ParserRuleContext { + public INLINESTATS(): TerminalNode { return this.getToken(esql_parser.INLINESTATS, 0); } + public fields(): FieldsContext { + return this.getRuleContext(0, FieldsContext); + } + public BY(): TerminalNode | undefined { return this.tryGetToken(esql_parser.BY, 0); } + public grouping(): GroupingContext | undefined { + return this.tryGetRuleContext(0, GroupingContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return esql_parser.RULE_inlinestatsCommand; } + // @Override + public enterRule(listener: esql_parserListener): void { + if (listener.enterInlinestatsCommand) { + listener.enterInlinestatsCommand(this); + } + } + // @Override + public exitRule(listener: esql_parserListener): void { + if (listener.exitInlinestatsCommand) { + listener.exitInlinestatsCommand(this); + } + } +} + + export class GroupingContext extends ParserRuleContext { public qualifiedName(): QualifiedNameContext[]; public qualifiedName(i: number): QualifiedNameContext; @@ -3866,24 +4141,24 @@ export class GroupingContext extends ParserRuleContext { } -export class SourceIdentifierContext extends ParserRuleContext { - public SRC_UNQUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(esql_parser.SRC_UNQUOTED_IDENTIFIER, 0); } - public SRC_QUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(esql_parser.SRC_QUOTED_IDENTIFIER, 0); } +export class FromIdentifierContext extends ParserRuleContext { + public FROM_UNQUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(esql_parser.FROM_UNQUOTED_IDENTIFIER, 0); } + public QUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(esql_parser.QUOTED_IDENTIFIER, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return esql_parser.RULE_sourceIdentifier; } + public get ruleIndex(): number { return esql_parser.RULE_fromIdentifier; } // @Override public enterRule(listener: esql_parserListener): void { - if (listener.enterSourceIdentifier) { - listener.enterSourceIdentifier(this); + if (listener.enterFromIdentifier) { + listener.enterFromIdentifier(this); } } // @Override public exitRule(listener: esql_parserListener): void { - if (listener.exitSourceIdentifier) { - listener.exitSourceIdentifier(this); + if (listener.exitFromIdentifier) { + listener.exitFromIdentifier(this); } } } @@ -3928,6 +4203,45 @@ export class QualifiedNameContext extends ParserRuleContext { } +export class QualifiedNamePatternContext extends ParserRuleContext { + public identifierPattern(): IdentifierPatternContext[]; + public identifierPattern(i: number): IdentifierPatternContext; + public identifierPattern(i?: number): IdentifierPatternContext | IdentifierPatternContext[] { + if (i === undefined) { + return this.getRuleContexts(IdentifierPatternContext); + } else { + return this.getRuleContext(i, IdentifierPatternContext); + } + } + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(esql_parser.DOT); + } else { + return this.getToken(esql_parser.DOT, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return esql_parser.RULE_qualifiedNamePattern; } + // @Override + public enterRule(listener: esql_parserListener): void { + if (listener.enterQualifiedNamePattern) { + listener.enterQualifiedNamePattern(this); + } + } + // @Override + public exitRule(listener: esql_parserListener): void { + if (listener.exitQualifiedNamePattern) { + listener.exitQualifiedNamePattern(this); + } + } +} + + export class IdentifierContext extends ParserRuleContext { public UNQUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(esql_parser.UNQUOTED_IDENTIFIER, 0); } public QUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(esql_parser.QUOTED_IDENTIFIER, 0); } @@ -3951,6 +4265,29 @@ export class IdentifierContext extends ParserRuleContext { } +export class IdentifierPatternContext extends ParserRuleContext { + public PROJECT_UNQUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(esql_parser.PROJECT_UNQUOTED_IDENTIFIER, 0); } + public QUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(esql_parser.QUOTED_IDENTIFIER, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return esql_parser.RULE_identifierPattern; } + // @Override + public enterRule(listener: esql_parserListener): void { + if (listener.enterIdentifierPattern) { + listener.enterIdentifierPattern(this); + } + } + // @Override + public exitRule(listener: esql_parserListener): void { + if (listener.exitIdentifierPattern) { + listener.exitIdentifierPattern(this); + } + } +} + + export class ConstantContext extends ParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); @@ -4317,13 +4654,13 @@ export class OrderExpressionContext extends ParserRuleContext { export class KeepCommandContext extends ParserRuleContext { public KEEP(): TerminalNode | undefined { return this.tryGetToken(esql_parser.KEEP, 0); } - public sourceIdentifier(): SourceIdentifierContext[]; - public sourceIdentifier(i: number): SourceIdentifierContext; - public sourceIdentifier(i?: number): SourceIdentifierContext | SourceIdentifierContext[] { + public qualifiedNamePattern(): QualifiedNamePatternContext[]; + public qualifiedNamePattern(i: number): QualifiedNamePatternContext; + public qualifiedNamePattern(i?: number): QualifiedNamePatternContext | QualifiedNamePatternContext[] { if (i === undefined) { - return this.getRuleContexts(SourceIdentifierContext); + return this.getRuleContexts(QualifiedNamePatternContext); } else { - return this.getRuleContext(i, SourceIdentifierContext); + return this.getRuleContext(i, QualifiedNamePatternContext); } } public COMMA(): TerminalNode[]; @@ -4358,13 +4695,13 @@ export class KeepCommandContext extends ParserRuleContext { export class DropCommandContext extends ParserRuleContext { public DROP(): TerminalNode { return this.getToken(esql_parser.DROP, 0); } - public sourceIdentifier(): SourceIdentifierContext[]; - public sourceIdentifier(i: number): SourceIdentifierContext; - public sourceIdentifier(i?: number): SourceIdentifierContext | SourceIdentifierContext[] { + public qualifiedNamePattern(): QualifiedNamePatternContext[]; + public qualifiedNamePattern(i: number): QualifiedNamePatternContext; + public qualifiedNamePattern(i?: number): QualifiedNamePatternContext | QualifiedNamePatternContext[] { if (i === undefined) { - return this.getRuleContexts(SourceIdentifierContext); + return this.getRuleContexts(QualifiedNamePatternContext); } else { - return this.getRuleContext(i, SourceIdentifierContext); + return this.getRuleContext(i, QualifiedNamePatternContext); } } public COMMA(): TerminalNode[]; @@ -4437,16 +4774,16 @@ export class RenameCommandContext extends ParserRuleContext { export class RenameClauseContext extends ParserRuleContext { - public _oldName: SourceIdentifierContext; - public _newName: SourceIdentifierContext; + public _oldName: QualifiedNamePatternContext; + public _newName: QualifiedNamePatternContext; public AS(): TerminalNode { return this.getToken(esql_parser.AS, 0); } - public sourceIdentifier(): SourceIdentifierContext[]; - public sourceIdentifier(i: number): SourceIdentifierContext; - public sourceIdentifier(i?: number): SourceIdentifierContext | SourceIdentifierContext[] { + public qualifiedNamePattern(): QualifiedNamePatternContext[]; + public qualifiedNamePattern(i: number): QualifiedNamePatternContext; + public qualifiedNamePattern(i?: number): QualifiedNamePatternContext | QualifiedNamePatternContext[] { if (i === undefined) { - return this.getRuleContexts(SourceIdentifierContext); + return this.getRuleContexts(QualifiedNamePatternContext); } else { - return this.getRuleContext(i, SourceIdentifierContext); + return this.getRuleContext(i, QualifiedNamePatternContext); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { @@ -4530,8 +4867,8 @@ export class GrokCommandContext extends ParserRuleContext { export class MvExpandCommandContext extends ParserRuleContext { public MV_EXPAND(): TerminalNode { return this.getToken(esql_parser.MV_EXPAND, 0); } - public sourceIdentifier(): SourceIdentifierContext { - return this.getRuleContext(0, SourceIdentifierContext); + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); @@ -4767,6 +5104,57 @@ export class ComparisonOperatorContext extends ParserRuleContext { } +export class ExplainCommandContext extends ParserRuleContext { + public EXPLAIN(): TerminalNode { return this.getToken(esql_parser.EXPLAIN, 0); } + public subqueryExpression(): SubqueryExpressionContext { + return this.getRuleContext(0, SubqueryExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return esql_parser.RULE_explainCommand; } + // @Override + public enterRule(listener: esql_parserListener): void { + if (listener.enterExplainCommand) { + listener.enterExplainCommand(this); + } + } + // @Override + public exitRule(listener: esql_parserListener): void { + if (listener.exitExplainCommand) { + listener.exitExplainCommand(this); + } + } +} + + +export class SubqueryExpressionContext extends ParserRuleContext { + public OPENING_BRACKET(): TerminalNode { return this.getToken(esql_parser.OPENING_BRACKET, 0); } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext); + } + public CLOSING_BRACKET(): TerminalNode { return this.getToken(esql_parser.CLOSING_BRACKET, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return esql_parser.RULE_subqueryExpression; } + // @Override + public enterRule(listener: esql_parserListener): void { + if (listener.enterSubqueryExpression) { + listener.enterSubqueryExpression(this); + } + } + // @Override + public exitRule(listener: esql_parserListener): void { + if (listener.exitSubqueryExpression) { + listener.exitSubqueryExpression(this); + } + } +} + + export class ShowCommandContext extends ParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); @@ -4820,17 +5208,11 @@ export class ShowFunctionsContext extends ShowCommandContext { export class EnrichCommandContext extends ParserRuleContext { - public _policyName: SourceIdentifierContext; - public _matchField: SourceIdentifierContext; + public _policyName: FromIdentifierContext; + public _matchField: QualifiedNamePatternContext; public ENRICH(): TerminalNode { return this.getToken(esql_parser.ENRICH, 0); } - public sourceIdentifier(): SourceIdentifierContext[]; - public sourceIdentifier(i: number): SourceIdentifierContext; - public sourceIdentifier(i?: number): SourceIdentifierContext | SourceIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(SourceIdentifierContext); - } else { - return this.getRuleContext(i, SourceIdentifierContext); - } + public fromIdentifier(): FromIdentifierContext { + return this.getRuleContext(0, FromIdentifierContext); } public ON(): TerminalNode | undefined { return this.tryGetToken(esql_parser.ON, 0); } public WITH(): TerminalNode | undefined { return this.tryGetToken(esql_parser.WITH, 0); } @@ -4843,6 +5225,9 @@ export class EnrichCommandContext extends ParserRuleContext { return this.getRuleContext(i, EnrichWithClauseContext); } } + public qualifiedNamePattern(): QualifiedNamePatternContext | undefined { + return this.tryGetRuleContext(0, QualifiedNamePatternContext); + } public COMMA(): TerminalNode[]; public COMMA(i: number): TerminalNode; public COMMA(i?: number): TerminalNode | TerminalNode[] { @@ -4873,15 +5258,15 @@ export class EnrichCommandContext extends ParserRuleContext { export class EnrichWithClauseContext extends ParserRuleContext { - public _newName: SourceIdentifierContext; - public _enrichField: SourceIdentifierContext; - public sourceIdentifier(): SourceIdentifierContext[]; - public sourceIdentifier(i: number): SourceIdentifierContext; - public sourceIdentifier(i?: number): SourceIdentifierContext | SourceIdentifierContext[] { + public _newName: QualifiedNamePatternContext; + public _enrichField: QualifiedNamePatternContext; + public qualifiedNamePattern(): QualifiedNamePatternContext[]; + public qualifiedNamePattern(i: number): QualifiedNamePatternContext; + public qualifiedNamePattern(i?: number): QualifiedNamePatternContext | QualifiedNamePatternContext[] { if (i === undefined) { - return this.getRuleContexts(SourceIdentifierContext); + return this.getRuleContexts(QualifiedNamePatternContext); } else { - return this.getRuleContext(i, SourceIdentifierContext); + return this.getRuleContext(i, QualifiedNamePatternContext); } } public ASSIGN(): TerminalNode | undefined { return this.tryGetToken(esql_parser.ASSIGN, 0); } diff --git a/packages/kbn-monaco/src/esql/antlr/esql_parser_listener.ts b/packages/kbn-monaco/src/esql/antlr/esql_parser_listener.ts index ff67f81aeab09..de114f648d0b0 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_parser_listener.ts +++ b/packages/kbn-monaco/src/esql/antlr/esql_parser_listener.ts @@ -4,8 +4,6 @@ import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { ValueExpressionDefaultContext } from "./esql_parser"; -import { ComparisonContext } from "./esql_parser"; import { NullLiteralContext } from "./esql_parser"; import { QualifiedIntegerLiteralContext } from "./esql_parser"; import { DecimalLiteralContext } from "./esql_parser"; @@ -16,23 +14,25 @@ import { StringLiteralContext } from "./esql_parser"; import { NumericArrayLiteralContext } from "./esql_parser"; import { BooleanArrayLiteralContext } from "./esql_parser"; import { StringArrayLiteralContext } from "./esql_parser"; +import { SingleCommandQueryContext } from "./esql_parser"; +import { CompositeQueryContext } from "./esql_parser"; +import { OperatorExpressionDefaultContext } from "./esql_parser"; +import { ArithmeticUnaryContext } from "./esql_parser"; +import { ArithmeticBinaryContext } from "./esql_parser"; +import { ValueExpressionDefaultContext } from "./esql_parser"; +import { ComparisonContext } from "./esql_parser"; import { ShowInfoContext } from "./esql_parser"; import { ShowFunctionsContext } from "./esql_parser"; import { ConstantDefaultContext } from "./esql_parser"; import { DereferenceContext } from "./esql_parser"; import { FunctionContext } from "./esql_parser"; import { ParenthesizedExpressionContext } from "./esql_parser"; -import { SingleCommandQueryContext } from "./esql_parser"; -import { CompositeQueryContext } from "./esql_parser"; import { LogicalNotContext } from "./esql_parser"; import { BooleanDefaultContext } from "./esql_parser"; import { RegexExpressionContext } from "./esql_parser"; import { LogicalBinaryContext } from "./esql_parser"; import { LogicalInContext } from "./esql_parser"; import { IsNullContext } from "./esql_parser"; -import { OperatorExpressionDefaultContext } from "./esql_parser"; -import { ArithmeticUnaryContext } from "./esql_parser"; -import { ArithmeticBinaryContext } from "./esql_parser"; import { SingleStatementContext } from "./esql_parser"; import { QueryContext } from "./esql_parser"; import { SourceCommandContext } from "./esql_parser"; @@ -51,10 +51,13 @@ import { FromCommandContext } from "./esql_parser"; import { MetadataContext } from "./esql_parser"; import { EvalCommandContext } from "./esql_parser"; import { StatsCommandContext } from "./esql_parser"; +import { InlinestatsCommandContext } from "./esql_parser"; import { GroupingContext } from "./esql_parser"; -import { SourceIdentifierContext } from "./esql_parser"; +import { FromIdentifierContext } from "./esql_parser"; import { QualifiedNameContext } from "./esql_parser"; +import { QualifiedNamePatternContext } from "./esql_parser"; import { IdentifierContext } from "./esql_parser"; +import { IdentifierPatternContext } from "./esql_parser"; import { ConstantContext } from "./esql_parser"; import { LimitCommandContext } from "./esql_parser"; import { SortCommandContext } from "./esql_parser"; @@ -74,6 +77,8 @@ import { DecimalValueContext } from "./esql_parser"; import { IntegerValueContext } from "./esql_parser"; import { StringContext } from "./esql_parser"; import { ComparisonOperatorContext } from "./esql_parser"; +import { ExplainCommandContext } from "./esql_parser"; +import { SubqueryExpressionContext } from "./esql_parser"; import { ShowCommandContext } from "./esql_parser"; import { EnrichCommandContext } from "./esql_parser"; import { EnrichWithClauseContext } from "./esql_parser"; @@ -84,32 +89,6 @@ import { EnrichWithClauseContext } from "./esql_parser"; * `esql_parser`. */ export interface esql_parserListener extends ParseTreeListener { - /** - * Enter a parse tree produced by the `valueExpressionDefault` - * labeled alternative in `esql_parser.valueExpression`. - * @param ctx the parse tree - */ - enterValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; - /** - * Exit a parse tree produced by the `valueExpressionDefault` - * labeled alternative in `esql_parser.valueExpression`. - * @param ctx the parse tree - */ - exitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; - - /** - * Enter a parse tree produced by the `comparison` - * labeled alternative in `esql_parser.valueExpression`. - * @param ctx the parse tree - */ - enterComparison?: (ctx: ComparisonContext) => void; - /** - * Exit a parse tree produced by the `comparison` - * labeled alternative in `esql_parser.valueExpression`. - * @param ctx the parse tree - */ - exitComparison?: (ctx: ComparisonContext) => void; - /** * Enter a parse tree produced by the `nullLiteral` * labeled alternative in `esql_parser.constant`. @@ -240,6 +219,97 @@ export interface esql_parserListener extends ParseTreeListener { */ exitStringArrayLiteral?: (ctx: StringArrayLiteralContext) => void; + /** + * Enter a parse tree produced by the `singleCommandQuery` + * labeled alternative in `esql_parser.query`. + * @param ctx the parse tree + */ + enterSingleCommandQuery?: (ctx: SingleCommandQueryContext) => void; + /** + * Exit a parse tree produced by the `singleCommandQuery` + * labeled alternative in `esql_parser.query`. + * @param ctx the parse tree + */ + exitSingleCommandQuery?: (ctx: SingleCommandQueryContext) => void; + + /** + * Enter a parse tree produced by the `compositeQuery` + * labeled alternative in `esql_parser.query`. + * @param ctx the parse tree + */ + enterCompositeQuery?: (ctx: CompositeQueryContext) => void; + /** + * Exit a parse tree produced by the `compositeQuery` + * labeled alternative in `esql_parser.query`. + * @param ctx the parse tree + */ + exitCompositeQuery?: (ctx: CompositeQueryContext) => void; + + /** + * Enter a parse tree produced by the `operatorExpressionDefault` + * labeled alternative in `esql_parser.operatorExpression`. + * @param ctx the parse tree + */ + enterOperatorExpressionDefault?: (ctx: OperatorExpressionDefaultContext) => void; + /** + * Exit a parse tree produced by the `operatorExpressionDefault` + * labeled alternative in `esql_parser.operatorExpression`. + * @param ctx the parse tree + */ + exitOperatorExpressionDefault?: (ctx: OperatorExpressionDefaultContext) => void; + + /** + * Enter a parse tree produced by the `arithmeticUnary` + * labeled alternative in `esql_parser.operatorExpression`. + * @param ctx the parse tree + */ + enterArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; + /** + * Exit a parse tree produced by the `arithmeticUnary` + * labeled alternative in `esql_parser.operatorExpression`. + * @param ctx the parse tree + */ + exitArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; + + /** + * Enter a parse tree produced by the `arithmeticBinary` + * labeled alternative in `esql_parser.operatorExpression`. + * @param ctx the parse tree + */ + enterArithmeticBinary?: (ctx: ArithmeticBinaryContext) => void; + /** + * Exit a parse tree produced by the `arithmeticBinary` + * labeled alternative in `esql_parser.operatorExpression`. + * @param ctx the parse tree + */ + exitArithmeticBinary?: (ctx: ArithmeticBinaryContext) => void; + + /** + * Enter a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `esql_parser.valueExpression`. + * @param ctx the parse tree + */ + enterValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; + /** + * Exit a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `esql_parser.valueExpression`. + * @param ctx the parse tree + */ + exitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; + + /** + * Enter a parse tree produced by the `comparison` + * labeled alternative in `esql_parser.valueExpression`. + * @param ctx the parse tree + */ + enterComparison?: (ctx: ComparisonContext) => void; + /** + * Exit a parse tree produced by the `comparison` + * labeled alternative in `esql_parser.valueExpression`. + * @param ctx the parse tree + */ + exitComparison?: (ctx: ComparisonContext) => void; + /** * Enter a parse tree produced by the `showInfo` * labeled alternative in `esql_parser.showCommand`. @@ -318,32 +388,6 @@ export interface esql_parserListener extends ParseTreeListener { */ exitParenthesizedExpression?: (ctx: ParenthesizedExpressionContext) => void; - /** - * Enter a parse tree produced by the `singleCommandQuery` - * labeled alternative in `esql_parser.query`. - * @param ctx the parse tree - */ - enterSingleCommandQuery?: (ctx: SingleCommandQueryContext) => void; - /** - * Exit a parse tree produced by the `singleCommandQuery` - * labeled alternative in `esql_parser.query`. - * @param ctx the parse tree - */ - exitSingleCommandQuery?: (ctx: SingleCommandQueryContext) => void; - - /** - * Enter a parse tree produced by the `compositeQuery` - * labeled alternative in `esql_parser.query`. - * @param ctx the parse tree - */ - enterCompositeQuery?: (ctx: CompositeQueryContext) => void; - /** - * Exit a parse tree produced by the `compositeQuery` - * labeled alternative in `esql_parser.query`. - * @param ctx the parse tree - */ - exitCompositeQuery?: (ctx: CompositeQueryContext) => void; - /** * Enter a parse tree produced by the `logicalNot` * labeled alternative in `esql_parser.booleanExpression`. @@ -422,45 +466,6 @@ export interface esql_parserListener extends ParseTreeListener { */ exitIsNull?: (ctx: IsNullContext) => void; - /** - * Enter a parse tree produced by the `operatorExpressionDefault` - * labeled alternative in `esql_parser.operatorExpression`. - * @param ctx the parse tree - */ - enterOperatorExpressionDefault?: (ctx: OperatorExpressionDefaultContext) => void; - /** - * Exit a parse tree produced by the `operatorExpressionDefault` - * labeled alternative in `esql_parser.operatorExpression`. - * @param ctx the parse tree - */ - exitOperatorExpressionDefault?: (ctx: OperatorExpressionDefaultContext) => void; - - /** - * Enter a parse tree produced by the `arithmeticUnary` - * labeled alternative in `esql_parser.operatorExpression`. - * @param ctx the parse tree - */ - enterArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; - /** - * Exit a parse tree produced by the `arithmeticUnary` - * labeled alternative in `esql_parser.operatorExpression`. - * @param ctx the parse tree - */ - exitArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; - - /** - * Enter a parse tree produced by the `arithmeticBinary` - * labeled alternative in `esql_parser.operatorExpression`. - * @param ctx the parse tree - */ - enterArithmeticBinary?: (ctx: ArithmeticBinaryContext) => void; - /** - * Exit a parse tree produced by the `arithmeticBinary` - * labeled alternative in `esql_parser.operatorExpression`. - * @param ctx the parse tree - */ - exitArithmeticBinary?: (ctx: ArithmeticBinaryContext) => void; - /** * Enter a parse tree produced by `esql_parser.singleStatement`. * @param ctx the parse tree @@ -659,6 +664,17 @@ export interface esql_parserListener extends ParseTreeListener { */ exitStatsCommand?: (ctx: StatsCommandContext) => void; + /** + * Enter a parse tree produced by `esql_parser.inlinestatsCommand`. + * @param ctx the parse tree + */ + enterInlinestatsCommand?: (ctx: InlinestatsCommandContext) => void; + /** + * Exit a parse tree produced by `esql_parser.inlinestatsCommand`. + * @param ctx the parse tree + */ + exitInlinestatsCommand?: (ctx: InlinestatsCommandContext) => void; + /** * Enter a parse tree produced by `esql_parser.grouping`. * @param ctx the parse tree @@ -671,15 +687,15 @@ export interface esql_parserListener extends ParseTreeListener { exitGrouping?: (ctx: GroupingContext) => void; /** - * Enter a parse tree produced by `esql_parser.sourceIdentifier`. + * Enter a parse tree produced by `esql_parser.fromIdentifier`. * @param ctx the parse tree */ - enterSourceIdentifier?: (ctx: SourceIdentifierContext) => void; + enterFromIdentifier?: (ctx: FromIdentifierContext) => void; /** - * Exit a parse tree produced by `esql_parser.sourceIdentifier`. + * Exit a parse tree produced by `esql_parser.fromIdentifier`. * @param ctx the parse tree */ - exitSourceIdentifier?: (ctx: SourceIdentifierContext) => void; + exitFromIdentifier?: (ctx: FromIdentifierContext) => void; /** * Enter a parse tree produced by `esql_parser.qualifiedName`. @@ -692,6 +708,17 @@ export interface esql_parserListener extends ParseTreeListener { */ exitQualifiedName?: (ctx: QualifiedNameContext) => void; + /** + * Enter a parse tree produced by `esql_parser.qualifiedNamePattern`. + * @param ctx the parse tree + */ + enterQualifiedNamePattern?: (ctx: QualifiedNamePatternContext) => void; + /** + * Exit a parse tree produced by `esql_parser.qualifiedNamePattern`. + * @param ctx the parse tree + */ + exitQualifiedNamePattern?: (ctx: QualifiedNamePatternContext) => void; + /** * Enter a parse tree produced by `esql_parser.identifier`. * @param ctx the parse tree @@ -703,6 +730,17 @@ export interface esql_parserListener extends ParseTreeListener { */ exitIdentifier?: (ctx: IdentifierContext) => void; + /** + * Enter a parse tree produced by `esql_parser.identifierPattern`. + * @param ctx the parse tree + */ + enterIdentifierPattern?: (ctx: IdentifierPatternContext) => void; + /** + * Exit a parse tree produced by `esql_parser.identifierPattern`. + * @param ctx the parse tree + */ + exitIdentifierPattern?: (ctx: IdentifierPatternContext) => void; + /** * Enter a parse tree produced by `esql_parser.constant`. * @param ctx the parse tree @@ -912,6 +950,28 @@ export interface esql_parserListener extends ParseTreeListener { */ exitComparisonOperator?: (ctx: ComparisonOperatorContext) => void; + /** + * Enter a parse tree produced by `esql_parser.explainCommand`. + * @param ctx the parse tree + */ + enterExplainCommand?: (ctx: ExplainCommandContext) => void; + /** + * Exit a parse tree produced by `esql_parser.explainCommand`. + * @param ctx the parse tree + */ + exitExplainCommand?: (ctx: ExplainCommandContext) => void; + + /** + * Enter a parse tree produced by `esql_parser.subqueryExpression`. + * @param ctx the parse tree + */ + enterSubqueryExpression?: (ctx: SubqueryExpressionContext) => void; + /** + * Exit a parse tree produced by `esql_parser.subqueryExpression`. + * @param ctx the parse tree + */ + exitSubqueryExpression?: (ctx: SubqueryExpressionContext) => void; + /** * Enter a parse tree produced by `esql_parser.showCommand`. * @param ctx the parse tree diff --git a/packages/kbn-monaco/src/esql/lib/ast/ast_helpers.ts b/packages/kbn-monaco/src/esql/lib/ast/ast_helpers.ts index d6e8ea7d0a038..1a7dc44160872 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/ast_helpers.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/ast_helpers.ts @@ -162,23 +162,24 @@ export function computeLocationExtends(fn: ESQLFunction) { // Note: do not import esql_parser or bundle size will grow up by ~500 kb function getQuotedText(ctx: ParserRuleContext) { - return ( - ctx.tryGetToken(73 /* esql_parser.SRC_QUOTED_IDENTIFIER*/, 0) || - ctx.tryGetToken(64 /* esql_parser.QUOTED_IDENTIFIER */, 0) - ); + return [66 /* esql_parser.QUOTED_IDENTIFIER */, 72 /* esql_parser.FROM_QUOTED_IDENTIFIER */] + .map((keyCode) => ctx.tryGetToken(keyCode, 0)) + .filter(nonNullable)[0]; } function getUnquotedText(ctx: ParserRuleContext) { - return ( - ctx.tryGetToken(72 /* esql_parser.SRC_UNQUOTED_IDENTIFIER */, 0) || - ctx.tryGetToken(63 /* esql_parser.UNQUOTED_IDENTIFIER */, 0) - ); + return [ + 65 /* esql_parser.UNQUOTED_IDENTIFIER */, 71 /* esql_parser.FROM_UNQUOTED_IDENTIFIER */, + 76 /* esql_parser.PROJECT_UNQUOTED_IDENTIFIER */, + ] + .map((keyCode) => ctx.tryGetToken(keyCode, 0)) + .filter(nonNullable)[0]; } const TICKS_REGEX = /(`)/g; function isQuoted(text: string | undefined) { - return text && TICKS_REGEX.test(text); + return text && /^(`)/.test(text); } export function sanifyIdentifierString(ctx: ParserRuleContext) { @@ -189,6 +190,10 @@ export function sanifyIdentifierString(ctx: ParserRuleContext) { ); } +export function wrapIdentifierAsArray(identifierCtx: T | T[]): T[] { + return Array.isArray(identifierCtx) ? identifierCtx : [identifierCtx]; +} + export function createSource( ctx: ParserRuleContext, type: 'index' | 'policy' = 'index' @@ -219,9 +224,9 @@ export function createColumn(ctx: ParserRuleContext): ESQLColumn { const text = sanifyIdentifierString(ctx); const hasQuotes = Boolean(getQuotedText(ctx) || isQuoted(ctx.text)); return { - type: 'column', + type: 'column' as const, name: text, - text, + text: ctx.text, location: getPosition(ctx.start, ctx.stop), incomplete: Boolean(ctx.exception || text === ''), quoted: hasQuotes, diff --git a/packages/kbn-monaco/src/esql/lib/ast/ast_walker.ts b/packages/kbn-monaco/src/esql/lib/ast/ast_walker.ts index 677bc4694e05a..3916dc68d1ece 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/ast_walker.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/ast_walker.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import type { ParserRuleContext } from 'antlr4ts/ParserRuleContext'; import { ArithmeticBinaryContext, ArithmeticUnaryContext, @@ -36,8 +37,8 @@ import { LogicalBinaryContext, LogicalInContext, LogicalNotContext, - type MetadataContext, - type MvExpandCommandContext, + MetadataContext, + MvExpandCommandContext, NullLiteralContext, NumericArrayLiteralContext, NumericValueContext, @@ -49,13 +50,13 @@ import { QualifiedIntegerLiteralContext, RegexBooleanExpressionContext, type RenameClauseContext, - SourceIdentifierContext, type StatsCommandContext, StringArrayLiteralContext, StringContext, StringLiteralContext, type ValueExpressionContext, ValueExpressionDefaultContext, + FromIdentifierContext, } from '../../antlr/esql_parser'; import { createSource, @@ -71,6 +72,7 @@ import { sanifyIdentifierString, computeLocationExtends, createColumnStar, + wrapIdentifierAsArray, } from './ast_helpers'; import { getPosition } from './ast_position_utils'; import type { @@ -82,15 +84,22 @@ import type { } from './types'; export function collectAllSourceIdentifiers(ctx: FromCommandContext): ESQLAstItem[] { - return ctx.getRuleContexts(SourceIdentifierContext).map((sourceCtx) => createSource(sourceCtx)); + return ctx.getRuleContexts(FromIdentifierContext).map((sourceCtx) => createSource(sourceCtx)); } -export function collectAllColumnIdentifiers( +function extractIdentifiers( ctx: KeepCommandContext | DropCommandContext | MvExpandCommandContext | MetadataContext -): ESQLAstItem[] { - const identifiers = ( - Array.isArray(ctx.sourceIdentifier()) ? ctx.sourceIdentifier() : [ctx.sourceIdentifier()] - ) as SourceIdentifierContext[]; +) { + if (ctx instanceof MetadataContext) { + return wrapIdentifierAsArray(ctx.fromIdentifier()); + } + if (ctx instanceof MvExpandCommandContext) { + return wrapIdentifierAsArray(ctx.qualifiedName()); + } + return wrapIdentifierAsArray(ctx.qualifiedNamePattern()); +} + +function makeColumnsOutOfIdentifiers(identifiers: ParserRuleContext[]) { const args: ESQLColumn[] = identifiers .filter((child) => child.text) @@ -100,6 +109,13 @@ export function collectAllColumnIdentifiers( return args; } +export function collectAllColumnIdentifiers( + ctx: KeepCommandContext | DropCommandContext | MvExpandCommandContext | MetadataContext +): ESQLAstItem[] { + const identifiers = extractIdentifiers(ctx); + return makeColumnsOutOfIdentifiers(identifiers); +} + export function getPolicyName(ctx: EnrichCommandContext) { if (!ctx._policyName) { return []; @@ -111,7 +127,7 @@ export function getMatchField(ctx: EnrichCommandContext) { if (!ctx._matchField) { return []; } - const identifier = ctx.sourceIdentifier(1); + const identifier = ctx.qualifiedNamePattern(); if (identifier) { const fn = createOption(ctx.ON()!.text.toLowerCase(), ctx); if (identifier.text) { diff --git a/packages/kbn-monaco/src/esql/lib/ast/definitions/commands.ts b/packages/kbn-monaco/src/esql/lib/ast/definitions/commands.ts index 4404bf00b5fad..e727cffd83a1e 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/definitions/commands.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/definitions/commands.ts @@ -56,7 +56,7 @@ export const commandDefinitions: CommandDefinition[] = [ options: [], signature: { multipleParams: false, - params: [{ name: 'functions', type: 'string', values: ['functions', 'info'] }], + params: [{ name: 'functions', type: 'function' }], }, }, { diff --git a/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts b/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts index 6cabc530883aa..820ab04fea3bf 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts @@ -37,6 +37,19 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ }, ], }, + { + name: 'ceil', + description: i18n.translate('monaco.esql.definitions.ceilDoc', { + defaultMessage: 'Round a number up to the nearest integer.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index | eval ceil_value = ceil(field)`], + }, + ], + }, { name: 'log10', description: i18n.translate('monaco.esql.definitions.log10Doc', { @@ -209,6 +222,19 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ }, ], }, + { + name: 'to_cartesianpoint', + description: i18n.translate('monaco.esql.definitions.toCartesianPointDoc', { + defaultMessage: 'Converts an input value to a `point` value.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'cartesian_point', + examples: [`from index | EVAL point = to_cartesianpoint(field)`], + }, + ], + }, { name: 'to_datetime', alias: ['to_dt'], @@ -645,6 +671,22 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ }, ], }, + { + name: 'least', + description: i18n.translate('monaco.esql.definitions.leastDoc', { + defaultMessage: 'Returns the minimum value from many columns.', + }), + signatures: [ + { + params: [ + { name: 'first', type: 'number' }, + { name: 'rest', type: 'number' }, + ], + returnType: 'number', + examples: ['from index | eval l = least(a, b)'], + }, + ], + }, { name: 'left', description: i18n.translate('monaco.esql.definitions.leftDoc', { diff --git a/packages/kbn-monaco/src/esql/lib/ast/shared/variables.ts b/packages/kbn-monaco/src/esql/lib/ast/shared/variables.ts index 3f93ce50b71c3..71fd4ce8176a2 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/shared/variables.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/shared/variables.ts @@ -136,7 +136,7 @@ export function collectVariables( // just save the entire expression as variable string const expressionType = 'number'; addToVariableOccurrencies(variables, { - name: expressionOperation.text, + name: expressionOperation.text.replace(/`/g, ''), type: expressionType, location: expressionOperation.location, }); diff --git a/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts b/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts index 0df20ac7d88f4..246b867397420 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts @@ -226,18 +226,18 @@ describe('validation logic', () => { ['eval', 'stats', 'rename', 'limit', 'keep', 'drop', 'mv_expand', 'dissect', 'grok'].map( (command) => testErrorsAndWarnings(command, [ - `SyntaxError: expected {FROM, ROW, SHOW} but found "${command}"`, + `SyntaxError: expected {EXPLAIN, FROM, ROW, SHOW} but found "${command}"`, ]) ); }); describe('from', () => { - testErrorsAndWarnings('f', ['SyntaxError: expected {FROM, ROW, SHOW} but found "f"']); + testErrorsAndWarnings('f', ['SyntaxError: expected {EXPLAIN, FROM, ROW, SHOW} but found "f"']); testErrorsAndWarnings(`from `, [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, FROM_UNQUOTED_IDENTIFIER} at ''", ]); testErrorsAndWarnings(`from index,`, [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, FROM_UNQUOTED_IDENTIFIER} at ''", ]); testErrorsAndWarnings(`from assignment = 1`, [ 'SyntaxError: expected {, PIPE, COMMA, OPENING_BRACKET} but found "="', @@ -495,7 +495,10 @@ describe('validation logic', () => { testErrorsAndWarnings('show functions', []); testErrorsAndWarnings('show info', []); testErrorsAndWarnings('show functions blah', [ - "SyntaxError: extraneous input 'blah' expecting ", + "SyntaxError: token recognition error at: 'b'", + "SyntaxError: token recognition error at: 'l'", + "SyntaxError: token recognition error at: 'a'", + "SyntaxError: token recognition error at: 'h'", ]); }); @@ -521,18 +524,25 @@ describe('validation logic', () => { describe('keep', () => { testErrorsAndWarnings('from index | keep ', [ - `SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''`, + `SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''`, ]); testErrorsAndWarnings('from index | keep stringField, numberField, dateField', []); testErrorsAndWarnings('from index | keep `stringField`, `numberField`, `dateField`', []); - testErrorsAndWarnings('from index | keep 4.5', ['Unknown column [4.5]']); + testErrorsAndWarnings('from index | keep 4.5', [ + "SyntaxError: token recognition error at: '4'", + "SyntaxError: token recognition error at: '5'", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at '.'", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", + 'Unknown column [.]', + ]); + testErrorsAndWarnings('from index | keep `4.5`', ['Unknown column [4.5]']); testErrorsAndWarnings('from index | keep missingField, numberField, dateField', [ 'Unknown column [missingField]', ]); testErrorsAndWarnings('from index | keep `any#Char$ field`', []); testErrorsAndWarnings( 'from index | project ', - [`SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''`], + [`SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''`], ['PROJECT command is no longer supported, please use KEEP instead'] ); testErrorsAndWarnings( @@ -569,10 +579,16 @@ describe('validation logic', () => { describe('drop', () => { testErrorsAndWarnings('from index | drop ', [ - `SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''`, + `SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''`, ]); testErrorsAndWarnings('from index | drop stringField, numberField, dateField', []); - testErrorsAndWarnings('from index | drop 4.5', ['Unknown column [4.5]']); + testErrorsAndWarnings('from index | drop 4.5', [ + "SyntaxError: token recognition error at: '4'", + "SyntaxError: token recognition error at: '5'", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at '.'", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", + 'Unknown column [.]', + ]); testErrorsAndWarnings('from index | drop missingField, numberField, dateField', [ 'Unknown column [missingField]', ]); @@ -603,7 +619,7 @@ describe('validation logic', () => { describe('mv_expand', () => { testErrorsAndWarnings('from a | mv_expand ', [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER} at ''", ]); testErrorsAndWarnings('from a | mv_expand stringField', [ 'Mv_expand only supports list type values, found [stringField] of type string', @@ -612,7 +628,8 @@ describe('validation logic', () => { testErrorsAndWarnings(`from a | mv_expand listField`, []); testErrorsAndWarnings('from a | mv_expand listField, b', [ - 'SyntaxError: expected {, PIPE} but found ","', + "SyntaxError: token recognition error at: ','", + "SyntaxError: extraneous input 'b' expecting ", ]); testErrorsAndWarnings('row a = "a" | mv_expand a', [ @@ -623,20 +640,20 @@ describe('validation logic', () => { describe('rename', () => { testErrorsAndWarnings('from a | rename', [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", ]); testErrorsAndWarnings('from a | rename stringField', [ - 'SyntaxError: expected {AS} but found ""', + 'SyntaxError: expected {DOT, AS} but found ""', ]); testErrorsAndWarnings('from a | rename a', [ - 'SyntaxError: expected {AS} but found ""', + 'SyntaxError: expected {DOT, AS} but found ""', 'Unknown column [a]', ]); testErrorsAndWarnings('from a | rename stringField as', [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", ]); testErrorsAndWarnings('from a | rename missingField as', [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", 'Unknown column [missingField]', ]); testErrorsAndWarnings('from a | rename stringField as b', []); @@ -644,7 +661,9 @@ describe('validation logic', () => { testErrorsAndWarnings('from a | rename stringField As b', []); testErrorsAndWarnings('from a | rename stringField As b, b AS c', []); testErrorsAndWarnings('from a | rename fn() as a', [ - 'Unknown column [fn()]', + "SyntaxError: token recognition error at: '('", + "SyntaxError: token recognition error at: ')'", + 'Unknown column [fn]', 'Unknown column [a]', ]); testErrorsAndWarnings('from a | eval numberField + 1 | rename `numberField + 1` as a', []); @@ -653,7 +672,7 @@ describe('validation logic', () => { [] ); testErrorsAndWarnings('from a | eval numberField + 1 | rename `numberField + 1` as ', [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", ]); testErrorsAndWarnings('from a | rename s* as strings', [ 'Using wildcards (*) in rename is not allowed [s*]', @@ -1129,6 +1148,14 @@ describe('validation logic', () => { 'SyntaxError: expected {, PIPE, COMMA, DOT} but found "("', 'Unknown column [percentile]', ]); + testErrorsAndWarnings('from a | stats count(`numberField`)', []); + + for (const subCommand of ['keep', 'drop', 'eval']) { + testErrorsAndWarnings( + `from a | stats count(\`numberField\`) | ${subCommand} \`count(\`\`numberField\`\`)\` `, + [] + ); + } testErrorsAndWarnings( 'from a | stats avg(numberField) by stringField, percentile(numberField) by ipField', @@ -1312,22 +1339,22 @@ describe('validation logic', () => { describe('enrich', () => { testErrorsAndWarnings(`from a | enrich`, [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, FROM_UNQUOTED_IDENTIFIER} at ''", ]); testErrorsAndWarnings(`from a | enrich policy `, []); testErrorsAndWarnings(`from a | enrich missing-policy `, ['Unknown policy [missing-policy]']); testErrorsAndWarnings(`from a | enrich policy on `, [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", ]); testErrorsAndWarnings(`from a | enrich policy on b `, ['Unknown column [b]']); testErrorsAndWarnings(`from a | enrich policy on numberField with `, [ - 'SyntaxError: expected {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} but found ""', + 'SyntaxError: expected {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} but found ""', ]); testErrorsAndWarnings(`from a | enrich policy on numberField with var0 `, [ 'Unknown column [var0]', ]); testErrorsAndWarnings(`from a | enrich policy on numberField with var0 = `, [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", 'Unknown column [var0]', ]); testErrorsAndWarnings(`from a | enrich policy on numberField with var0 = c `, [ @@ -1339,8 +1366,8 @@ describe('validation logic', () => { // `Unknown column [stringField]`, // ]); testErrorsAndWarnings(`from a | enrich policy on numberField with var0 = , `, [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ','", - 'SyntaxError: expected {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} but found ""', + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ','", + 'SyntaxError: expected {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} but found ""', 'Unknown column [var0]', ]); testErrorsAndWarnings(`from a | enrich policy on numberField with var0 = otherField, var1 `, [ @@ -1352,7 +1379,7 @@ describe('validation logic', () => { [] ); testErrorsAndWarnings(`from a | enrich policy on numberField with var0 = otherField, var1 = `, [ - "SyntaxError: missing {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} at ''", + "SyntaxError: missing {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} at ''", 'Unknown column [var1]', ]); @@ -1361,7 +1388,7 @@ describe('validation logic', () => { [] ); testErrorsAndWarnings(`from a | enrich policy with `, [ - 'SyntaxError: expected {SRC_UNQUOTED_IDENTIFIER, SRC_QUOTED_IDENTIFIER} but found ""', + 'SyntaxError: expected {QUOTED_IDENTIFIER, PROJECT_UNQUOTED_IDENTIFIER} but found ""', ]); testErrorsAndWarnings(`from a | enrich policy with otherField`, []); testErrorsAndWarnings(`from a | enrich policy | eval otherField`, []); diff --git a/packages/kbn-plugin-helpers/src/tasks/brotli_compress_bundles.ts b/packages/kbn-plugin-helpers/src/tasks/brotli_compress_bundles.ts index f04d707b279e9..ef03cb86c7aa0 100644 --- a/packages/kbn-plugin-helpers/src/tasks/brotli_compress_bundles.ts +++ b/packages/kbn-plugin-helpers/src/tasks/brotli_compress_bundles.ts @@ -20,7 +20,11 @@ import { TaskContext } from '../task_context'; const asyncPipeline = promisify(pipeline); -export async function brotliCompressBundles({ buildDir, log }: TaskContext) { +export async function brotliCompressBundles({ buildDir, log, plugin }: TaskContext) { + if (!plugin.manifest.ui) { + return; + } + const compressDir = Path.resolve(buildDir, 'target/public'); log.info( diff --git a/packages/kbn-search-connectors/components/configuration/connector_configuration_field.tsx b/packages/kbn-search-connectors/components/configuration/connector_configuration_field.tsx index 01950617511a4..cb9108a783fdb 100644 --- a/packages/kbn-search-connectors/components/configuration/connector_configuration_field.tsx +++ b/packages/kbn-search-connectors/components/configuration/connector_configuration_field.tsx @@ -41,6 +41,109 @@ interface ConnectorConfigurationFieldProps { setConfigValue: (value: number | string | boolean | null) => void; } +interface ConfigInputFieldProps { + configEntry: ConfigEntryView; + isLoading: boolean; + validateAndSetConfigValue: (value: string) => void; +} +export const ConfigInputField: React.FC = ({ + configEntry, + isLoading, + validateAndSetConfigValue, +}) => { + const { isValid, required, placeholder, value } = configEntry; + const [innerValue, setInnerValue] = useState(value); + return ( + { + setInnerValue(event.target.value); + validateAndSetConfigValue(event.target.value); + }} + placeholder={placeholder} + /> + ); +}; + +export const ConfigInputTextArea: React.FC = ({ + isLoading, + configEntry, + validateAndSetConfigValue, +}) => { + const { isValid, required, placeholder, value } = configEntry; + const [innerValue, setInnerValue] = useState(value); + return ( + { + setInnerValue(event.target.value); + validateAndSetConfigValue(event.target.value); + }} + placeholder={placeholder} + /> + ); +}; + +export const ConfigSensitiveTextArea: React.FC = ({ + isLoading, + configEntry, + validateAndSetConfigValue, +}) => { + const { key, label, tooltip } = configEntry; + return ( + + +

{label}

+
+ + + + + ) : ( +

{label}

+ ) + } + > + +
+ ); +}; +export const ConfigInputPassword: React.FC = ({ + isLoading, + configEntry, + validateAndSetConfigValue, +}) => { + const { required, value } = configEntry; + const [innerValue, setInnerValue] = useState(value); + return ( + { + setInnerValue(event.target.value); + validateAndSetConfigValue(event.target.value); + }} + /> + ); +}; + export const ConnectorConfigurationField: React.FC = ({ configEntry, isLoading, @@ -53,18 +156,7 @@ export const ConnectorConfigurationField: React.FC { - validateAndSetConfigValue(event.target.value); - }} - placeholder={placeholder} + ); case DisplayType.TEXTAREA: const textarea = ( - { - validateAndSetConfigValue(event.target.value); - }} + ); return sensitive ? ( - - -

{label}

-
- - - - - ) : ( -

{label}

- ) - } - > - {textarea} -
+ ) : ( textarea ); @@ -210,24 +281,17 @@ export const ConnectorConfigurationField: React.FC { - validateAndSetConfigValue(event.target.value); - }} + ) : ( - { - validateAndSetConfigValue(event.target.value); - }} + ); } diff --git a/packages/kbn-search-connectors/components/configuration/connector_configuration_form.tsx b/packages/kbn-search-connectors/components/configuration/connector_configuration_form.tsx index af258a807788d..ca1a2c4e01b93 100644 --- a/packages/kbn-search-connectors/components/configuration/connector_configuration_form.tsx +++ b/packages/kbn-search-connectors/components/configuration/connector_configuration_form.tsx @@ -137,7 +137,9 @@ export const ConnectorConfigurationForm: React.FC = setConfigEntry={(key, value) => { setConfigView({ ...configView, - advancedConfigurations: { ...configView.advancedConfigurations, [key]: value }, + advancedConfigurations: configView.advancedConfigurations.map((config) => + config.key === key ? { ...config, value } : config + ), }); }} /> diff --git a/packages/kbn-search-errors/index.ts b/packages/kbn-search-errors/index.ts index 0bc9893ec04a9..4847085cb5536 100644 --- a/packages/kbn-search-errors/index.ts +++ b/packages/kbn-search-errors/index.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ +export { createEsError } from './src/create_es_error'; export { isEsError, EsError } from './src/es_error'; -export { isPainlessError, PainlessError } from './src/painless_error'; export { renderSearchError } from './src/render_search_error'; export type { IEsError } from './src/types'; diff --git a/packages/kbn-search-errors/src/__snapshots__/es_error.test.tsx.snap b/packages/kbn-search-errors/src/__snapshots__/es_error.test.tsx.snap new file mode 100644 index 0000000000000..68e53db73a99a --- /dev/null +++ b/packages/kbn-search-errors/src/__snapshots__/es_error.test.tsx.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`EsError should render error message 1`] = ` +
+
+    
+      The supplied interval [2q] could not be parsed as a calendar interval.
+    
+  
+
+`; diff --git a/packages/kbn-search-errors/src/__snapshots__/painless_error.test.tsx.snap b/packages/kbn-search-errors/src/__snapshots__/painless_error.test.tsx.snap new file mode 100644 index 0000000000000..643973c636019 --- /dev/null +++ b/packages/kbn-search-errors/src/__snapshots__/painless_error.test.tsx.snap @@ -0,0 +1,29 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Painless error should render error message 1`] = ` +
+ + Error executing runtime field or scripted field on data view logs + + + + invalid +^---- HERE + + + cannot resolve symbol [invalid] + +
+`; diff --git a/packages/kbn-search-errors/src/__snapshots__/tsdb_error.test.tsx.snap b/packages/kbn-search-errors/src/__snapshots__/tsdb_error.test.tsx.snap new file mode 100644 index 0000000000000..adc0412c175b7 --- /dev/null +++ b/packages/kbn-search-errors/src/__snapshots__/tsdb_error.test.tsx.snap @@ -0,0 +1,18 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Tsdb error should render error message 1`] = ` +
+

+ The field [bytes_counter] of Time series type [counter] has been used with the unsupported operation [sum]. +

+ + See more about Time series field types and [counter] supported aggregations + +
+`; diff --git a/packages/kbn-search-errors/src/create_es_error.ts b/packages/kbn-search-errors/src/create_es_error.ts new file mode 100644 index 0000000000000..ffde06eb728f7 --- /dev/null +++ b/packages/kbn-search-errors/src/create_es_error.ts @@ -0,0 +1,64 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import { estypes } from '@elastic/elasticsearch'; +import { i18n } from '@kbn/i18n'; +import type { ApplicationStart, CoreStart } from '@kbn/core/public'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import { IEsError } from './types'; +import { EsError } from './es_error'; +import { PainlessError } from './painless_error'; +import { TsdbError } from './tsdb_error'; + +export interface Services { + application: ApplicationStart; + docLinks: CoreStart['docLinks']; +} + +function getNestedCauses(errorCause: estypes.ErrorCause): estypes.ErrorCause[] { + // Give shard failures priority, then try to get the error navigating nested objects + if (errorCause.failed_shards) { + return (errorCause.failed_shards as estypes.ShardFailure[]).map( + (shardFailure) => shardFailure.reason + ); + } + return errorCause.caused_by ? getNestedCauses(errorCause.caused_by) : [errorCause]; +} + +export function createEsError( + err: IEsError, + openInInspector: () => void, + services: Services, + dataView?: DataView +) { + const rootCauses = err.attributes?.error ? getNestedCauses(err.attributes?.error) : []; + + const painlessCause = rootCauses.find((errorCause) => { + return errorCause.lang && errorCause.lang === 'painless'; + }); + if (painlessCause) { + return new PainlessError(err, openInInspector, painlessCause, services.application, dataView); + } + + const tsdbCause = rootCauses.find((errorCause) => { + return ( + errorCause.type === 'illegal_argument_exception' && + errorCause.reason && + /\]\[counter\] is not supported for aggregation/.test(errorCause.reason) + ); + }); + if (tsdbCause) { + return new TsdbError(err, openInInspector, tsdbCause, services.docLinks); + } + + const causeReason = rootCauses[0]?.reason ?? err.attributes?.error?.reason; + const message = causeReason + ? causeReason + : i18n.translate('searchErrors.esError.unknownRootCause', { defaultMessage: 'unknown' }); + return new EsError(err, message, openInInspector); +} diff --git a/packages/kbn-search-errors/src/es_error.test.tsx b/packages/kbn-search-errors/src/es_error.test.tsx index 7f82faf685aba..1304b154d1090 100644 --- a/packages/kbn-search-errors/src/es_error.test.tsx +++ b/packages/kbn-search-errors/src/es_error.test.tsx @@ -6,41 +6,31 @@ * Side Public License, v 1. */ -import { EsError } from './es_error'; -import { IEsError } from './types'; +import type { ReactElement } from 'react'; +import type { CoreStart } from '@kbn/core/public'; +import { createEsError } from './create_es_error'; +import { renderSearchError } from './render_search_error'; +import { shallow } from 'enzyme'; +import { coreMock } from '@kbn/core/public/mocks'; -describe('EsError', () => { - it('contains the same body as the wrapped error', () => { - const error = { - statusCode: 500, - message: 'nope', - attributes: { - error: { - type: 'top_level_exception_type', - reason: 'top-level reason', - }, +const services = { + application: coreMock.createStart().application, + docLinks: { + links: { + fleet: { + datastreamsTSDSMetrics: '', }, - } as IEsError; - const esError = new EsError(error, () => {}); - - expect(typeof esError.attributes).toEqual('object'); - expect(esError.attributes).toEqual(error.attributes); - }); + }, + } as CoreStart['docLinks'], +}; - it('contains some explanation of the error in the message', () => { - // error taken from Vega's issue - const error = { - message: - 'x_content_parse_exception: [x_content_parse_exception] Reason: [1:78] [date_histogram] failed to parse field [calendar_interval]', +describe('EsError', () => { + const esError = createEsError( + { statusCode: 400, + message: 'search_phase_execution_exception', attributes: { error: { - root_cause: [ - { - type: 'x_content_parse_exception', - reason: '[1:78] [date_histogram] failed to parse field [calendar_interval]', - }, - ], type: 'x_content_parse_exception', reason: '[1:78] [date_histogram] failed to parse field [calendar_interval]', caused_by: { @@ -49,10 +39,27 @@ describe('EsError', () => { }, }, }, - } as IEsError; - const esError = new EsError(error, () => {}); + }, + () => {}, + services + ); + + test('should set error.message to root "error cause" reason', () => { expect(esError.message).toEqual( - 'EsError: The supplied interval [2q] could not be parsed as a calendar interval.' + 'The supplied interval [2q] could not be parsed as a calendar interval.' ); }); + + test('should render error message', () => { + const searchErrorDisplay = renderSearchError(esError); + expect(searchErrorDisplay).not.toBeUndefined(); + const wrapper = shallow(searchErrorDisplay?.body as ReactElement); + expect(wrapper).toMatchSnapshot(); + }); + + test('should return 1 action', () => { + const searchErrorDisplay = renderSearchError(esError); + expect(searchErrorDisplay).not.toBeUndefined(); + expect(searchErrorDisplay?.actions?.length).toBe(1); + }); }); diff --git a/packages/kbn-search-errors/src/es_error.tsx b/packages/kbn-search-errors/src/es_error.tsx index 8a5ab1ad3c503..cd8c842d997d8 100644 --- a/packages/kbn-search-errors/src/es_error.tsx +++ b/packages/kbn-search-errors/src/es_error.tsx @@ -7,11 +7,9 @@ */ import React from 'react'; -import { EuiButton, EuiCodeBlock, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { ApplicationStart } from '@kbn/core/public'; -import { IEsError } from './types'; -import { getRootCause } from './utils'; +import { EuiButton, EuiCodeBlock } from '@elastic/eui'; +import type { IEsError } from './types'; /** * Checks if a given errors originated from Elasticsearch. @@ -24,39 +22,25 @@ export function isEsError(e: any): e is IEsError { } export class EsError extends Error { - readonly attributes: IEsError['attributes']; + public readonly attributes: IEsError['attributes']; + private readonly openInInspector: () => void; - constructor(protected readonly err: IEsError, private readonly openInInspector: () => void) { - super( - `EsError: ${ - getRootCause(err?.attributes?.error)?.reason || - i18n.translate('searchErrors.esError.unknownRootCause', { defaultMessage: 'unknown' }) - }` - ); + constructor(err: IEsError, message: string, openInInspector: () => void) { + super(message); this.attributes = err.attributes; + this.openInInspector = openInInspector; Object.setPrototypeOf(this, new.target.prototype); } public getErrorMessage() { - if (!this.attributes?.error) { - return null; - } - - const rootCause = getRootCause(this.attributes.error)?.reason; - const topLevelCause = this.attributes.error.reason; - const cause = rootCause ?? topLevelCause; - return ( - <> - - - {cause} - - + + {this.message} + ); } - public getActions(application: ApplicationStart) { + public getActions() { return [ { - beforeEach(() => { - jest.clearAllMocks(); - }); +const dataViewMock = { + title: 'logs', + id: '1234', +} as unknown as DataView; - it('Should show reason and code', () => { - const e = new PainlessError( - { - statusCode: 400, - message: 'search_phase_execution_exception', - attributes: { - error: searchPhaseException.error, +describe('Painless error', () => { + const painlessError = createEsError( + { + statusCode: 400, + message: 'search_phase_execution_exception', + attributes: { + error: { + type: 'search_phase_execution_exception', + reason: 'all shards failed', + failed_shards: [ + { + shard: 0, + index: '.kibana_11', + node: 'b3HX8C96Q7q1zgfVLxEsPA', + reason: { + type: 'script_exception', + reason: 'compile error', + script_stack: ['invalid', '^---- HERE'], + script: 'invalid', + lang: 'painless', + position: { + offset: 0, + start: 0, + end: 7, + }, + caused_by: { + type: 'illegal_argument_exception', + reason: 'cannot resolve symbol [invalid]', + }, + }, + }, + ], }, }, - () => {} - ); - const component = mount(e.getErrorMessage()); - - const failedShards = searchPhaseException.error.failed_shards![0]; + }, + () => {}, + servicesMock, + dataViewMock + ); - const stackTraceElem = findTestSubject(component, 'painlessStackTrace').getDOMNode(); - const stackTrace = failedShards!.reason.script_stack!.splice(-2).join('\n'); - expect(stackTraceElem.textContent).toBe(stackTrace); + test('should set error.message to painless reason', () => { + expect(painlessError.message).toEqual( + 'Error executing runtime field or scripted field on data view logs' + ); + }); - const humanReadableError = findTestSubject( - component, - 'painlessHumanReadableError' - ).getDOMNode(); - expect(humanReadableError.textContent).toBe(failedShards?.reason.caused_by?.reason); + test('should render error message', () => { + const searchErrorDisplay = renderSearchError(painlessError); + expect(searchErrorDisplay).not.toBeUndefined(); + const wrapper = shallow(searchErrorDisplay?.body as ReactElement); + expect(wrapper).toMatchSnapshot(); + }); - const actions = e.getActions(startMock.application); - expect(actions.length).toBe(2); + test('should return 2 actions', () => { + const searchErrorDisplay = renderSearchError(painlessError); + expect(searchErrorDisplay).not.toBeUndefined(); + expect(searchErrorDisplay?.actions?.length).toBe(2); }); }); diff --git a/packages/kbn-search-errors/src/painless_error.tsx b/packages/kbn-search-errors/src/painless_error.tsx index 08657ea134ab6..79fd737f055ab 100644 --- a/packages/kbn-search-errors/src/painless_error.tsx +++ b/packages/kbn-search-errors/src/painless_error.tsx @@ -7,43 +7,58 @@ */ import React from 'react'; +import { estypes } from '@elastic/elasticsearch'; +import type { ApplicationStart } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { EuiButtonEmpty, EuiSpacer, EuiText, EuiCodeBlock } from '@elastic/eui'; -import type { ApplicationStart } from '@kbn/core/public'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { IEsError } from './types'; -import { EsError, isEsError } from './es_error'; -import { getRootCause } from './utils'; +import { EsError } from './es_error'; export class PainlessError extends EsError { - painlessStack?: string; - indexPattern?: DataView; - constructor(err: IEsError, openInInspector: () => void, indexPattern?: DataView) { - super(err, openInInspector); - this.indexPattern = indexPattern; + private readonly applicationStart: ApplicationStart; + private readonly painlessCause: estypes.ErrorCause; + private readonly dataView?: DataView; + + constructor( + err: IEsError, + openInInspector: () => void, + painlessCause: estypes.ErrorCause, + applicationStart: ApplicationStart, + dataView?: DataView + ) { + super( + err, + i18n.translate('searchErrors.painlessError.painlessScriptedFieldErrorMessage', { + defaultMessage: + 'Error executing runtime field or scripted field on data view {indexPatternName}', + values: { + indexPatternName: dataView?.title || '', + }, + }), + openInInspector + ); + this.applicationStart = applicationStart; + this.painlessCause = painlessCause; + this.dataView = dataView; } public getErrorMessage() { - const rootCause = getRootCause(this.err.attributes?.error); - const scriptFromStackTrace = rootCause?.script_stack - ? rootCause?.script_stack?.slice(-2).join('\n') + const scriptFromStackTrace = this.painlessCause?.script_stack + ? this.painlessCause?.script_stack?.slice(-2).join('\n') : undefined; // if the error has been properly processed it will highlight where it occurred. - const hasScript = rootCause?.script_stack?.slice(-1)[0]?.indexOf('HERE') || -1 >= 0; - const humanReadableError = rootCause?.caused_by?.reason; + const hasScript = this.painlessCause?.script_stack?.slice(-1)[0]?.indexOf('HERE') || -1 >= 0; + const humanReadableError = this.painlessCause?.caused_by?.reason; // fallback, show ES stacktrace - const painlessStack = rootCause?.script_stack ? rootCause?.script_stack.join('\n') : undefined; + const painlessStack = this.painlessCause?.script_stack + ? this.painlessCause?.script_stack.join('\n') + : undefined; return ( - <> +
- {i18n.translate('searchErrors.painlessError.painlessScriptedFieldErrorMessage', { - defaultMessage: - 'Error executing runtime field or scripted field on index pattern {indexPatternName}', - values: { - indexPatternName: this?.indexPattern?.title, - }, - })} + {this.message} {scriptFromStackTrace || painlessStack ? ( @@ -56,21 +71,21 @@ export class PainlessError extends EsError { {humanReadableError} ) : null} - +
); } - getActions(application: ApplicationStart) { - function onClick(indexPatternId?: string) { - application.navigateToApp('management', { - path: `/kibana/indexPatterns${indexPatternId ? `/patterns/${indexPatternId}` : ''}`, - }); - } - const actions = super.getActions(application) ?? []; + getActions() { + const actions = super.getActions() ?? []; actions.push( onClick(this?.indexPattern?.id)} + onClick={() => () => { + const dataViewId = this.dataView?.id; + this.applicationStart.navigateToApp('management', { + path: `/kibana/indexPatterns${dataViewId ? `/patterns/${dataViewId}` : ''}`, + }); + }} size="s" > {i18n.translate('searchErrors.painlessError.buttonTxt', { @@ -81,13 +96,3 @@ export class PainlessError extends EsError { return actions; } } - -export function isPainlessError(err: Error | IEsError) { - if (!isEsError(err)) return false; - - const rootCause = getRootCause((err as IEsError).attributes?.error); - if (!rootCause) return false; - - const { lang } = rootCause; - return lang === 'painless'; -} diff --git a/packages/kbn-search-errors/src/render_search_error.ts b/packages/kbn-search-errors/src/render_search_error.ts index 73dd298877cca..85dc2486d7a16 100644 --- a/packages/kbn-search-errors/src/render_search_error.ts +++ b/packages/kbn-search-errors/src/render_search_error.ts @@ -9,23 +9,18 @@ import { i18n } from '@kbn/i18n'; import { ReactNode } from 'react'; import { BfetchRequestError } from '@kbn/bfetch-error'; -import type { ApplicationStart } from '@kbn/core-application-browser'; import { EsError } from './es_error'; -export function renderSearchError({ - error, - application, -}: { - error: Error; - application: ApplicationStart; -}): { title: string; body: ReactNode; actions?: ReactNode[] } | undefined { +export function renderSearchError( + error: Error +): { title: string; body: ReactNode; actions?: ReactNode[] } | undefined { if (error instanceof EsError) { return { title: i18n.translate('searchErrors.search.esErrorTitle', { defaultMessage: 'Cannot retrieve search results', }), body: error.getErrorMessage(), - actions: error.getActions(application), + actions: error.getActions(), }; } diff --git a/packages/kbn-search-errors/src/tsdb_error.test.tsx b/packages/kbn-search-errors/src/tsdb_error.test.tsx new file mode 100644 index 0000000000000..d272938853da6 --- /dev/null +++ b/packages/kbn-search-errors/src/tsdb_error.test.tsx @@ -0,0 +1,88 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import type { ReactElement } from 'react'; +import type { CoreStart } from '@kbn/core/public'; +import { createEsError } from './create_es_error'; +import { renderSearchError } from './render_search_error'; +import { shallow } from 'enzyme'; +import { coreMock } from '@kbn/core/public/mocks'; + +const servicesMock = { + application: coreMock.createStart().application, + docLinks: { + links: { + fleet: { + datastreamsTSDSMetrics: '', + }, + }, + } as CoreStart['docLinks'], +}; + +describe('Tsdb error', () => { + const tsdbError = createEsError( + { + statusCode: 400, + message: 'search_phase_execution_exception', + attributes: { + error: { + type: 'status_exception', + reason: 'error while executing search', + caused_by: { + type: 'search_phase_execution_exception', + reason: 'all shards failed', + phase: 'query', + grouped: true, + failed_shards: [ + { + shard: 0, + index: 'tsdb_index', + reason: { + type: 'illegal_argument_exception', + reason: + 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', + }, + }, + ], + caused_by: { + type: 'illegal_argument_exception', + reason: + 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', + caused_by: { + type: 'illegal_argument_exception', + reason: + 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', + }, + }, + }, + }, + }, + }, + () => {}, + servicesMock + ); + + test('should set error.message to tsdb reason', () => { + expect(tsdbError.message).toEqual( + 'The field [bytes_counter] of Time series type [counter] has been used with the unsupported operation [sum].' + ); + }); + + test('should render error message', () => { + const searchErrorDisplay = renderSearchError(tsdbError); + expect(searchErrorDisplay).not.toBeUndefined(); + const wrapper = shallow(searchErrorDisplay?.body as ReactElement); + expect(wrapper).toMatchSnapshot(); + }); + + test('should return 1 actions', () => { + const searchErrorDisplay = renderSearchError(tsdbError); + expect(searchErrorDisplay).not.toBeUndefined(); + expect(searchErrorDisplay?.actions?.length).toBe(1); + }); +}); diff --git a/packages/kbn-search-errors/src/tsdb_error.tsx b/packages/kbn-search-errors/src/tsdb_error.tsx new file mode 100644 index 0000000000000..2f51665df699e --- /dev/null +++ b/packages/kbn-search-errors/src/tsdb_error.tsx @@ -0,0 +1,55 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { estypes } from '@elastic/elasticsearch'; +import type { CoreStart } from '@kbn/core/public'; +import { i18n } from '@kbn/i18n'; +import { EuiLink } from '@elastic/eui'; +import type { IEsError } from './types'; +import { EsError } from './es_error'; + +export class TsdbError extends EsError { + private readonly docLinks: CoreStart['docLinks']; + + constructor( + err: IEsError, + openInInspector: () => void, + tsdbCause: estypes.ErrorCause, + docLinks: CoreStart['docLinks'] + ) { + const [fieldName, _type, _isCounter, opUsed] = tsdbCause.reason!.match(/\[(\w)*\]/g)!; + super( + err, + i18n.translate('searchErrors.tsdbError.message', { + defaultMessage: + 'The field {field} of Time series type [counter] has been used with the unsupported operation {op}.', + values: { + field: fieldName, + op: opUsed, + }, + }), + openInInspector + ); + this.docLinks = docLinks; + } + + public getErrorMessage() { + return ( +
+

{this.message}

+ + {i18n.translate('searchErrors.tsdbError.tsdbCounterDocsLabel', { + defaultMessage: + 'See more about Time series field types and [counter] supported aggregations', + })} + +
+ ); + } +} diff --git a/packages/kbn-search-errors/src/utils.ts b/packages/kbn-search-errors/src/utils.ts deleted file mode 100644 index e1e2c51f87f3c..0000000000000 --- a/packages/kbn-search-errors/src/utils.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 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 or the Server - * Side Public License, v 1. - */ - -import { estypes } from '@elastic/elasticsearch'; - -function getFailedShardCause(error: estypes.ErrorCause): estypes.ErrorCause | undefined { - const failedShards = error.failed_shards || error.caused_by?.failed_shards; - return failedShards ? failedShards[0]?.reason : undefined; -} - -function getNestedCause(error: estypes.ErrorCause): estypes.ErrorCause { - return error.caused_by ? getNestedCause(error.caused_by) : error; -} - -export function getRootCause(error?: estypes.ErrorCause): estypes.ErrorCause | undefined { - return error - ? // Give shard failures priority, then try to get the error navigating nested objects - getFailedShardCause(error) || getNestedCause(error) - : undefined; -} diff --git a/packages/kbn-search-errors/tsconfig.json b/packages/kbn-search-errors/tsconfig.json index 7c50a64bd11ee..d7cb9d82c63a5 100644 --- a/packages/kbn-search-errors/tsconfig.json +++ b/packages/kbn-search-errors/tsconfig.json @@ -20,7 +20,6 @@ "@kbn/core", "@kbn/kibana-utils-plugin", "@kbn/data-views-plugin", - "@kbn/core-application-browser", "@kbn/bfetch-error", ] } 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 adcff950575e3..04e79334cf219 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 @@ -22,6 +22,7 @@ import { getAggregateQueryMode, getLanguageDisplayName } from '@kbn/es-query'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { ExpressionsStart } from '@kbn/expressions-plugin/public'; import type { IndexManagementPluginSetup } from '@kbn/index-management-plugin/public'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { type LanguageDocumentationSections, LanguageDocumentationPopover, @@ -172,7 +173,6 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ const [showLineNumbers, setShowLineNumbers] = useState(isCodeEditorExpanded); const [isCompactFocused, setIsCompactFocused] = useState(isCodeEditorExpanded); const [isCodeEditorExpandedFocused, setIsCodeEditorExpandedFocused] = useState(false); - const [isWordWrapped, setIsWordWrapped] = useState(false); const [editorMessages, setEditorMessages] = useState<{ errors: MonacoMessage[]; @@ -478,15 +478,14 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ } }, [calculateVisibleCode, code, isCompactFocused, queryString]); - useEffect(() => { - if (isCodeEditorExpanded && !isWordWrapped) { - const pipes = code?.split('|'); - const pipesWithNewLine = code?.split('\n|'); - if (pipes?.length === pipesWithNewLine?.length) { - setIsWordWrapped(true); - } - } - }, [code, isCodeEditorExpanded, isWordWrapped]); + const linesBreaksButtonsStatus = useMemo(() => { + const pipes = code?.split('|'); + const pipesWithNewLine = code?.split('\n|'); + return { + addLineBreaksDisabled: pipes?.length === pipesWithNewLine?.length, + removeLineBreaksDisabled: pipesWithNewLine?.length === 1, + }; + }, [code]); const onResize = ({ width }: { width: number }) => { setIsSpaceReduced(Boolean(editorIsInline && width < BREAKPOINT_WIDTH)); @@ -499,7 +498,6 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ const onQueryUpdate = useCallback( (value: string) => { setCode(value); - setIsWordWrapped(false); onTextLangQueryChange({ [language]: value } as AggregateQuery); }, [language, onTextLangQueryChange] @@ -561,58 +559,72 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ responsive={false} > - + + + { + const updatedCode = getWrappedInPipesCode(code, false); + if (code !== updatedCode) { + setCode(updatedCode); + onTextLangQueryChange({ [language]: updatedCode } as AggregateQuery); + } + }} + /> + + + + + - { - editor1.current?.updateOptions({ - wordWrap: isWordWrapped ? 'off' : 'on', - }); - setIsWordWrapped(!isWordWrapped); - const updatedCode = getWrappedInPipesCode(code, isWordWrapped); - if (code !== updatedCode) { - setCode(updatedCode); - onTextLangQueryChange({ [language]: updatedCode } as AggregateQuery); - } - }} - /> - + )} + isDisabled={linesBreaksButtonsStatus.removeLineBreaksDisabled} + onClick={() => { + const updatedCode = getWrappedInPipesCode(code, true); + if (code !== updatedCode) { + setCode(updatedCode); + onTextLangQueryChange({ [language]: updatedCode } as AggregateQuery); + } + }} + /> + + + diff --git a/packages/kbn-text-based-editor/tsconfig.json b/packages/kbn-text-based-editor/tsconfig.json index 63222d0d6026b..72240c8aa060d 100644 --- a/packages/kbn-text-based-editor/tsconfig.json +++ b/packages/kbn-text-based-editor/tsconfig.json @@ -23,7 +23,8 @@ "@kbn/data-plugin", "@kbn/expressions-plugin", "@kbn/data-views-plugin", - "@kbn/index-management-plugin" + "@kbn/index-management-plugin", + "@kbn/visualization-utils" ], "exclude": [ "target/**/*", diff --git a/packages/kbn-unified-field-list/src/components/field_list_grouped/field_list_grouped.test.tsx b/packages/kbn-unified-field-list/src/components/field_list_grouped/field_list_grouped.test.tsx index 9a86b56f52dc7..6744fb92db152 100644 --- a/packages/kbn-unified-field-list/src/components/field_list_grouped/field_list_grouped.test.tsx +++ b/packages/kbn-unified-field-list/src/components/field_list_grouped/field_list_grouped.test.tsx @@ -22,7 +22,7 @@ import { FieldsAccordion } from './fields_accordion'; import { NoFieldsCallout } from './no_fields_callout'; import { useGroupedFields, type GroupedFieldsParams } from '../../hooks/use_grouped_fields'; -describe('UnifiedFieldList + useGroupedFields()', () => { +describe('UnifiedFieldList FieldListGrouped + useGroupedFields()', () => { let defaultProps: FieldListGroupedProps; let mockedServices: GroupedFieldsParams['services']; const allFields = dataView.fields; @@ -123,11 +123,11 @@ describe('UnifiedFieldList + useGroupedFields()', () => { ExistenceFetchStatus.unknown ); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe(''); - expect(wrapper.find(FieldsAccordion)).toHaveLength(3); - expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(3); + expect(wrapper.find(FieldsAccordion)).toHaveLength(2); + expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(2); expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('hasLoaded')) - ).toStrictEqual([false, false, false]); + ).toStrictEqual([false, false]); expect(wrapper.find(NoFieldsCallout)).toHaveLength(0); await act(async () => { @@ -144,17 +144,17 @@ describe('UnifiedFieldList + useGroupedFields()', () => { ExistenceFetchStatus.succeeded ); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '25 available fields. 0 empty fields. 3 meta fields.' + '25 available fields. 3 meta fields.' ); - expect(wrapper.find(FieldsAccordion)).toHaveLength(3); + expect(wrapper.find(FieldsAccordion)).toHaveLength(2); expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(0); expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('hasLoaded')) - ).toStrictEqual([true, true, true]); + ).toStrictEqual([true, true]); expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('paginatedFields').length) - ).toStrictEqual([25, 0, 0]); - expect(wrapper.find(NoFieldsCallout)).toHaveLength(1); + ).toStrictEqual([25, 0]); + expect(wrapper.find(NoFieldsCallout)).toHaveLength(0); }); it('renders correctly in failed state', async () => { @@ -173,16 +173,16 @@ describe('UnifiedFieldList + useGroupedFields()', () => { ExistenceFetchStatus.failed ); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '25 available fields. 0 empty fields. 3 meta fields.' + '25 available fields. 3 meta fields.' ); - expect(wrapper.find(FieldsAccordion)).toHaveLength(3); + expect(wrapper.find(FieldsAccordion)).toHaveLength(2); expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(0); expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('hasLoaded')) - ).toStrictEqual([true, true, true]); + ).toStrictEqual([true, true]); expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('showExistenceFetchError')) - ).toStrictEqual([true, true, true]); + ).toStrictEqual([true, true]); }); it('renders correctly in no fields state', async () => { @@ -199,13 +199,13 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '0 available fields. 0 empty fields. 0 meta fields.' + '0 available fields. 0 meta fields.' ); - expect(wrapper.find(FieldsAccordion)).toHaveLength(3); + expect(wrapper.find(FieldsAccordion)).toHaveLength(2); expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(0); expect( wrapper.find(NoFieldsCallout).map((callout) => callout.prop('fieldsExistInIndex')) - ).toStrictEqual([false, false, false]); + ).toStrictEqual([false, false]); }); it('renders correctly for text-based queries (no data view)', async () => { @@ -242,11 +242,11 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '25 available fields. 0 empty fields. 3 meta fields.' + '25 available fields. 3 meta fields.' ); expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('paginatedFields').length) - ).toStrictEqual([25, 0, 0]); + ).toStrictEqual([25, 0]); await act(async () => { await wrapper @@ -259,7 +259,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('paginatedFields').length) - ).toStrictEqual([25, 0, 3]); + ).toStrictEqual([25, 3]); }); it('renders correctly when paginated', async () => { @@ -275,11 +275,11 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '25 available fields. 112 unmapped fields. 0 empty fields. 3 meta fields.' + '25 available fields. 112 unmapped fields. 3 meta fields.' ); expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('paginatedFields').length) - ).toStrictEqual([25, 0, 0, 0]); + ).toStrictEqual([25, 0, 0]); await act(async () => { await wrapper @@ -292,11 +292,11 @@ describe('UnifiedFieldList + useGroupedFields()', () => { expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('paginatedFields').length) - ).toStrictEqual([25, 50, 0, 0]); + ).toStrictEqual([25, 50, 0]); await act(async () => { await wrapper - .find('[data-test-subj="fieldListGroupedEmptyFields"]') + .find('[data-test-subj="fieldListGroupedMetaFields"]') .find('button') .first() .simulate('click'); @@ -305,7 +305,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('paginatedFields').length) - ).toStrictEqual([25, 88, 0, 0]); + ).toStrictEqual([25, 88, 0]); }); it('renders correctly when fields are searched and filtered', async () => { @@ -322,7 +322,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '25 available fields. 112 unmapped fields. 0 empty fields. 3 meta fields.' + '25 available fields. 112 unmapped fields. 3 meta fields.' ); await act(async () => { @@ -336,7 +336,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '2 available fields. 8 unmapped fields. 0 empty fields. 0 meta fields.' + '2 available fields. 8 unmapped fields. 0 meta fields.' ); await act(async () => { @@ -350,7 +350,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '3 available fields. 24 unmapped fields. 0 empty fields. 3 meta fields.' + '3 available fields. 24 unmapped fields. 3 meta fields.' ); await act(async () => { @@ -367,7 +367,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '1 available field. 4 unmapped fields. 0 empty fields. 0 meta fields.' + '1 available field. 4 unmapped fields. 0 meta fields.' ); }, 10000); @@ -385,7 +385,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '25 available fields. 112 unmapped fields. 0 empty fields. 3 meta fields.' + '25 available fields. 112 unmapped fields. 3 meta fields.' ); await act(async () => { @@ -399,7 +399,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '23 available fields. 104 unmapped fields. 0 empty fields. 3 meta fields.' + '23 available fields. 104 unmapped fields. 3 meta fields.' ); }); @@ -417,7 +417,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '25 available fields. 112 unmapped fields. 0 empty fields. 3 meta fields.' + '25 available fields. 112 unmapped fields. 3 meta fields.' ); await act(async () => { @@ -432,7 +432,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '2 selected fields. 25 available fields. 112 unmapped fields. 0 empty fields. 3 meta fields.' + '2 selected fields. 25 available fields. 112 unmapped fields. 3 meta fields.' ); }); @@ -452,7 +452,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { }); expect(wrapper.find(`#${defaultProps.screenReaderDescriptionId}`).first().text()).toBe( - '2 selected fields. 10 popular fields. 25 available fields. 112 unmapped fields. 0 empty fields. 3 meta fields.' + '2 selected fields. 10 popular fields. 25 available fields. 112 unmapped fields. 3 meta fields.' ); }); @@ -472,11 +472,11 @@ describe('UnifiedFieldList + useGroupedFields()', () => { // only Available is open expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('initialIsOpen')) - ).toStrictEqual([true, false, false, false]); + ).toStrictEqual([true, false, false]); await act(async () => { await wrapper - .find('[data-test-subj="fieldListGroupedEmptyFields"]') + .find('[data-test-subj="fieldListGroupedMetaFields"]') .find('button') .first() .simulate('click'); @@ -486,7 +486,7 @@ describe('UnifiedFieldList + useGroupedFields()', () => { // now Empty is open too expect( wrapper.find(FieldsAccordion).map((accordion) => accordion.prop('initialIsOpen')) - ).toStrictEqual([true, false, true, false]); + ).toStrictEqual([true, false, true]); const wrapper2 = await mountGroupedList({ listProps: { @@ -503,6 +503,6 @@ describe('UnifiedFieldList + useGroupedFields()', () => { // both Available and Empty are open for the second instance expect( wrapper2.find(FieldsAccordion).map((accordion) => accordion.prop('initialIsOpen')) - ).toStrictEqual([true, false, true, false]); + ).toStrictEqual([true, false, true]); }); }); diff --git a/packages/kbn-unified-field-list/src/hooks/__snapshots__/use_grouped_fields.test.tsx.snap b/packages/kbn-unified-field-list/src/hooks/__snapshots__/use_grouped_fields.test.tsx.snap index d3c95c363695d..bf62c67deafc3 100644 --- a/packages/kbn-unified-field-list/src/hooks/__snapshots__/use_grouped_fields.test.tsx.snap +++ b/packages/kbn-unified-field-list/src/hooks/__snapshots__/use_grouped_fields.test.tsx.snap @@ -19,7 +19,7 @@ Object { "fields": Array [], "helpText": "Fields that don't have any values based on your filters.", "hideDetails": false, - "hideIfEmpty": false, + "hideIfEmpty": true, "isAffectedByGlobalFilter": false, "isAffectedByTimeFilter": false, "isInitiallyOpen": false, @@ -105,7 +105,7 @@ Object { "fields": Array [], "helpText": "Fields that don't have any values based on your filters.", "hideDetails": false, - "hideIfEmpty": false, + "hideIfEmpty": true, "isAffectedByGlobalFilter": false, "isAffectedByTimeFilter": false, "isInitiallyOpen": false, @@ -191,7 +191,7 @@ Object { "fields": Array [], "helpText": "Fields that don't have any values based on your filters.", "hideDetails": false, - "hideIfEmpty": false, + "hideIfEmpty": true, "isAffectedByGlobalFilter": false, "isAffectedByTimeFilter": false, "isInitiallyOpen": false, diff --git a/packages/kbn-unified-field-list/src/hooks/use_grouped_fields.ts b/packages/kbn-unified-field-list/src/hooks/use_grouped_fields.ts index f51f9b0fffb2d..16758ea4ee7f2 100644 --- a/packages/kbn-unified-field-list/src/hooks/use_grouped_fields.ts +++ b/packages/kbn-unified-field-list/src/hooks/use_grouped_fields.ts @@ -252,7 +252,7 @@ export function useGroupedFields({ isInitiallyOpen: false, showInAccordion: true, hideDetails: false, - hideIfEmpty: !dataViewId, + hideIfEmpty: true, title: i18n.translate('unifiedFieldList.useGroupedFields.emptyFieldsLabel', { defaultMessage: 'Empty fields', }), diff --git a/packages/kbn-visualization-ui-components/components/color_picker.tsx b/packages/kbn-visualization-ui-components/components/color_picker.tsx index 26a428bb17e0b..3a2613d16d665 100644 --- a/packages/kbn-visualization-ui-components/components/color_picker.tsx +++ b/packages/kbn-visualization-ui-components/components/color_picker.tsx @@ -8,6 +8,7 @@ import React, { useEffect, useRef, useState } from 'react'; import { i18n } from '@kbn/i18n'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { EuiFormRow, EuiColorPicker, @@ -17,7 +18,6 @@ import { euiPaletteColorBlind, } from '@elastic/eui'; import { getColorAlpha, makeColorWithAlpha } from '@kbn/coloring'; -import { TooltipWrapper } from './tooltip_wrapper'; const tooltipContent = { auto: i18n.translate('visualizationUiComponents.colorPicker.tooltip.auto', { diff --git a/packages/kbn-visualization-ui-components/components/drag_drop_bucket/default_bucket_container.tsx b/packages/kbn-visualization-ui-components/components/drag_drop_bucket/default_bucket_container.tsx index d73c46064a3ca..0448e6bda33db 100644 --- a/packages/kbn-visualization-ui-components/components/drag_drop_bucket/default_bucket_container.tsx +++ b/packages/kbn-visualization-ui-components/components/drag_drop_bucket/default_bucket_container.tsx @@ -16,7 +16,7 @@ import { EuiPanel, useEuiTheme, } from '@elastic/eui'; -import { TooltipWrapper } from '../tooltip_wrapper'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { BucketContainerProps } from './types'; export const DefaultBucketContainer = ({ diff --git a/packages/kbn-visualization-ui-components/components/drag_drop_bucket/fields_bucket_container.tsx b/packages/kbn-visualization-ui-components/components/drag_drop_bucket/fields_bucket_container.tsx index cfc5b074b6c33..89f771eef4f01 100644 --- a/packages/kbn-visualization-ui-components/components/drag_drop_bucket/fields_bucket_container.tsx +++ b/packages/kbn-visualization-ui-components/components/drag_drop_bucket/fields_bucket_container.tsx @@ -16,7 +16,7 @@ import { EuiPanel, useEuiTheme, } from '@elastic/eui'; -import { TooltipWrapper } from '../tooltip_wrapper'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { BucketContainerProps } from './types'; export const FieldsBucketContainer = ({ diff --git a/packages/kbn-visualization-ui-components/components/index.ts b/packages/kbn-visualization-ui-components/components/index.ts index e20879f9e9990..88fecd132a868 100644 --- a/packages/kbn-visualization-ui-components/components/index.ts +++ b/packages/kbn-visualization-ui-components/components/index.ts @@ -14,8 +14,6 @@ export * from './debounced_input'; export * from './debounced_value'; -export * from './tooltip_wrapper'; - export * from './color_picker'; export * from './icon_select'; diff --git a/packages/kbn-visualization-ui-components/index.ts b/packages/kbn-visualization-ui-components/index.ts index 16c51f96a869b..34c14599d6f00 100644 --- a/packages/kbn-visualization-ui-components/index.ts +++ b/packages/kbn-visualization-ui-components/index.ts @@ -11,7 +11,6 @@ export { NameInput, DebouncedInput, useDebouncedValue, - TooltipWrapper, ColorPicker, IconSelect, IconSelectSetting, diff --git a/packages/kbn-visualization-ui-components/tsconfig.json b/packages/kbn-visualization-ui-components/tsconfig.json index a9d6627828dc7..e5dcfa9c5c858 100644 --- a/packages/kbn-visualization-ui-components/tsconfig.json +++ b/packages/kbn-visualization-ui-components/tsconfig.json @@ -31,6 +31,7 @@ "@kbn/coloring", "@kbn/field-formats-plugin", "@kbn/field-utils", - "@kbn/calculate-width-from-char-count" + "@kbn/calculate-width-from-char-count", + "@kbn/visualization-utils" ], } diff --git a/packages/kbn-visualization-utils/index.ts b/packages/kbn-visualization-utils/index.ts index 7aa0a2c5d770c..1665599e93d54 100644 --- a/packages/kbn-visualization-utils/index.ts +++ b/packages/kbn-visualization-utils/index.ts @@ -7,3 +7,4 @@ */ export { getTimeZone } from './src/get_timezone'; +export { TooltipWrapper } from './src/tooltip_wrapper'; diff --git a/packages/kbn-visualization-ui-components/components/tooltip_wrapper.tsx b/packages/kbn-visualization-utils/src/tooltip_wrapper.tsx similarity index 100% rename from packages/kbn-visualization-ui-components/components/tooltip_wrapper.tsx rename to packages/kbn-visualization-utils/src/tooltip_wrapper.tsx diff --git a/packages/serverless/project_switcher/package.json b/packages/serverless/project_switcher/package.json index 5910a823783d5..06240351496c7 100644 --- a/packages/serverless/project_switcher/package.json +++ b/packages/serverless/project_switcher/package.json @@ -2,5 +2,6 @@ "name": "@kbn/serverless-project-switcher", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/serverless/settings/security_project/index.ts b/packages/serverless/settings/security_project/index.ts index 276a1e87e4b7e..c150e764de054 100644 --- a/packages/serverless/settings/security_project/index.ts +++ b/packages/serverless/settings/security_project/index.ts @@ -24,4 +24,5 @@ export const SECURITY_PROJECT_SETTINGS = [ settings.SECURITY_SOLUTION_ENABLE_NEWS_FEED_ID, settings.SECURITY_SOLUTION_DEFAULT_ALERT_TAGS_KEY, settings.SECURITY_SOLUTION_ENABLE_EXPANDABLE_FLYOUT_SETTING, + settings.SECURITY_SOLUTION_EXCLUDE_COLD_AND_FROZEN_TIERS_IN_ANALYZER, ]; diff --git a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts index 310a04874f7fb..1e1084d757310 100644 --- a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts +++ b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts @@ -112,12 +112,8 @@ export const setupOptionsListSuggestionsRoute = ( const validationBuilder = getValidationAggregationBuilder(); const suggestionAggregation: any = suggestionBuilder.buildAggregation(request) ?? {}; - const builtValidationAggregation = validationBuilder.buildAggregation(request); - const validationAggregations = builtValidationAggregation - ? { - validation: builtValidationAggregation, - } - : {}; + const validationAggregation: any = validationBuilder.buildAggregation(request); + const body: SearchRequest['body'] = { size: 0, ...timeoutSettings, @@ -128,7 +124,7 @@ export const setupOptionsListSuggestionsRoute = ( }, aggs: { ...suggestionAggregation, - ...validationAggregations, + ...validationAggregation, }, runtime_mappings: { ...runtimeFieldMap, @@ -145,7 +141,7 @@ export const setupOptionsListSuggestionsRoute = ( */ const results = suggestionBuilder.parse(rawEsResult, request); const totalCardinality = results.totalCardinality; - const invalidSelections = validationBuilder.parse(rawEsResult); + const invalidSelections = validationBuilder.parse(rawEsResult, request); return { suggestions: results.suggestions, totalCardinality, diff --git a/src/plugins/controls/server/options_list/options_list_validation_queries.test.ts b/src/plugins/controls/server/options_list/options_list_validation_queries.test.ts index f8a7344eb8860..1d96215e167b9 100644 --- a/src/plugins/controls/server/options_list/options_list_validation_queries.test.ts +++ b/src/plugins/controls/server/options_list/options_list_validation_queries.test.ts @@ -7,6 +7,7 @@ */ import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; +import { FieldSpec } from '@kbn/data-views-plugin/common'; import { OptionsListRequestBody } from '../../common/options_list/types'; import { getValidationAggregationBuilder } from './options_list_validation_queries'; @@ -33,7 +34,19 @@ describe('options list queries', () => { }; }); - describe('validation aggregation and parsing', () => { + describe('validation aggregation', () => { + test('returns empty aggregation when not given selections', () => { + const validationAggBuilder = getValidationAggregationBuilder(); + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'coolTestField', + allowExpensiveQueries: true, + }; + expect( + validationAggBuilder.buildAggregation(optionsListRequestBodyMock) + ).toMatchInlineSnapshot(`Object {}`); + }); + test('creates validation aggregation when given selections', () => { const validationAggBuilder = getValidationAggregationBuilder(); const optionsListRequestBodyMock: OptionsListRequestBody = { @@ -45,21 +58,23 @@ describe('options list queries', () => { expect(validationAggBuilder.buildAggregation(optionsListRequestBodyMock)) .toMatchInlineSnapshot(` Object { - "filters": Object { + "validation": Object { "filters": Object { - "coolOption1": Object { - "match": Object { - "coolTestField": "coolOption1", + "filters": Object { + "coolOption1": Object { + "match": Object { + "coolTestField": "coolOption1", + }, }, - }, - "coolOption2": Object { - "match": Object { - "coolTestField": "coolOption2", + "coolOption2": Object { + "match": Object { + "coolTestField": "coolOption2", + }, }, - }, - "coolOption3": Object { - "match": Object { - "coolTestField": "coolOption3", + "coolOption3": Object { + "match": Object { + "coolTestField": "coolOption3", + }, }, }, }, @@ -68,16 +83,55 @@ describe('options list queries', () => { `); }); - test('returns undefined when not given selections', () => { + test('creates validation aggregation for nested fields when given selections', () => { const validationAggBuilder = getValidationAggregationBuilder(); const optionsListRequestBodyMock: OptionsListRequestBody = { size: 10, fieldName: 'coolTestField', + fieldSpec: { + type: 'string', + subType: { nested: { path: 'path.to.nested' } }, + } as unknown as FieldSpec, allowExpensiveQueries: true, + selectedOptions: ['coolOption1', 'coolOption2', 'coolOption3'], }; - expect(validationAggBuilder.buildAggregation(optionsListRequestBodyMock)).toBeUndefined(); + expect(validationAggBuilder.buildAggregation(optionsListRequestBodyMock)) + .toMatchInlineSnapshot(` + Object { + "nestedValidation": Object { + "aggs": Object { + "validation": Object { + "filters": Object { + "filters": Object { + "coolOption1": Object { + "match": Object { + "coolTestField": "coolOption1", + }, + }, + "coolOption2": Object { + "match": Object { + "coolTestField": "coolOption2", + }, + }, + "coolOption3": Object { + "match": Object { + "coolTestField": "coolOption3", + }, + }, + }, + }, + }, + }, + "nested": Object { + "path": "path.to.nested", + }, + }, + } + `); }); + }); + describe('validation parsing', () => { test('parses validation result', () => { const validationAggBuilder = getValidationAggregationBuilder(); rawSearchResponseMock.aggregations = { @@ -92,7 +146,13 @@ describe('options list queries', () => { }, }, }; - expect(validationAggBuilder.parse(rawSearchResponseMock)).toMatchInlineSnapshot(` + expect( + validationAggBuilder.parse(rawSearchResponseMock, { + size: 10, + fieldName: 'coolTestField', + allowExpensiveQueries: true, + }) + ).toMatchInlineSnapshot(` Array [ "cool1", "cool3", @@ -100,5 +160,41 @@ describe('options list queries', () => { ] `); }); + + test('parses validation result for nested field', () => { + const validationAggBuilder = getValidationAggregationBuilder(); + rawSearchResponseMock.aggregations = { + nestedValidation: { + validation: { + buckets: { + cool1: { doc_count: 0 }, + cool2: { doc_count: 15 }, + cool3: { doc_count: 0 }, + cool4: { doc_count: 0 }, + cool5: { doc_count: 0 }, + cool6: { doc_count: 112 }, + }, + }, + }, + }; + expect( + validationAggBuilder.parse(rawSearchResponseMock, { + size: 10, + fieldSpec: { + type: 'string', + subType: { nested: { path: 'path.to.nested' } }, + } as unknown as FieldSpec, + fieldName: 'coolTestField', + allowExpensiveQueries: true, + }) + ).toMatchInlineSnapshot(` + Array [ + "cool1", + "cool3", + "cool4", + "cool5", + ] + `); + }); }); }); diff --git a/src/plugins/controls/server/options_list/options_list_validation_queries.ts b/src/plugins/controls/server/options_list/options_list_validation_queries.ts index 56e7f9efef6bf..edacacb361d0c 100644 --- a/src/plugins/controls/server/options_list/options_list_validation_queries.ts +++ b/src/plugins/controls/server/options_list/options_list_validation_queries.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { getFieldSubtypeNested } from '@kbn/data-views-plugin/common'; import { get, isEmpty } from 'lodash'; import { OptionsListRequestBody } from '../../common/options_list/types'; @@ -16,7 +17,7 @@ import { OptionsListValidationAggregationBuilder } from './types'; */ export const getValidationAggregationBuilder: () => OptionsListValidationAggregationBuilder = () => ({ - buildAggregation: ({ selectedOptions, fieldName }: OptionsListRequestBody) => { + buildAggregation: ({ selectedOptions, fieldName, fieldSpec }: OptionsListRequestBody) => { let selectedOptionsFilters; if (selectedOptions) { selectedOptionsFilters = selectedOptions.reduce((acc, currentOption) => { @@ -24,16 +25,43 @@ export const getValidationAggregationBuilder: () => OptionsListValidationAggrega return acc; }, {} as { [key: string]: { match: { [key: string]: string } } }); } - return selectedOptionsFilters && !isEmpty(selectedOptionsFilters) - ? { - filters: { - filters: selectedOptionsFilters, + + if (isEmpty(selectedOptionsFilters ?? [])) { + return {}; + } + + let validationAggregation: any = { + validation: { + filters: { + filters: selectedOptionsFilters, + }, + }, + }; + + const isNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + if (isNested) { + validationAggregation = { + nestedValidation: { + nested: { + path: isNested.nested.path, }, - } - : undefined; + aggs: { + ...validationAggregation, + }, + }, + }; + } + + return validationAggregation; }, - parse: (rawEsResult) => { - const rawInvalidSuggestions = get(rawEsResult, 'aggregations.validation.buckets'); + parse: (rawEsResult, { fieldSpec }) => { + const isNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + const rawInvalidSuggestions = get( + rawEsResult, + isNested + ? 'aggregations.nestedValidation.validation.buckets' + : 'aggregations.validation.buckets' + ); return rawInvalidSuggestions && !isEmpty(rawInvalidSuggestions) ? Object.keys(rawInvalidSuggestions).filter( (key) => rawInvalidSuggestions[key].doc_count === 0 diff --git a/src/plugins/controls/server/options_list/types.ts b/src/plugins/controls/server/options_list/types.ts index 1ea3475eddffb..70edc14484c99 100644 --- a/src/plugins/controls/server/options_list/types.ts +++ b/src/plugins/controls/server/options_list/types.ts @@ -19,7 +19,7 @@ export interface EsBucket { export interface OptionsListValidationAggregationBuilder { buildAggregation: (req: OptionsListRequestBody) => unknown; - parse: (response: SearchResponse) => string[]; + parse: (response: SearchResponse, req: OptionsListRequestBody) => string[]; } export interface OptionsListSuggestionAggregationBuilder { diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.test.ts b/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.test.ts new file mode 100644 index 0000000000000..024a7518aba0c --- /dev/null +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.test.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 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 or the Server + * Side Public License, v 1. + */ + +import { getAddPanelActionMenuItems } from './add_panel_action_menu_items'; + +describe('getAddPanelActionMenuItems', () => { + it('returns the items correctly', async () => { + const registeredActions = [ + { + id: 'ACTION_CREATE_ESQL_CHART', + type: 'ACTION_CREATE_ESQL_CHART', + getDisplayName: () => 'Action name', + getIconType: () => 'pencil', + getDisplayNameTooltip: () => 'Action tooltip', + isCompatible: () => Promise.resolve(true), + execute: jest.fn(), + }, + ]; + const items = getAddPanelActionMenuItems(registeredActions, jest.fn(), jest.fn(), jest.fn()); + expect(items).toStrictEqual([ + { + 'data-test-subj': 'create-action-Action name', + icon: 'pencil', + name: 'Action name', + onClick: expect.any(Function), + toolTipContent: 'Action tooltip', + }, + ]); + }); + + it('returns empty array if no actions have been registered', async () => { + const items = getAddPanelActionMenuItems([], jest.fn(), jest.fn(), jest.fn()); + expect(items).toStrictEqual([]); + }); +}); diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.ts b/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.ts new file mode 100644 index 0000000000000..3df8343887982 --- /dev/null +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.ts @@ -0,0 +1,52 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ +import type { ActionExecutionContext, Action } from '@kbn/ui-actions-plugin/public'; +import type { EmbeddableFactory } from '@kbn/embeddable-plugin/public'; +import { addPanelMenuTrigger } from '../../triggers'; + +const onAddPanelActionClick = + (action: Action, context: ActionExecutionContext, closePopover: () => void) => + (event: React.MouseEvent) => { + closePopover(); + if (event.currentTarget instanceof HTMLAnchorElement) { + if ( + !event.defaultPrevented && // onClick prevented default + event.button === 0 && + (!event.currentTarget.target || event.currentTarget.target === '_self') && + !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) + ) { + event.preventDefault(); + action.execute(context); + } + } else action.execute(context); + }; + +export const getAddPanelActionMenuItems = ( + actions: Array> | undefined, + createNewEmbeddable: (embeddableFactory: EmbeddableFactory) => void, + deleteEmbeddable: (embeddableId: string) => void, + closePopover: () => void +) => { + return ( + actions?.map((item) => { + const context = { + createNewEmbeddable, + deleteEmbeddable, + trigger: addPanelMenuTrigger, + }; + const actionName = item.getDisplayName(context); + return { + name: actionName, + icon: item.getIconType(context), + onClick: onAddPanelActionClick(item, context, closePopover), + 'data-test-subj': `create-action-${actionName}`, + toolTipContent: item?.getDisplayNameTooltip?.(context), + }; + }) ?? [] + ); +}; diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx index 6afdf1429663b..e39e227da0643 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx @@ -80,8 +80,17 @@ export function DashboardEditingToolbar({ isDisabled }: { isDisabled?: boolean } [stateTransferService, dashboard, search.session, trackUiMetric] ); + /** + * embeddableFactory: Required, you can get the factory from embeddableStart.getEmbeddableFactory() + * initialInput: Optional, use it in case you want to pass your own input to the factory + * dismissNotification: Optional, if not passed a toast will appear in the dashboard + */ const createNewEmbeddable = useCallback( - async (embeddableFactory: EmbeddableFactory) => { + async ( + embeddableFactory: EmbeddableFactory, + initialInput?: Partial, + dismissNotification?: boolean + ) => { if (trackUiMetric) { trackUiMetric(METRIC_TYPE.CLICK, embeddableFactory.type); } @@ -89,12 +98,19 @@ export function DashboardEditingToolbar({ isDisabled }: { isDisabled?: boolean } let explicitInput: Partial; let attributes: unknown; try { - const explicitInputReturn = await embeddableFactory.getExplicitInput(undefined, dashboard); - if (isExplicitInputWithAttributes(explicitInputReturn)) { - explicitInput = explicitInputReturn.newInput; - attributes = explicitInputReturn.attributes; + if (initialInput) { + explicitInput = initialInput; } else { - explicitInput = explicitInputReturn; + const explicitInputReturn = await embeddableFactory.getExplicitInput( + undefined, + dashboard + ); + if (isExplicitInputWithAttributes(explicitInputReturn)) { + explicitInput = explicitInputReturn.newInput; + attributes = explicitInputReturn.attributes; + } else { + explicitInput = explicitInputReturn; + } } } catch (e) { // error likely means user canceled embeddable creation @@ -110,19 +126,31 @@ export function DashboardEditingToolbar({ isDisabled }: { isDisabled?: boolean } if (newEmbeddable) { dashboard.setScrollToPanelId(newEmbeddable.id); dashboard.setHighlightPanelId(newEmbeddable.id); - toasts.addSuccess({ - title: dashboardReplacePanelActionStrings.getSuccessMessage(newEmbeddable.getTitle()), - 'data-test-subj': 'addEmbeddableToDashboardSuccess', - }); + + if (!dismissNotification) { + toasts.addSuccess({ + title: dashboardReplacePanelActionStrings.getSuccessMessage(newEmbeddable.getTitle()), + 'data-test-subj': 'addEmbeddableToDashboardSuccess', + }); + } } + return newEmbeddable; }, [trackUiMetric, dashboard, toasts] ); + const deleteEmbeddable = useCallback( + (embeddableId: string) => { + dashboard.removeEmbeddable(embeddableId); + }, + [dashboard] + ); + const extraButtons = [ , () => void; /** Handler for creating a new embeddable of a specified type */ createNewEmbeddable: (embeddableFactory: EmbeddableFactory) => void; + /** Handler for deleting an embeddable */ + deleteEmbeddable: (embeddableId: string) => void; } interface FactoryGroup { @@ -44,7 +49,13 @@ interface UnwrappedEmbeddableFactory { isEditable: boolean; } -export const EditorMenu = ({ createNewVisType, createNewEmbeddable, isDisabled }: Props) => { +export const EditorMenu = ({ + createNewVisType, + createNewEmbeddable, + deleteEmbeddable, + isDisabled, +}: Props) => { + const isMounted = useRef(false); const { embeddable, visualizations: { @@ -52,6 +63,7 @@ export const EditorMenu = ({ createNewVisType, createNewEmbeddable, isDisabled } getByGroup: getVisTypesByGroup, showNewVisModal, }, + uiActions, } = pluginServices.getServices(); const { euiTheme } = useEuiTheme(); @@ -64,6 +76,10 @@ export const EditorMenu = ({ createNewVisType, createNewEmbeddable, isDisabled } UnwrappedEmbeddableFactory[] >([]); + const [addPanelActions, setAddPanelActions] = useState> | undefined>( + undefined + ); + useEffect(() => { Promise.all( embeddableFactories.map>(async (factory) => ({ @@ -121,6 +137,28 @@ export const EditorMenu = ({ createNewVisType, createNewEmbeddable, isDisabled } let panelCount = 1 + aggBasedPanelID; + useEffect(() => { + isMounted.current = true; + + return () => { + isMounted.current = false; + }; + }, []); + + // Retrieve ADD_PANEL_TRIGGER actions + useEffect(() => { + async function loadPanelActions() { + const registeredActions = await uiActions?.getTriggerCompatibleActions?.( + ADD_PANEL_TRIGGER, + {} + ); + if (isMounted.current) { + setAddPanelActions(registeredActions); + } + } + loadPanelActions(); + }, [uiActions]); + factories.forEach(({ factory }) => { const { grouping } = factory; @@ -236,6 +274,12 @@ export const EditorMenu = ({ createNewVisType, createNewEmbeddable, isDisabled } })), ...promotedVisTypes.map(getVisTypeMenuItem), + ...getAddPanelActionMenuItems( + addPanelActions, + createNewEmbeddable, + deleteEmbeddable, + closePopover + ), ]; if (aggsBasedVisTypes.length > 0) { initialPanelItems.push({ diff --git a/src/plugins/dashboard/public/plugin.tsx b/src/plugins/dashboard/public/plugin.tsx index 98af5088967f2..4c75362485b6a 100644 --- a/src/plugins/dashboard/public/plugin.tsx +++ b/src/plugins/dashboard/public/plugin.tsx @@ -70,6 +70,7 @@ import { import { DashboardMountContextProps } from './dashboard_app/types'; import type { FindDashboardsService } from './services/dashboard_content_management/types'; import { CONTENT_ID, LATEST_VERSION } from '../common/content_management'; +import { addPanelMenuTrigger } from './triggers'; export interface DashboardFeatureFlagConfig { allowByValueEmbeddables: boolean; @@ -149,11 +150,23 @@ export class DashboardPlugin public setup( core: CoreSetup, - { share, embeddable, home, urlForwarding, data, contentManagement }: DashboardSetupDependencies + { + share, + embeddable, + home, + urlForwarding, + data, + contentManagement, + uiActions, + }: DashboardSetupDependencies ): DashboardSetup { this.dashboardFeatureFlagConfig = this.initializerContext.config.get(); + // this trigger enables external consumers to register actions for + // adding items to the add panel menu + uiActions.registerTrigger(addPanelMenuTrigger); + if (share) { this.locator = share.url.locators.create( new DashboardAppLocatorDefinition({ diff --git a/src/plugins/dashboard/public/services/plugin_services.stub.ts b/src/plugins/dashboard/public/services/plugin_services.stub.ts index b77888f1293f5..e61aab184b09c 100644 --- a/src/plugins/dashboard/public/services/plugin_services.stub.ts +++ b/src/plugins/dashboard/public/services/plugin_services.stub.ts @@ -43,6 +43,7 @@ import { savedObjectsManagementServiceFactory } from './saved_objects_management import { contentManagementServiceFactory } from './content_management/content_management_service.stub'; import { serverlessServiceFactory } from './serverless/serverless_service.stub'; import { noDataPageServiceFactory } from './no_data_page/no_data_page_service.stub'; +import { uiActionsServiceFactory } from './ui_actions/ui_actions_service.stub'; export const providers: PluginServiceProviders = { dashboardContentManagement: new PluginServiceProvider(dashboardContentManagementServiceFactory), @@ -74,6 +75,7 @@ export const providers: PluginServiceProviders = { contentManagement: new PluginServiceProvider(contentManagementServiceFactory), serverless: new PluginServiceProvider(serverlessServiceFactory), noDataPage: new PluginServiceProvider(noDataPageServiceFactory), + uiActions: new PluginServiceProvider(uiActionsServiceFactory), }; export const registry = new PluginServiceRegistry(providers); diff --git a/src/plugins/dashboard/public/services/plugin_services.ts b/src/plugins/dashboard/public/services/plugin_services.ts index 1d159014a4e72..2c9c1d95828e8 100644 --- a/src/plugins/dashboard/public/services/plugin_services.ts +++ b/src/plugins/dashboard/public/services/plugin_services.ts @@ -44,6 +44,7 @@ import { dashboardContentManagementServiceFactory } from './dashboard_content_ma import { contentManagementServiceFactory } from './content_management/content_management_service'; import { serverlessServiceFactory } from './serverless/serverless_service'; import { noDataPageServiceFactory } from './no_data_page/no_data_page_service'; +import { uiActionsServiceFactory } from './ui_actions/ui_actions_service'; const providers: PluginServiceProviders = { dashboardContentManagement: new PluginServiceProvider(dashboardContentManagementServiceFactory, [ @@ -88,6 +89,7 @@ const providers: PluginServiceProviders(); diff --git a/src/plugins/dashboard/public/services/types.ts b/src/plugins/dashboard/public/services/types.ts index c1c7c1aa39e71..420ba257b6a6a 100644 --- a/src/plugins/dashboard/public/services/types.ts +++ b/src/plugins/dashboard/public/services/types.ts @@ -39,6 +39,7 @@ import { DashboardUsageCollectionService } from './usage_collection/types'; import { DashboardVisualizationsService } from './visualizations/types'; import { DashboardServerlessService } from './serverless/types'; import { NoDataPageService } from './no_data_page/types'; +import { DashboardUiActionsService } from './ui_actions/types'; export type DashboardPluginServiceParams = KibanaPluginServiceParams & { initContext: PluginInitializerContext; // need a custom type so that initContext is a required parameter for initializerContext @@ -74,4 +75,5 @@ export interface DashboardServices { contentManagement: ContentManagementPublicStart; serverless: DashboardServerlessService; // TODO: make this optional in follow up noDataPage: NoDataPageService; + uiActions: DashboardUiActionsService; } diff --git a/src/plugins/dashboard/public/services/ui_actions/types.ts b/src/plugins/dashboard/public/services/ui_actions/types.ts new file mode 100644 index 0000000000000..102cb70d8a11d --- /dev/null +++ b/src/plugins/dashboard/public/services/ui_actions/types.ts @@ -0,0 +1,13 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; + +export interface DashboardUiActionsService { + getTriggerCompatibleActions?: UiActionsStart['getTriggerCompatibleActions']; +} diff --git a/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.stub.ts b/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.stub.ts new file mode 100644 index 0000000000000..033889959b89a --- /dev/null +++ b/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.stub.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 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 or the Server + * Side Public License, v 1. + */ +import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; +import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; +import { DashboardUiActionsService } from './types'; + +export type UIActionsServiceFactory = PluginServiceFactory; + +export const uiActionsServiceFactory: UIActionsServiceFactory = () => { + const pluginMock = uiActionsPluginMock.createStartContract(); + return { getTriggerCompatibleActions: pluginMock.getTriggerCompatibleActions }; +}; diff --git a/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.ts b/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.ts new file mode 100644 index 0000000000000..221380c6d0479 --- /dev/null +++ b/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.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 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 or the Server + * Side Public License, v 1. + */ + +import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; +import type { DashboardStartDependencies } from '../../plugin'; +import type { DashboardUiActionsService } from './types'; + +export type UsageCollectionServiceFactory = KibanaPluginServiceFactory< + DashboardUiActionsService, + DashboardStartDependencies +>; +export const uiActionsServiceFactory: UsageCollectionServiceFactory = ({ startPlugins }) => { + const { uiActions } = startPlugins; + if (!uiActions) return {}; + + const { getTriggerCompatibleActions } = uiActions; + return { + getTriggerCompatibleActions, + }; +}; diff --git a/src/plugins/dashboard/public/triggers/index.ts b/src/plugins/dashboard/public/triggers/index.ts new file mode 100644 index 0000000000000..96dfa814b949a --- /dev/null +++ b/src/plugins/dashboard/public/triggers/index.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 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 or the Server + * Side Public License, v 1. + */ +import { i18n } from '@kbn/i18n'; +import type { Trigger } from '@kbn/ui-actions-plugin/public'; + +export const ADD_PANEL_TRIGGER = 'ADD_PANEL_TRIGGER'; +export const addPanelMenuTrigger: Trigger = { + id: ADD_PANEL_TRIGGER, + title: i18n.translate('dashboard.addPanelMenuTrigger.title', { + defaultMessage: 'Add panel menu', + }), + description: i18n.translate('dashboard.addPanelMenuTrigger.description', { + defaultMessage: "A new action will appear to the dashboard's add panel menu", + }), +}; diff --git a/src/plugins/data/common/search/expressions/esql.ts b/src/plugins/data/common/search/expressions/esql.ts index ca6096c8160df..e1eb3bb7be452 100644 --- a/src/plugins/data/common/search/expressions/esql.ts +++ b/src/plugins/data/common/search/expressions/esql.ts @@ -208,10 +208,10 @@ export const getEsqlFn = ({ getStartDependencies }: EsqlFnArguments) => { IKibanaSearchResponse >({ params }, { abortSignal, strategy: ESQL_SEARCH_STRATEGY }).pipe( catchError((error) => { - if (!error.err) { + if (!error.attributes) { error.message = `Unexpected error from Elasticsearch: ${error.message}`; } else { - const { type, reason } = extractTypeAndReason(error.err.attributes); + const { type, reason } = extractTypeAndReason(error.attributes); if (type === 'parsing_exception') { error.message = `Couldn't parse Elasticsearch ES|QL query. Check your query and try again. Error: ${reason}`; } else { diff --git a/src/plugins/data/common/search/expressions/essql.ts b/src/plugins/data/common/search/expressions/essql.ts index 5012f01a749ac..b27d9137445f6 100644 --- a/src/plugins/data/common/search/expressions/essql.ts +++ b/src/plugins/data/common/search/expressions/essql.ts @@ -203,10 +203,10 @@ export const getEssqlFn = ({ getStartDependencies }: EssqlFnArguments) => { { abortSignal, strategy: SQL_SEARCH_STRATEGY } ).pipe( catchError((error) => { - if (!error.err) { + if (!error.attributes) { error.message = `Unexpected error from Elasticsearch: ${error.message}`; } else { - const { type, reason } = error.err.attributes; + const { type, reason } = error.attributes; if (type === 'parsing_exception') { error.message = `Couldn't parse Elasticsearch SQL query. You may need to add double quotes to names containing special characters. Check your query and try again. Error: ${reason}`; } else { diff --git a/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts b/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts index 1c6bc41e33216..4a2b6f27e9e9b 100644 --- a/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts +++ b/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts @@ -12,7 +12,7 @@ import { coreMock, themeServiceMock } from '@kbn/core/public/mocks'; import { IEsSearchRequest } from '../../../common/search'; import { SearchInterceptor } from './search_interceptor'; import { AbortError } from '@kbn/kibana-utils-plugin/public'; -import { PainlessError, EsError, type IEsError } from '@kbn/search-errors'; +import { EsError, type IEsError } from '@kbn/search-errors'; import { ISessionService, SearchSessionState } from '..'; import { bfetchPluginMock } from '@kbn/bfetch-plugin/public/mocks'; import { BfetchPublicSetup } from '@kbn/bfetch-plugin/public'; @@ -157,9 +157,9 @@ describe('SearchInterceptor', () => { expect(mockCoreSetup.notifications.toasts.addError).not.toBeCalled(); }); - test('Renders a PainlessError', async () => { + test('Renders a EsError', async () => { searchInterceptor.showError( - new PainlessError( + new EsError( { statusCode: 400, message: 'search_phase_execution_exception', @@ -167,6 +167,7 @@ describe('SearchInterceptor', () => { error: searchPhaseException.error, }, }, + 'search_phase_execution_exception', () => {} ) ); @@ -1467,22 +1468,6 @@ describe('SearchInterceptor', () => { }); }); - test('Should throw Painless error on server error with OSS format', async () => { - const mockResponse: IEsError = { - statusCode: 400, - message: 'search_phase_execution_exception', - attributes: { - error: searchPhaseException.error, - }, - }; - fetchMock.mockRejectedValueOnce(mockResponse); - const mockRequest: IEsSearchRequest = { - params: {}, - }; - const response = searchInterceptor.search(mockRequest); - await expect(response.toPromise()).rejects.toThrow(PainlessError); - }); - test('Should throw ES error on ES server error', async () => { const mockResponse: IEsError = { statusCode: 400, diff --git a/src/plugins/data/public/search/search_interceptor/search_interceptor.ts b/src/plugins/data/public/search/search_interceptor/search_interceptor.ts index 8bae4b3fc7c12..9fcb74e339403 100644 --- a/src/plugins/data/public/search/search_interceptor/search_interceptor.ts +++ b/src/plugins/data/public/search/search_interceptor/search_interceptor.ts @@ -50,13 +50,7 @@ import { BatchedFunc, BfetchPublicSetup, DISABLE_BFETCH } from '@kbn/bfetch-plug import { toMountPoint } from '@kbn/kibana-react-plugin/public'; import { AbortError, KibanaServerError } from '@kbn/kibana-utils-plugin/public'; import { BfetchRequestError } from '@kbn/bfetch-error'; -import { - EsError, - isEsError, - isPainlessError, - PainlessError, - renderSearchError, -} from '@kbn/search-errors'; +import { createEsError, isEsError, renderSearchError } from '@kbn/search-errors'; import { ENHANCED_ES_SEARCH_STRATEGY, IAsyncSearchOptions, @@ -238,9 +232,15 @@ export class SearchInterceptor { } ); }; - return isPainlessError(e) - ? new PainlessError(e, openInInspector, options?.indexPattern) - : new EsError(e, openInInspector); + return createEsError( + e, + openInInspector, + { + application: this.application, + docLinks: this.docLinks, + }, + options?.indexPattern + ); } return e instanceof Error ? e : new Error(e.message); @@ -585,10 +585,7 @@ export class SearchInterceptor { return; } - const searchErrorDisplay = renderSearchError({ - error: e, - application: this.application, - }); + const searchErrorDisplay = renderSearchError(e); if (searchErrorDisplay) { this.deps.toasts.addDanger({ diff --git a/src/plugins/data/server/ui_settings.ts b/src/plugins/data/server/ui_settings.ts index 46794e0a3c9c6..b7b665689c106 100644 --- a/src/plugins/data/server/ui_settings.ts +++ b/src/plugins/data/server/ui_settings.ts @@ -471,6 +471,7 @@ export function getUiSettings( '', }, }), + requiresPageReload: true, schema: enableValidations ? schema.arrayOf( schema.object({ diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx index 723c19b5b3d99..c4558f4590c5b 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx @@ -471,7 +471,7 @@ describe('discover responsive sidebar', function () { expect(findTestSubject(comp, 'fieldListGroupedAvailableFields-count').text()).toBe('1'); expect(findTestSubject(comp, 'fieldListGrouped__ariaDescription').text()).toBe( - '1 popular field. 1 available field. 0 empty fields. 0 meta fields.' + '1 popular field. 1 available field. 0 meta fields.' ); expect(mockCalcFieldCounts.mock.calls.length).toBe(1); }); diff --git a/src/plugins/discover/public/components/common/error_callout.tsx b/src/plugins/discover/public/components/common/error_callout.tsx index a2aa2b478a3dc..3fb91f196ee3a 100644 --- a/src/plugins/discover/public/components/common/error_callout.tsx +++ b/src/plugins/discover/public/components/common/error_callout.tsx @@ -22,10 +22,7 @@ export const ErrorCallout = ({ title, error }: Props) => { const { core } = useDiscoverServices(); const { euiTheme } = useEuiTheme(); - const searchErrorDisplay = renderSearchError({ - error, - application: core.application, - }); + const searchErrorDisplay = renderSearchError(error); return ( = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, - 'observability:profilingUseLegacyCo2Calculation': { - type: 'boolean', - _meta: { description: 'Non-default value of setting.' }, - }, 'observability:profilingCostPervCPUPerHour': { type: 'integer', _meta: { description: 'Non-default value of setting.' }, diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts index 33518b5389f57..e1de9aa7842d5 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -160,7 +160,6 @@ export interface UsageStats { 'observability:profilingPervCPUWattArm64': number; 'observability:profilingCo2PerKWH': number; 'observability:profilingDatacenterPUE': number; - 'observability:profilingUseLegacyCo2Calculation': boolean; 'observability:profilingCostPervCPUPerHour': number; 'observability:profilingAWSCostDiscountRate': number; } diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index ec17c9b9d1a3b..e04e83dc46feb 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -10091,12 +10091,6 @@ "description": "Non-default value of setting." } }, - "observability:profilingUseLegacyCo2Calculation": { - "type": "boolean", - "_meta": { - "description": "Non-default value of setting." - } - }, "observability:profilingCostPervCPUPerHour": { "type": "integer", "_meta": { diff --git a/src/plugins/vis_types/timeseries/public/application/lib/set_is_reversed.js b/src/plugins/vis_types/timeseries/public/application/lib/set_is_reversed.js index c2a2b4bb86af1..e37c55ab8a246 100644 --- a/src/plugins/vis_types/timeseries/public/application/lib/set_is_reversed.js +++ b/src/plugins/vis_types/timeseries/public/application/lib/set_is_reversed.js @@ -7,9 +7,7 @@ */ import color from 'color'; -import { getUISettings } from '../../services'; - -const isDarkTheme = () => getUISettings().get('theme:darkMode'); +import { getCoreStart } from '../../services'; /** * Returns true if the color that is passed has low luminosity @@ -23,7 +21,7 @@ const isColorDark = (c) => { * Defaults to checking `theme:darkMode`. */ export const isThemeDark = (currentTheme) => { - let themeIsDark = currentTheme || isDarkTheme(); + let themeIsDark = currentTheme || getCoreStart().theme.getTheme().darkMode; // If passing a string, check the luminosity if (typeof currentTheme === 'string') { diff --git a/src/plugins/vis_types/vega/public/plugin.ts b/src/plugins/vis_types/vega/public/plugin.ts index 54f319850d817..96e383979b854 100644 --- a/src/plugins/vis_types/vega/public/plugin.ts +++ b/src/plugins/vis_types/vega/public/plugin.ts @@ -20,7 +20,7 @@ import { setData, setDataViews, setInjectedVars, - setUISettings, + setThemeService, setDocLinks, setMapsEms, setUsageCollectionStart, @@ -77,8 +77,6 @@ export class VegaPlugin implements Plugin { enableExternalUrls: this.initializerContext.config.get().enableExternalUrls, }); - setUISettings(core.uiSettings); - const visualizationDependencies: Readonly = { core, plugins: { @@ -104,6 +102,7 @@ export class VegaPlugin implements Plugin { setDataViews(dataViews); setDocLinks(core.docLinks); setMapsEms(mapsEms); + setThemeService(core.theme); setUsageCollectionStart(usageCollection); } } diff --git a/src/plugins/vis_types/vega/public/services.ts b/src/plugins/vis_types/vega/public/services.ts index 4b3e0ca72cdc3..04c5c5cf1f447 100644 --- a/src/plugins/vis_types/vega/public/services.ts +++ b/src/plugins/vis_types/vega/public/services.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { NotificationsStart, IUiSettingsClient, DocLinksStart } from '@kbn/core/public'; +import type { NotificationsStart, DocLinksStart, ThemeServiceStart } from '@kbn/core/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; @@ -22,7 +22,6 @@ export const [getDataViews, setDataViews] = export const [getNotifications, setNotifications] = createGetterSetter('Notifications'); -export const [getUISettings, setUISettings] = createGetterSetter('UISettings'); export const [getMapsEms, setMapsEms] = createGetterSetter('mapsEms'); export const [getInjectedVars, setInjectedVars] = createGetterSetter<{ @@ -35,3 +34,6 @@ export const [getDocLinks, setDocLinks] = createGetterSetter('doc export const [getUsageCollectionStart, setUsageCollectionStart] = createGetterSetter('UsageCollection'); + +export const [getThemeService, setThemeService] = + createGetterSetter('ThemeServiceStart'); diff --git a/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts index eafe75534154a..a42d76681c4ff 100644 --- a/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts +++ b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts @@ -24,7 +24,7 @@ import { setInjectedVars, setData, setNotifications, - setUISettings, + setThemeService, setDataViews, } from '../../services'; import { initVegaLayer, initTmsRasterLayer } from './layers'; @@ -121,7 +121,7 @@ describe('vega_map_view/view', () => { setData(dataPluginStart); setDataViews(dataViewsStart); setNotifications(coreStart.notifications); - setUISettings(coreStart.uiSettings); + setThemeService(coreStart.theme); async function createVegaMapView() { await vegaParser.parseAsync(); diff --git a/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts index fe1d6a27f3605..7e4ca5a19dd6a 100644 --- a/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts +++ b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts @@ -15,7 +15,7 @@ import { maplibregl } from '@kbn/mapbox-gl'; import { initTmsRasterLayer, initVegaLayer } from './layers'; import { VegaBaseView } from '../vega_base_view'; -import { getUISettings } from '../../services'; +import { getThemeService } from '../../services'; import { defaultMapConfig, defaultMabBoxStyle, vegaLayerId } from './constants'; import { validateZoomSettings, injectMapPropsIntoSpec } from './utils'; @@ -98,7 +98,7 @@ export class VegaMapView extends VegaBaseView { const { mapStyle, emsTileServiceId } = this._parser.mapConfig; // if (mapStyle) { - const isDarkMode: boolean = getUISettings().get('theme:darkMode'); + const isDarkMode: boolean = getThemeService().getTheme().darkMode; return emsTileServiceId ? emsTileServiceId : await this._serviceSettings.getDefaultTmsLayer(isDarkMode); diff --git a/test/examples/unified_field_list_examples/field_stats.ts b/test/examples/unified_field_list_examples/field_stats.ts index de662e737cb2d..9ed28ee618bf3 100644 --- a/test/examples/unified_field_list_examples/field_stats.ts +++ b/test/examples/unified_field_list_examples/field_stats.ts @@ -54,7 +54,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { describe('field distribution', () => { before(async () => { - await PageObjects.unifiedFieldList.toggleSidebarSection('empty'); // it will allow to render more fields in Available fields section + await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); // it will allow to render more fields in Available fields section }); it('should return an auto histogram for numbers and top values', async () => { diff --git a/test/functional/apps/dashboard/group6/dashboard_esql_chart.ts b/test/functional/apps/dashboard/group6/dashboard_esql_chart.ts new file mode 100644 index 0000000000000..f69477b926b71 --- /dev/null +++ b/test/functional/apps/dashboard/group6/dashboard_esql_chart.ts @@ -0,0 +1,73 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const retry = getService('retry'); + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['common', 'dashboard', 'timePicker', 'header']); + const testSubjects = getService('testSubjects'); + const monacoEditor = getService('monacoEditor'); + const dashboardAddPanel = getService('dashboardAddPanel'); + + describe('dashboard add ES|QL chart', function () { + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.importExport.load( + 'test/functional/fixtures/kbn_archiver/dashboard/current/kibana' + ); + await kibanaServer.uiSettings.replace({ + defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', + }); + }); + + it('should add an ES|QL datatable chart when the ES|QL panel action is clicked', async () => { + await PageObjects.dashboard.navigateToApp(); + await PageObjects.dashboard.clickNewDashboard(); + await PageObjects.timePicker.setDefaultDataRange(); + await PageObjects.dashboard.switchToEditMode(); + await dashboardAddPanel.clickEditorMenuButton(); + await dashboardAddPanel.clickAddNewPanelFromUIActionLink('ES|QL'); + await dashboardAddPanel.expectEditorMenuClosed(); + await PageObjects.dashboard.waitForRenderComplete(); + + await retry.try(async () => { + const panelCount = await PageObjects.dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + }); + + expect(await testSubjects.exists('lnsDataTable')).to.be(true); + }); + + it('should remove the panel if cancel button is clicked', async () => { + await testSubjects.click('cancelFlyoutButton'); + await PageObjects.dashboard.waitForRenderComplete(); + await retry.try(async () => { + const panelCount = await PageObjects.dashboard.getPanelCount(); + expect(panelCount).to.eql(0); + }); + }); + + it('should be able to edit the query and render another chart', async () => { + await dashboardAddPanel.clickEditorMenuButton(); + await dashboardAddPanel.clickAddNewPanelFromUIActionLink('ES|QL'); + await dashboardAddPanel.expectEditorMenuClosed(); + await PageObjects.dashboard.waitForRenderComplete(); + + await monacoEditor.setCodeEditorValue('from logstash-* | stats maxB = max(bytes)'); + await testSubjects.click('TextBasedLangEditor-run-query-button'); + await PageObjects.header.waitUntilLoadingHasFinished(); + + await testSubjects.click('applyFlyoutButton'); + expect(await testSubjects.exists('mtrVis')).to.be(true); + }); + }); +} diff --git a/test/functional/apps/dashboard/group6/index.ts b/test/functional/apps/dashboard/group6/index.ts index 95d18049053ae..75decec10fb4c 100644 --- a/test/functional/apps/dashboard/group6/index.ts +++ b/test/functional/apps/dashboard/group6/index.ts @@ -35,5 +35,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { // If we don't use the timestamp in the URL, the colors in the charts will be different. loadTestFile(require.resolve('./dashboard_snapshots')); loadTestFile(require.resolve('./embeddable_library')); + loadTestFile(require.resolve('./dashboard_esql_chart')); }); } diff --git a/test/functional/apps/discover/group3/_drag_drop.ts b/test/functional/apps/discover/group3/_drag_drop.ts index 386844e82322f..3988daa287bd6 100644 --- a/test/functional/apps/discover/group3/_drag_drop.ts +++ b/test/functional/apps/discover/group3/_drag_drop.ts @@ -48,7 +48,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '53 available fields. 0 empty fields. 3 meta fields.' + '53 available fields. 3 meta fields.' ); expect((await PageObjects.discover.getColumnHeaders()).join(', ')).to.be( '@timestamp, Document' @@ -72,7 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '53 available fields. 0 empty fields. 3 meta fields.' + '53 available fields. 3 meta fields.' ); expect((await PageObjects.discover.getColumnHeaders()).join(', ')).to.be( '@timestamp, Document' diff --git a/test/functional/apps/discover/group3/_sidebar.ts b/test/functional/apps/discover/group3/_sidebar.ts index 01e357b7f01e6..313c350209930 100644 --- a/test/functional/apps/discover/group3/_sidebar.ts +++ b/test/functional/apps/discover/group3/_sidebar.ts @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const fieldEditor = getService('fieldEditor'); const retry = getService('retry'); const dataGrid = getService('dataGrid'); - const INITIAL_FIELD_LIST_SUMMARY = '53 available fields. 0 empty fields. 3 meta fields.'; + const INITIAL_FIELD_LIST_SUMMARY = '53 available fields. 3 meta fields.'; describe('discover sidebar', function describeIndexTests() { before(async function () { @@ -72,7 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('first updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '7 available fields. 0 empty fields. 2 meta fields.' + '7 available fields. 2 meta fields.' ); }); @@ -81,7 +81,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('second updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '13 available fields. 0 empty fields. 3 meta fields.' + '13 available fields. 3 meta fields.' ); }); @@ -155,7 +155,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('first updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '30 available fields. 0 empty fields. 2 meta fields.' + '30 available fields. 2 meta fields.' ); }); @@ -164,7 +164,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('second updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '4 available fields. 0 empty fields. 0 meta fields.' + '4 available fields. 0 meta fields.' ); }); @@ -179,7 +179,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '2 available fields. 0 empty fields. 0 meta fields.' + '2 available fields. 0 meta fields.' ); }); @@ -194,7 +194,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '4 available fields. 0 empty fields. 0 meta fields.' + '4 available fields. 0 meta fields.' ); }); @@ -300,10 +300,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(availableFields.join(', ')).to.be(expectedInitialAvailableFields); // Available fields after scrolling down - const emptySectionButton = await find.byCssSelector( - PageObjects.unifiedFieldList.getSidebarSectionSelector('empty', true) + const metaSectionButton = await find.byCssSelector( + PageObjects.unifiedFieldList.getSidebarSectionSelector('meta', true) ); - await emptySectionButton.scrollIntoViewIfNecessary(); + await metaSectionButton.scrollIntoViewIfNecessary(); await retry.waitFor('list to update after scrolling', async () => { availableFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames( @@ -316,12 +316,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { `${expectedInitialAvailableFields}, url, utc_time, xss` ); - // Expand Empty section - await PageObjects.unifiedFieldList.toggleSidebarSection('empty'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('empty')).join(', ') - ).to.be(''); - // Expand Meta section await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); expect( @@ -354,16 +348,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.be(true); // Available fields after scrolling down - const emptySectionButton = await find.byCssSelector( - PageObjects.unifiedFieldList.getSidebarSectionSelector('empty', true) + const metaSectionButton = await find.byCssSelector( + PageObjects.unifiedFieldList.getSidebarSectionSelector('meta', true) ); - await emptySectionButton.scrollIntoViewIfNecessary(); - - // Expand Empty section - await PageObjects.unifiedFieldList.toggleSidebarSection('empty'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('empty')).join(', ') - ).to.be(''); + await metaSectionButton.scrollIntoViewIfNecessary(); // Expand Meta section await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); @@ -378,7 +366,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.be('relatedContent'); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '53 available fields. 1 unmapped field. 0 empty fields. 3 meta fields.' + '53 available fields. 1 unmapped field. 3 meta fields.' ); }); @@ -399,7 +387,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(availableFields.includes('@message')).to.be(true); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '2 selected fields. 2 popular fields. 53 available fields. 0 empty fields. 3 meta fields.' + '2 selected fields. 2 popular fields. 53 available fields. 3 meta fields.' ); await PageObjects.unifiedFieldList.clickFieldListItemRemove('@message'); @@ -419,7 +407,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.be('@message, _id, extension'); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '3 selected fields. 3 popular fields. 53 available fields. 0 empty fields. 3 meta fields.' + '3 selected fields. 3 popular fields. 53 available fields. 3 meta fields.' ); }); @@ -471,7 +459,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '53 available fields. 0 empty fields. 3 meta fields.' + '53 available fields. 3 meta fields.' ); }); @@ -493,7 +481,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '0 available fields. 0 empty fields. 0 meta fields.' + '0 available fields. 0 meta fields.' ); await testSubjects.missingOrFail( `${PageObjects.unifiedFieldList.getSidebarSectionSelector('available')}-fetchWarning` @@ -538,7 +526,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '6 available fields. 0 empty fields. 3 meta fields.' + '6 available fields. 3 meta fields.' ); await PageObjects.discover.selectIndexPattern('with-timefield'); @@ -617,7 +605,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '6873 available fields. 0 empty fields. 3 meta fields.' + '6873 available fields. 3 meta fields.' ); await PageObjects.discover.selectIndexPattern('logstash-*'); @@ -656,7 +644,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '54 available fields. 0 empty fields. 3 meta fields.' + '54 available fields. 3 meta fields.' ); let allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); @@ -675,7 +663,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '54 available fields. 0 empty fields. 3 meta fields.' + '54 available fields. 3 meta fields.' ); allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); @@ -712,7 +700,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // check that the sidebar is rendered expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '54 available fields. 0 empty fields. 3 meta fields.' + '54 available fields. 3 meta fields.' ); let allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); expect(allFields.includes('_invalid-runtimefield')).to.be(true); @@ -769,7 +757,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '7 available fields. 0 empty fields. 3 meta fields.' + '7 available fields. 3 meta fields.' ); await kibanaServer.importExport.unload( diff --git a/test/functional/services/dashboard/add_panel.ts b/test/functional/services/dashboard/add_panel.ts index 00a91dff87b85..65adf6dee5359 100644 --- a/test/functional/services/dashboard/add_panel.ts +++ b/test/functional/services/dashboard/add_panel.ts @@ -77,6 +77,10 @@ export class DashboardAddPanelService extends FtrService { await this.testSubjects.click(`createNew-${type}`); } + async clickAddNewPanelFromUIActionLink(type: string) { + await this.testSubjects.click(`create-action-${type}`); + } + async addEveryEmbeddableOnCurrentPage() { this.log.debug('addEveryEmbeddableOnCurrentPage'); const itemList = await this.testSubjects.find('savedObjectsFinderTable'); diff --git a/x-pack/packages/kbn-elastic-assistant-common/package.json b/x-pack/packages/kbn-elastic-assistant-common/package.json index 0f3f3f36814cc..9ecfbc4c81a07 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/package.json +++ b/x-pack/packages/kbn-elastic-assistant-common/package.json @@ -2,5 +2,6 @@ "name": "@kbn/elastic-assistant-common", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/kbn-elastic-assistant/package.json b/x-pack/packages/kbn-elastic-assistant/package.json index 7bc41b6dffe64..7b944a6b2021c 100644 --- a/x-pack/packages/kbn-elastic-assistant/package.json +++ b/x-pack/packages/kbn-elastic-assistant/package.json @@ -2,5 +2,6 @@ "name": "@kbn/elastic-assistant", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/kbn-random-sampling/src/ui/slider_control/index.tsx b/x-pack/packages/kbn-random-sampling/src/ui/slider_control/index.tsx index 1f7495e431298..40a9256f9ba07 100644 --- a/x-pack/packages/kbn-random-sampling/src/ui/slider_control/index.tsx +++ b/x-pack/packages/kbn-random-sampling/src/ui/slider_control/index.tsx @@ -8,7 +8,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiRange, EuiText, useEuiTheme } from '@elastic/eui'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { TooltipWrapper } from './tooltip_wrapper'; +import { TooltipWrapper } from '@kbn/visualization-utils'; export interface ControlSliderProps { /** Allowed values to show on the Control Slider */ diff --git a/x-pack/packages/kbn-random-sampling/src/ui/slider_control/tooltip_wrapper.tsx b/x-pack/packages/kbn-random-sampling/src/ui/slider_control/tooltip_wrapper.tsx deleted file mode 100644 index 5ab7800e05349..0000000000000 --- a/x-pack/packages/kbn-random-sampling/src/ui/slider_control/tooltip_wrapper.tsx +++ /dev/null @@ -1,34 +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 { EuiToolTip, EuiToolTipProps } from '@elastic/eui'; - -export type TooltipWrapperProps = Partial> & { - tooltipContent: string; - /** When the condition is truthy, the tooltip will be shown */ - condition: boolean; -}; - -export const TooltipWrapper: React.FunctionComponent = ({ - children, - condition, - tooltipContent, - ...tooltipProps -}) => { - return ( - <> - {condition ? ( - - <>{children} - - ) : ( - children - )} - - ); -}; diff --git a/x-pack/packages/kbn-random-sampling/tsconfig.json b/x-pack/packages/kbn-random-sampling/tsconfig.json index 5c5673e4b6787..b4b34fcb94036 100644 --- a/x-pack/packages/kbn-random-sampling/tsconfig.json +++ b/x-pack/packages/kbn-random-sampling/tsconfig.json @@ -13,6 +13,7 @@ ], "kbn_references": [ "@kbn/i18n-react", + "@kbn/visualization-utils", ], "exclude": [ "target/**/*", diff --git a/x-pack/packages/ml/aiops_components/package.json b/x-pack/packages/ml/aiops_components/package.json index fd64c49c074d3..ee8841277f96f 100644 --- a/x-pack/packages/ml/aiops_components/package.json +++ b/x-pack/packages/ml/aiops_components/package.json @@ -5,5 +5,8 @@ "homepage": "https://docs.elastic.dev/kibana-dev-docs/api/kbn-aiops-components", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": [ + "*.scss" + ] } \ No newline at end of file diff --git a/x-pack/packages/ml/anomaly_utils/package.json b/x-pack/packages/ml/anomaly_utils/package.json index f49b343d58cd1..3bd52876b8cda 100644 --- a/x-pack/packages/ml/anomaly_utils/package.json +++ b/x-pack/packages/ml/anomaly_utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/ml-anomaly-utils", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/ml/creation_wizard_utils/package.json b/x-pack/packages/ml/creation_wizard_utils/package.json index c48eab9641bde..adbca67cdfbaf 100644 --- a/x-pack/packages/ml/creation_wizard_utils/package.json +++ b/x-pack/packages/ml/creation_wizard_utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/ml-creation-wizard-utils", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/ml/data_frame_analytics_utils/package.json b/x-pack/packages/ml/data_frame_analytics_utils/package.json index 1377dab2d1814..d2817a1edf1a4 100644 --- a/x-pack/packages/ml/data_frame_analytics_utils/package.json +++ b/x-pack/packages/ml/data_frame_analytics_utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/ml-data-frame-analytics-utils", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } diff --git a/x-pack/packages/ml/data_grid/package.json b/x-pack/packages/ml/data_grid/package.json index 337af96195a8f..0df121b27abbb 100644 --- a/x-pack/packages/ml/data_grid/package.json +++ b/x-pack/packages/ml/data_grid/package.json @@ -2,5 +2,6 @@ "name": "@kbn/ml-data-grid", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/ml/date_picker/package.json b/x-pack/packages/ml/date_picker/package.json index 720cc013c10ee..62eece475d16d 100644 --- a/x-pack/packages/ml/date_picker/package.json +++ b/x-pack/packages/ml/date_picker/package.json @@ -2,5 +2,6 @@ "name": "@kbn/ml-date-picker", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } diff --git a/x-pack/packages/ml/date_picker/src/components/full_time_range_selector.tsx b/x-pack/packages/ml/date_picker/src/components/full_time_range_selector.tsx index cb890172bbdd9..5fd828feb8fa4 100644 --- a/x-pack/packages/ml/date_picker/src/components/full_time_range_selector.tsx +++ b/x-pack/packages/ml/date_picker/src/components/full_time_range_selector.tsx @@ -118,14 +118,15 @@ export const FullTimeRangeSelector: FC = (props) => callback(fullTimeRange); } } catch (e) { - toasts.addDanger( - i18n.translate( + toasts.addError(e, { + title: i18n.translate( 'xpack.ml.datePicker.fullTimeRangeSelector.errorSettingTimeRangeNotification', { - defaultMessage: 'An error occurred setting the time range.', + defaultMessage: + 'An error occurred setting the time range. Please set the desired start and end times.', } - ) - ); + ), + }); } }, [ timefilter, diff --git a/x-pack/packages/ml/date_picker/src/services/full_time_range_selector_service.test.ts b/x-pack/packages/ml/date_picker/src/services/full_time_range_selector_service.test.ts index c38357d77dbc7..285bae4fd199b 100644 --- a/x-pack/packages/ml/date_picker/src/services/full_time_range_selector_service.test.ts +++ b/x-pack/packages/ml/date_picker/src/services/full_time_range_selector_service.test.ts @@ -20,7 +20,11 @@ import { getTimeFieldRange } from './time_field_range'; const mockParamsFactory = () => ({ timefilter: { setTime: jest.fn() } as unknown as TimefilterContract, dataView: { getIndexPattern: jest.fn(), getRuntimeMappings: jest.fn() } as unknown as DataView, - toasts: { addWarning: jest.fn(), addDanger: jest.fn() } as unknown as ToastsStart, + toasts: { + addWarning: jest.fn(), + addDanger: jest.fn(), + addError: jest.fn(), + } as unknown as ToastsStart, }); describe('setFullTimeRange', () => { diff --git a/x-pack/packages/ml/date_picker/src/services/full_time_range_selector_service.ts b/x-pack/packages/ml/date_picker/src/services/full_time_range_selector_service.ts index c4cdd23995ae7..6d824989c13e0 100644 --- a/x-pack/packages/ml/date_picker/src/services/full_time_range_selector_service.ts +++ b/x-pack/packages/ml/date_picker/src/services/full_time_range_selector_service.ts @@ -81,14 +81,15 @@ export async function setFullTimeRange( }); } } catch (error) { - toasts.addDanger( - i18n.translate( + toasts.addError(error, { + title: i18n.translate( 'xpack.ml.datePicker.fullTimeRangeSelector.errorSettingTimeRangeNotification', { - defaultMessage: 'An error occurred setting the time range.', + defaultMessage: + 'An error occurred setting the time range. Please set the desired start and end times.', } - ) - ); + ), + }); } } diff --git a/x-pack/packages/ml/date_utils/package.json b/x-pack/packages/ml/date_utils/package.json index fcd9fd7bc3b5a..7d3e7515296f5 100644 --- a/x-pack/packages/ml/date_utils/package.json +++ b/x-pack/packages/ml/date_utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/ml-date-utils", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/ml/in_memory_table/package.json b/x-pack/packages/ml/in_memory_table/package.json index 54cf41c738653..59a73fb1d7870 100644 --- a/x-pack/packages/ml/in_memory_table/package.json +++ b/x-pack/packages/ml/in_memory_table/package.json @@ -2,5 +2,6 @@ "name": "@kbn/ml-in-memory-table", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/observability/alert_details/package.json b/x-pack/packages/observability/alert_details/package.json index 2764095b1074f..607fe22afa7f7 100644 --- a/x-pack/packages/observability/alert_details/package.json +++ b/x-pack/packages/observability/alert_details/package.json @@ -3,5 +3,6 @@ "descriptio": "Helper and components related to alert details", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/security-solution/data_table/package.json b/x-pack/packages/security-solution/data_table/package.json index 53c640c3d9c6a..c4a1c789b3c5c 100644 --- a/x-pack/packages/security-solution/data_table/package.json +++ b/x-pack/packages/security-solution/data_table/package.json @@ -2,5 +2,6 @@ "name": "@kbn/securitysolution-data-table", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/package.json b/x-pack/packages/security-solution/ecs_data_quality_dashboard/package.json index 32fc5f7572c89..14601e6ea3590 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/package.json +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/package.json @@ -2,5 +2,6 @@ "name": "@kbn/ecs-data-quality-dashboard", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/security-solution/navigation/package.json b/x-pack/packages/security-solution/navigation/package.json index 8170a942224b4..34ad9f45d71ab 100644 --- a/x-pack/packages/security-solution/navigation/package.json +++ b/x-pack/packages/security-solution/navigation/package.json @@ -2,5 +2,6 @@ "name": "@kbn/security-solution-navigation", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/security-solution/side_nav/package.json b/x-pack/packages/security-solution/side_nav/package.json index c80baa25af3e2..6d5af1d22427f 100644 --- a/x-pack/packages/security-solution/side_nav/package.json +++ b/x-pack/packages/security-solution/side_nav/package.json @@ -2,5 +2,6 @@ "name": "@kbn/security-solution-side-nav", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/packages/security-solution/upselling/package.json b/x-pack/packages/security-solution/upselling/package.json index 92bd9e35078fa..737e14b89c932 100644 --- a/x-pack/packages/security-solution/upselling/package.json +++ b/x-pack/packages/security-solution/upselling/package.json @@ -2,5 +2,6 @@ "name": "@kbn/security-solution-upselling", "private": true, "version": "1.0.0", - "license": "Elastic License 2.0" + "license": "Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/x-pack/plugins/actions/common/types.ts b/x-pack/plugins/actions/common/types.ts index 44d7516595d19..2560cbae3f7e7 100644 --- a/x-pack/plugins/actions/common/types.ts +++ b/x-pack/plugins/actions/common/types.ts @@ -6,6 +6,7 @@ */ import { LicenseType } from '@kbn/licensing-plugin/common/types'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; export { AlertingConnectorFeatureId, @@ -47,6 +48,7 @@ export interface ActionTypeExecutorResult { serviceMessage?: string; data?: Data; retry?: null | boolean | Date; + errorSource?: TaskErrorSource; } export type ActionTypeExecutorRawResult = ActionTypeExecutorResult & { diff --git a/x-pack/plugins/actions/server/lib/action_executor.test.ts b/x-pack/plugins/actions/server/lib/action_executor.test.ts index c58e16a11aa4a..9af58047878d1 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.test.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.test.ts @@ -23,6 +23,8 @@ import { securityMock } from '@kbn/security-plugin/server/mocks'; import { finished } from 'stream/promises'; import { PassThrough } from 'stream'; import { SecurityConnectorFeatureId } from '../../common'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; +import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; const actionExecutor = new ActionExecutor({ isESOCanEncrypt: true }); const services = actionsMock.createServices(); @@ -720,6 +722,7 @@ test('successfully executes with system connector', async () => { secrets: {}, params: { foo: true }, logger: loggerMock, + request: {}, }); expect(loggerMock.debug).toBeCalledWith( @@ -812,6 +815,75 @@ test('successfully executes with system connector', async () => { `); }); +test('passes the Kibana request on the executor of a system action', async () => { + const actionType: jest.Mocked = { + id: '.cases', + name: 'Cases', + minimumLicenseRequired: 'platinum', + supportedFeatureIds: ['alerting'], + isSystemActionType: true, + validate: { + config: { schema: schema.any() }, + secrets: { schema: schema.any() }, + params: { schema: schema.any() }, + }, + executor: jest.fn(), + }; + + actionTypeRegistry.get.mockReturnValueOnce(actionType); + await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); + + expect(actionType.executor).toHaveBeenCalledWith({ + actionId: 'system-connector-.cases', + services: expect.anything(), + config: {}, + secrets: {}, + params: { foo: true }, + logger: loggerMock, + request: {}, + }); +}); + +test('does not pass the Kibana request on the executor if the action is not a system action', async () => { + const actionType: jest.Mocked = { + id: 'test', + name: 'Test', + minimumLicenseRequired: 'basic', + supportedFeatureIds: ['alerting'], + validate: { + config: { schema: schema.object({ bar: schema.boolean() }) }, + secrets: { schema: schema.object({ baz: schema.boolean() }) }, + params: { schema: schema.object({ foo: schema.boolean() }) }, + }, + executor: jest.fn(), + }; + + const actionSavedObject = { + id: '1', + type: 'action', + attributes: { + name: '1', + actionTypeId: 'test', + config: { + bar: true, + }, + secrets: { + baz: true, + }, + isMissingSecrets: false, + }, + references: [], + }; + + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); + actionTypeRegistry.get.mockReturnValueOnce(actionType); + await actionExecutor.execute(executeParams); + + const args = actionType.executor.mock.calls[0][0]; + + expect(args.request).toBeUndefined(); +}); + test('successfully authorize system actions', async () => { const actionType: jest.Mocked = { id: '.cases', @@ -841,6 +913,53 @@ test('successfully authorize system actions', async () => { }); }); +test('actionType Executor returns status "error" and an error message', async () => { + const actionType: jest.Mocked = { + id: 'test', + name: 'Test', + minimumLicenseRequired: 'basic', + supportedFeatureIds: ['alerting'], + validate: { + config: { schema: schema.any() }, + secrets: { schema: schema.any() }, + params: { schema: schema.any() }, + }, + executor: jest.fn().mockReturnValue({ + actionId: 'test', + status: 'error', + message: 'test error message', + retry: true, + }), + }; + const actionSavedObject = { + id: '1', + type: 'action', + attributes: { + name: '1', + actionTypeId: 'test', + config: { + bar: true, + }, + secrets: { + baz: true, + }, + isMissingSecrets: false, + }, + references: [], + }; + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); + actionTypeRegistry.get.mockReturnValueOnce(actionType); + const result = await actionExecutor.execute(executeParams); + + expect(result).toEqual({ + actionId: 'test', + errorSource: TaskErrorSource.USER, + message: 'test error message', + retry: true, + status: 'error', + }); +}); + test('Execute of SentinelOne sub-actions require create privilege', async () => { const actionType: jest.Mocked = { id: '.sentinelone', @@ -1060,6 +1179,7 @@ test('throws an error when config is invalid', async () => { status: 'error', retry: false, message: `error validating action type config: [param1]: expected value of type [string] but got [undefined]`, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -1099,6 +1219,7 @@ test('returns an error when connector is invalid', async () => { status: 'error', retry: false, message: `error validating action type connector: config must be defined`, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -1137,6 +1258,7 @@ test('throws an error when params is invalid', async () => { status: 'error', retry: false, message: `error validating action params: [param1]: expected value of type [string] but got [undefined]`, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -1144,9 +1266,13 @@ test('throws an error when failing to load action through savedObjectsClient', a encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockRejectedValueOnce( new Error('No access') ); - await expect(actionExecutor.execute(executeParams)).rejects.toThrowErrorMatchingInlineSnapshot( - `"No access"` - ); + + try { + await actionExecutor.execute(executeParams); + } catch (e) { + expect(e.message).toBe('No access'); + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } }); test('throws an error if actionType is not enabled', async () => { @@ -1176,9 +1302,13 @@ test('throws an error if actionType is not enabled', async () => { actionTypeRegistry.ensureActionTypeEnabled.mockImplementationOnce(() => { throw new Error('not enabled for test'); }); - await expect(actionExecutor.execute(executeParams)).rejects.toThrowErrorMatchingInlineSnapshot( - `"not enabled for test"` - ); + + try { + await actionExecutor.execute(executeParams); + } catch (e) { + expect(e.message).toBe('not enabled for test'); + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } expect(actionTypeRegistry.ensureActionTypeEnabled).toHaveBeenCalledWith('test'); }); @@ -1278,6 +1408,7 @@ test('should not throws an error if actionType is system action', async () => { secrets: {}, params: { foo: true }, logger: loggerMock, + request: {}, }); }); @@ -1293,11 +1424,15 @@ test('throws an error when passing isESOCanEncrypt with value of false', async ( inMemoryConnectors: [], getActionsAuthorizationWithRequest, }); - await expect( - customActionExecutor.execute(executeParams) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command."` - ); + + try { + await customActionExecutor.execute(executeParams); + } catch (e) { + expect(e.message).toBe( + 'Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.' + ); + expect(getErrorSource(e)).toBe(TaskErrorSource.USER); + } }); test('should not throw error if action is preconfigured and isESOCanEncrypt is false', async () => { @@ -1510,6 +1645,7 @@ test('should not throw error if action is system action and isESOCanEncrypt is f secrets: {}, params: { foo: true }, logger: loggerMock, + request: {}, }); expect(loggerMock.debug).toBeCalledWith( diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index 69aab56e4e5b3..afcb96bbde8be 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -6,7 +6,7 @@ */ import type { PublicMethodsOf } from '@kbn/utility-types'; -import { Logger, KibanaRequest } from '@kbn/core/server'; +import { KibanaRequest, Logger } from '@kbn/core/server'; import { cloneDeep } from 'lodash'; import { set } from '@kbn/safer-lodash-set'; import { withSpan } from '@kbn/apm-utils'; @@ -14,24 +14,25 @@ import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin import { SpacesServiceStart } from '@kbn/spaces-plugin/server'; import { IEventLogger, SAVED_OBJECT_REL_PRIMARY } from '@kbn/event-log-plugin/server'; import { SecurityPluginStart } from '@kbn/security-plugin/server'; +import { createTaskRunError, TaskErrorSource } from '@kbn/task-manager-plugin/server'; import { getGenAiTokenTracking, shouldTrackGenAiToken } from './gen_ai_token_tracking'; import { - validateParams, validateConfig, - validateSecrets, validateConnector, + validateParams, + validateSecrets, } from './validate_with_schema'; import { ActionType, - ActionTypeExecutorResult, + ActionTypeConfig, ActionTypeExecutorRawResult, + ActionTypeExecutorResult, ActionTypeRegistryContract, + ActionTypeSecrets, GetServicesFunction, InMemoryConnector, RawAction, ValidatorServices, - ActionTypeSecrets, - ActionTypeConfig, } from '../types'; import { EVENT_LOG_ACTIONS } from '../constants/event_log'; import { ActionExecutionSource } from './action_execution_source'; @@ -147,7 +148,11 @@ export class ActionExecutor { } if (!actionTypeRegistry.isActionExecutable(actionId, actionTypeId, { notifyUsage: true })) { - actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); + try { + actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); + } catch (e) { + throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + } } const actionType = actionTypeRegistry.get(actionTypeId); const configurationUtilities = actionTypeRegistry.getUtils(); @@ -259,12 +264,14 @@ export class ActionExecutor { configurationUtilities, logger, source, + ...(actionType.isSystemActionType ? { request } : {}), }); + + if (rawResult && rawResult.status === 'error') { + rawResult.errorSource = TaskErrorSource.USER; + } } catch (err) { - if ( - err.reason === ActionExecutionErrorReason.Validation || - err.reason === ActionExecutionErrorReason.Authorization - ) { + if (err.reason === ActionExecutionErrorReason.Authorization) { rawResult = err.result; } else { rawResult = { @@ -274,6 +281,7 @@ export class ActionExecutor { serviceMessage: err.message, error: err, retry: true, + errorSource: TaskErrorSource.USER, }; } } @@ -450,31 +458,37 @@ export class ActionExecutor { } if (!this.isESOCanEncrypt) { - throw new Error( - `Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.` + throw createTaskRunError( + new Error( + `Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.` + ), + TaskErrorSource.USER ); } - const rawAction = await encryptedSavedObjectsClient.getDecryptedAsInternalUser( - 'action', - actionId, - { - namespace: namespace === 'default' ? undefined : namespace, - } - ); - - const { - attributes: { secrets, actionTypeId, config, name }, - } = rawAction; + try { + const rawAction = await encryptedSavedObjectsClient.getDecryptedAsInternalUser( + 'action', + actionId, + { + namespace: namespace === 'default' ? undefined : namespace, + } + ); + const { + attributes: { secrets, actionTypeId, config, name }, + } = rawAction; - return { - actionTypeId, - name, - config, - secrets, - actionId, - rawAction: rawAction.attributes, - }; + return { + actionTypeId, + name, + config, + secrets, + actionId, + rawAction: rawAction.attributes, + }; + } catch (e) { + throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + } } } @@ -539,6 +553,7 @@ function validateAction( status: 'error', message: err.message, retry: !!taskInfo, + errorSource: TaskErrorSource.FRAMEWORK, }); } } @@ -584,6 +599,7 @@ const ensureAuthorizedToExecute = async ({ status: 'error', message: error.message, retry: false, + errorSource: TaskErrorSource.USER, }); } }; diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts index e8c66cff784c9..ecb3f75fc7794 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts @@ -7,7 +7,7 @@ import sinon from 'sinon'; import { ActionExecutor } from './action_executor'; -import { ConcreteTaskInstance, TaskStatus } from '@kbn/task-manager-plugin/server'; +import { ConcreteTaskInstance, TaskErrorSource, TaskStatus } from '@kbn/task-manager-plugin/server'; import { TaskRunnerFactory } from './task_runner_factory'; import { actionTypeRegistryMock } from '../action_type_registry.mock'; import { actionExecutorMock } from './action_executor.mock'; @@ -25,6 +25,7 @@ import { inMemoryMetricsMock } from '../monitoring/in_memory_metrics.mock'; import { IN_MEMORY_METRICS } from '../monitoring'; import { pick } from 'lodash'; import { + getErrorSource, isRetryableError, isUnrecoverableError, } from '@kbn/task-manager-plugin/server/task_running'; @@ -544,12 +545,13 @@ describe('Task Runner Factory', () => { message: 'Error message', data: { foo: true }, retry: false, + errorSource: TaskErrorSource.USER, }); try { await taskRunner.run(); - throw new Error('Should have thrown'); } catch (e) { + expect(getErrorSource(e)).toBe(TaskErrorSource.USER); expect(isRetryableError(e)).toEqual(false); } }); @@ -853,6 +855,7 @@ describe('Task Runner Factory', () => { throw new Error('Should have thrown'); } catch (e) { expect(isUnrecoverableError(e)).toEqual(true); + expect(getErrorSource(e)).toBe(TaskErrorSource.USER); } }); @@ -887,6 +890,7 @@ describe('Task Runner Factory', () => { message: 'Error message', data: { foo: true }, retry: false, + errorSource: TaskErrorSource.FRAMEWORK, }); let err; @@ -900,6 +904,47 @@ describe('Task Runner Factory', () => { expect(taskRunnerFactoryInitializerParams.logger.error as jest.Mock).toHaveBeenCalledWith( `Action '2' failed: Error message` ); + expect(getErrorSource(err)).toBe(TaskErrorSource.FRAMEWORK); + }); + + test(`fallbacks to FRAMEWORK error if ActionExecutor does not return any type of source'`, async () => { + const taskRunner = taskRunnerFactory.create({ + taskInstance: { + ...mockedTaskInstance, + attempts: 0, + }, + }); + + mockedEncryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + id: '3', + type: 'action_task_params', + attributes: { + actionId: '2', + params: { baz: true }, + executionId: '123abc', + apiKey: Buffer.from('123:abc').toString('base64'), + }, + references: [ + { + id: '2', + name: 'actionRef', + type: 'action', + }, + ], + }); + mockedActionExecutor.execute.mockResolvedValueOnce({ + status: 'error', + actionId: '2', + message: 'Error message', + data: { foo: true }, + retry: false, + }); + + try { + await taskRunner.run(); + } catch (e) { + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } }); test('will rethrow the error if the error is thrown instead of returned', async () => { @@ -941,6 +986,7 @@ describe('Task Runner Factory', () => { `Action '2' failed: Fail` ); expect(thrownError).toEqual(err); + expect(getErrorSource(err)).toBe(TaskErrorSource.FRAMEWORK); }); test('increments monitoring metrics after execution', async () => { @@ -1158,6 +1204,11 @@ describe('Task Runner Factory', () => { ], }); - await expect(taskRunner.run()).rejects.toThrow('test'); + try { + await taskRunner.run(); + } catch (e) { + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + expect(e).toEqual(error); + } }); }); diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.ts index 22dc57d7dc0d3..cd22ea324ba5c 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.ts @@ -19,13 +19,16 @@ import { SavedObjectReference, } from '@kbn/core/server'; import { + createTaskRunError, LoadIndirectParamsResult, RunContext, + TaskErrorSource, throwRetryableError, throwUnrecoverableError, } from '@kbn/task-manager-plugin/server'; import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; import { LoadedIndirectParams } from '@kbn/task-manager-plugin/server/task'; +import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; import { ActionExecutorContract, ActionInfo } from './action_executor'; import { ActionTaskExecutorParams, @@ -44,7 +47,7 @@ import { } from './action_execution_source'; import { RelatedSavedObjects, validatedRelatedSavedObjects } from './related_saved_objects'; import { injectSavedObjectReferences } from './action_task_params_utils'; -import { InMemoryMetrics, IN_MEMORY_METRICS } from '../monitoring'; +import { IN_MEMORY_METRICS, InMemoryMetrics } from '../monitoring'; import { ActionTypeDisabledError } from './errors'; export interface TaskRunnerContext { @@ -135,7 +138,8 @@ export class TaskRunnerFactory { }, }; return actionData; - } catch (error) { + } catch (err) { + const error = createTaskRunError(err, getErrorSource(err) || TaskErrorSource.FRAMEWORK); actionData = { error }; return { error }; } @@ -187,9 +191,9 @@ export class TaskRunnerFactory { logger.error(`Action '${actionId}' failed: ${e.message}`); if (e instanceof ActionTypeDisabledError) { // We'll stop re-trying due to action being forbidden - throwUnrecoverableError(e); + throwUnrecoverableError(createTaskRunError(e, TaskErrorSource.USER)); } - throw e; + throw createTaskRunError(e, getErrorSource(e) || TaskErrorSource.FRAMEWORK); } inMemoryMetrics.increment(IN_MEMORY_METRICS.ACTION_EXECUTIONS); @@ -199,7 +203,7 @@ export class TaskRunnerFactory { // Task manager error handler only kicks in when an error thrown (at this time) // So what we have to do is throw when the return status is `error`. throw throwRetryableError( - new Error(executorResult.message), + createTaskRunError(new Error(executorResult.message), executorResult.errorSource), executorResult.retry as boolean | Date ); } diff --git a/x-pack/plugins/actions/server/types.ts b/x-pack/plugins/actions/server/types.ts index 6a038d5092363..0d9cc99ac6186 100644 --- a/x-pack/plugins/actions/server/types.ts +++ b/x-pack/plugins/actions/server/types.ts @@ -76,6 +76,7 @@ export interface ActionTypeExecutorOptions< taskInfo?: TaskInfo; configurationUtilities: ActionsConfigurationUtilities; source?: ActionExecutionSource; + request?: KibanaRequest; } export type ActionResult = Connector; diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts new file mode 100644 index 0000000000000..e553618ea921d --- /dev/null +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client_error.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. + */ + +export class AlertsClientError extends Error { + constructor() { + super( + `Expected alertsClient not to be null! There may have been an issue installing alert resources.` + ); + Object.setPrototypeOf(this, AlertsClientError.prototype); + } +} diff --git a/x-pack/plugins/alerting/server/alerts_client/index.ts b/x-pack/plugins/alerting/server/alerts_client/index.ts index a1c0a309e0dc4..c141ac8167e9b 100644 --- a/x-pack/plugins/alerting/server/alerts_client/index.ts +++ b/x-pack/plugins/alerting/server/alerts_client/index.ts @@ -9,3 +9,4 @@ export { type LegacyAlertsClientParams, LegacyAlertsClient } from './legacy_aler export { AlertsClient } from './alerts_client'; export type { AlertRuleData } from './types'; export { sanitizeBulkErrorResponse } from './lib'; +export { AlertsClientError } from './alerts_client_error'; diff --git a/x-pack/plugins/alerting/server/index.ts b/x-pack/plugins/alerting/server/index.ts index 5be648354e61f..916d1bd11a384 100644 --- a/x-pack/plugins/alerting/server/index.ts +++ b/x-pack/plugins/alerting/server/index.ts @@ -69,7 +69,7 @@ export { isValidAlertIndexName, InstallShutdownError, } from './alerts_service'; -export { sanitizeBulkErrorResponse } from './alerts_client'; +export { sanitizeBulkErrorResponse, AlertsClientError } from './alerts_client'; export { getDataStreamAdapter } from './alerts_service/lib/data_stream_adapter'; export const plugin = async (initContext: PluginInitializerContext) => { diff --git a/x-pack/plugins/cases/public/components/connectors/resilient/case_fields_preview.test.tsx b/x-pack/plugins/cases/public/components/connectors/resilient/case_fields_preview.test.tsx index dd6b9f08c0d09..f4ac54c1eb925 100644 --- a/x-pack/plugins/cases/public/components/connectors/resilient/case_fields_preview.test.tsx +++ b/x-pack/plugins/cases/public/components/connectors/resilient/case_fields_preview.test.tsx @@ -81,7 +81,7 @@ describe('Jira Fields: Preview', () => { const getByText = createQueryWithMarkup(screen.getByText); - expect(getByText('Incident Types: Malware, Denial of Service')).toBeInTheDocument(); + expect(getByText('Incident types: Malware, Denial of Service')).toBeInTheDocument(); expect(getByText('Severity: Medium')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/cases/public/components/connectors/resilient/translations.ts b/x-pack/plugins/cases/public/components/connectors/resilient/translations.ts index 1b63a5098e92a..132234f0d2d57 100644 --- a/x-pack/plugins/cases/public/components/connectors/resilient/translations.ts +++ b/x-pack/plugins/cases/public/components/connectors/resilient/translations.ts @@ -31,7 +31,7 @@ export const INCIDENT_TYPES_PLACEHOLDER = i18n.translate( export const INCIDENT_TYPES_LABEL = i18n.translate( 'xpack.cases.connectors.resilient.incidentTypesLabel', { - defaultMessage: 'Incident Types', + defaultMessage: 'Incident types', } ); diff --git a/x-pack/plugins/cases/server/common/models/case_with_comments.test.ts b/x-pack/plugins/cases/server/common/models/case_with_comments.test.ts index 3a194645c3fca..f55c1c78b1108 100644 --- a/x-pack/plugins/cases/server/common/models/case_with_comments.test.ts +++ b/x-pack/plugins/cases/server/common/models/case_with_comments.test.ts @@ -6,11 +6,15 @@ */ import type { AlertAttachmentAttributes } from '../../../common/types/domain'; +import { AttachmentType } from '../../../common/types/domain'; import type { SavedObject } from '@kbn/core-saved-objects-api-server'; import { createCasesClientMockArgs } from '../../client/mocks'; import { alertComment, comment, mockCaseComments, mockCases, multipleAlert } from '../../mocks'; import { CaseCommentModel } from './case_with_comments'; -import { MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES } from '../../../common/constants'; +import { + MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES, + SECURITY_SOLUTION_OWNER, +} from '../../../common/constants'; import { commentExternalReference, commentFileExternalReference, @@ -25,6 +29,7 @@ describe('CaseCommentModel', () => { clientArgs.services.caseService.getCase.mockResolvedValue(theCase); clientArgs.services.caseService.patchCase.mockResolvedValue(theCase); clientArgs.services.attachmentService.create.mockResolvedValue(mockCaseComments[0]); + clientArgs.services.attachmentService.update.mockResolvedValue(mockCaseComments[0]); clientArgs.services.attachmentService.bulkCreate.mockResolvedValue({ saved_objects: mockCaseComments, }); @@ -274,6 +279,18 @@ describe('CaseCommentModel', () => { expect(clientArgs.services.attachmentService.create).not.toHaveBeenCalled(); }); + it('partial updates the case', async () => { + await model.createComment({ + id: 'comment-1', + commentReq: comment, + createdDate, + }); + + const args = clientArgs.services.caseService.patchCase.mock.calls[0][0]; + + expect(args.version).toBeUndefined(); + }); + describe('validation', () => { clientArgs.services.attachmentService.countPersistableStateAndExternalReferenceAttachments.mockResolvedValue( MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES @@ -579,6 +596,21 @@ describe('CaseCommentModel', () => { expect(multipleAlertsCall.attributes.index).toEqual(['test-index-3', 'test-index-5']); }); + it('partial updates the case', async () => { + await model.bulkCreate({ + attachments: [ + { + id: 'comment-1', + ...comment, + }, + ], + }); + + const args = clientArgs.services.caseService.patchCase.mock.calls[0][0]; + + expect(args.version).toBeUndefined(); + }); + describe('validation', () => { clientArgs.services.attachmentService.countPersistableStateAndExternalReferenceAttachments.mockResolvedValue( MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES @@ -619,4 +651,24 @@ describe('CaseCommentModel', () => { }); }); }); + + describe('updateComment', () => { + it('partial updates the case', async () => { + await model.updateComment({ + updateRequest: { + id: 'comment-id', + version: 'comment-version', + type: AttachmentType.user, + comment: 'my updated comment', + owner: SECURITY_SOLUTION_OWNER, + }, + updatedAt: createdDate, + owner: SECURITY_SOLUTION_OWNER, + }); + + const args = clientArgs.services.caseService.patchCase.mock.calls[0][0]; + + expect(args.version).toBeUndefined(); + }); + }); }); diff --git a/x-pack/plugins/cases/server/common/models/case_with_comments.ts b/x-pack/plugins/cases/server/common/models/case_with_comments.ts index e1b89d7af791e..a1eb5cbfdb8b5 100644 --- a/x-pack/plugins/cases/server/common/models/case_with_comments.ts +++ b/x-pack/plugins/cases/server/common/models/case_with_comments.ts @@ -129,7 +129,7 @@ export class CaseCommentModel { }, options, }), - this.updateCaseUserAndDateSkipRefresh(updatedAt), + this.partialUpdateCaseUserAndDateSkipRefresh(updatedAt), ]); await commentableCase.createUpdateCommentUserAction(comment, updateRequest, owner); @@ -144,11 +144,11 @@ export class CaseCommentModel { } } - private async updateCaseUserAndDateSkipRefresh(date: string) { - return this.updateCaseUserAndDate(date, false); + private async partialUpdateCaseUserAndDateSkipRefresh(date: string) { + return this.partialUpdateCaseUserAndDate(date, false); } - private async updateCaseUserAndDate( + private async partialUpdateCaseUserAndDate( date: string, refresh: RefreshSetting ): Promise { @@ -160,7 +160,6 @@ export class CaseCommentModel { updated_at: date, updated_by: { ...this.params.user }, }, - version: this.caseInfo.version, refresh, }); @@ -242,7 +241,7 @@ export class CaseCommentModel { id, refresh: false, }), - this.updateCaseUserAndDateSkipRefresh(createdDate), + this.partialUpdateCaseUserAndDateSkipRefresh(createdDate), ]); await Promise.all([ @@ -502,7 +501,7 @@ export class CaseCommentModel { }), refresh: false, }), - this.updateCaseUserAndDateSkipRefresh(new Date().toISOString()), + this.partialUpdateCaseUserAndDateSkipRefresh(new Date().toISOString()), ]); const savedObjectsWithoutErrors = newlyCreatedAttachments.saved_objects.filter( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.test.tsx index f82c0ffb3b1c8..c8a970751643a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.test.tsx @@ -83,11 +83,15 @@ describe('ModelSelect', () => { const selectable = wrapper.find(EuiSelectable); expect(selectable.prop('options')).toEqual([ { - modelId: 'model_1', + data: { + modelId: 'model_1', + }, label: 'model_1', }, { - modelId: 'model_2', + data: { + modelId: 'model_2', + }, label: 'model_2', }, ]); @@ -114,7 +118,10 @@ describe('ModelSelect', () => { const wrapper = shallow(); expect(wrapper.find(EuiSelectable)).toHaveLength(1); const selectable = wrapper.find(EuiSelectable); - selectable.simulate('change', [{ modelId: 'model_1' }, { modelId: 'model_2', checked: 'on' }]); + selectable.simulate('change', [ + { data: { modelId: 'model_1' } }, + { data: { modelId: 'model_2' }, checked: 'on' }, + ]); expect(MOCK_ACTIONS.setInferencePipelineConfiguration).toHaveBeenCalledWith( expect.objectContaining({ inferenceConfig: undefined, @@ -130,8 +137,8 @@ describe('ModelSelect', () => { expect(wrapper.find(EuiSelectable)).toHaveLength(1); const selectable = wrapper.find(EuiSelectable); selectable.simulate('change', [ - { modelId: 'model_1' }, - { modelId: 'model_2', isPlaceholder: true, checked: 'on' }, + { data: { modelId: 'model_1' } }, + { data: { modelId: 'model_2', isPlaceholder: true }, checked: 'on' }, ]); expect(MOCK_ACTIONS.setInferencePipelineConfiguration).toHaveBeenCalledWith( expect.objectContaining({ @@ -146,7 +153,10 @@ describe('ModelSelect', () => { const wrapper = shallow(); expect(wrapper.find(EuiSelectable)).toHaveLength(1); const selectable = wrapper.find(EuiSelectable); - selectable.simulate('change', [{ modelId: 'model_1' }, { modelId: 'model_2', checked: 'on' }]); + selectable.simulate('change', [ + { data: { modelId: 'model_1' } }, + { data: { modelId: 'model_2' }, checked: 'on' }, + ]); expect(MOCK_ACTIONS.setInferencePipelineConfiguration).toHaveBeenCalledWith( expect.objectContaining({ pipelineName: 'my-index-model_2', @@ -168,7 +178,10 @@ describe('ModelSelect', () => { const wrapper = shallow(); expect(wrapper.find(EuiSelectable)).toHaveLength(1); const selectable = wrapper.find(EuiSelectable); - selectable.simulate('change', [{ modelId: 'model_1' }, { modelId: 'model_2', checked: 'on' }]); + selectable.simulate('change', [ + { data: { modelId: 'model_1' } }, + { data: { modelId: 'model_2' }, checked: 'on' }, + ]); expect(MOCK_ACTIONS.setInferencePipelineConfiguration).toHaveBeenCalledWith( expect.objectContaining({ pipelineName: 'user-pipeline', diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.tsx index 6f5fc424aef0b..853bcb41a080f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.tsx @@ -18,6 +18,7 @@ import { EuiPanel, EuiScreenReaderLive, EuiSelectable, + EuiSelectableOption, EuiText, EuiTextColor, EuiTitle, @@ -31,9 +32,13 @@ import { MlModel, MlModelDeploymentState } from '../../../../../../../common/typ import { LicenseBadge } from './license_badge'; import { ModelSelectLogic } from './model_select_logic'; -import { ModelSelectOption, ModelSelectOptionProps } from './model_select_option'; +import { ModelSelectOption } from './model_select_option'; import { normalizeModelName } from './utils'; +type EuiSelectableOptionWithMlModelData = EuiSelectableOption & { + data: MlModel; +}; + export const DeployModelButton: React.FC<{ onClick: () => void; modelId: string; @@ -297,33 +302,37 @@ export const ModelSelect: React.FC = () => { const maxVisibleOptions = 4.5; const [listHeight, setListHeight] = useState(maxVisibleOptions * rowHeight); - const getModelSelectOptionProps = (models: MlModel[]): ModelSelectOptionProps[] => + const getModelSelectOptionProps = (models: MlModel[]): EuiSelectableOptionWithMlModelData[] => (models ?? []).map((model) => ({ - ...model, label: model.modelId, checked: model.modelId === modelID ? 'on' : undefined, + data: { ...model }, })); - const onChange = (options: ModelSelectOptionProps[]) => { + const onChange = (options: EuiSelectableOptionWithMlModelData[]) => { const selectedModelOption = options.find((option) => option.checked === 'on'); setInferencePipelineConfiguration({ ...configuration, inferenceConfig: undefined, - modelID: selectedModelOption?.modelId ?? '', - isModelPlaceholderSelected: selectedModelOption?.isPlaceholder ?? false, + modelID: selectedModelOption?.data.modelId ?? '', + isModelPlaceholderSelected: selectedModelOption?.data.isPlaceholder ?? false, fieldMappings: undefined, pipelineName: isPipelineNameUserSupplied ? pipelineName - : indexName + '-' + normalizeModelName(selectedModelOption?.modelId ?? ''), + : indexName + '-' + normalizeModelName(selectedModelOption?.data.modelId ?? ''), }); }; - const onSearchChange = (_: string, matchingOptions: ModelSelectOptionProps[]) => { + const onSearchChange = (_: string, matchingOptions: EuiSelectableOptionWithMlModelData[]) => { setListHeight(Math.min(maxVisibleOptions, matchingOptions.length) * rowHeight); }; - const renderOption = (option: ModelSelectOptionProps) => ; + const renderOption = (option: EuiSelectableOptionWithMlModelData) => { + const { data, ...optionExclData } = option; + const flattenedOption = { ...optionExclData, ...data }; + return ; + }; return ( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.test.tsx index 81d022aedfb74..bcf4eb8342db1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.test.tsx @@ -11,15 +11,15 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiText } from '@elastic/eui'; +import { EuiSelectableOption, EuiText } from '@elastic/eui'; -import { MlModelDeploymentState } from '../../../../../../../common/types/ml'; +import { MlModel, MlModelDeploymentState } from '../../../../../../../common/types/ml'; import { TrainedModelHealth } from '../ml_model_health'; import { LicenseBadge } from './license_badge'; -import { ModelSelectOption, ModelSelectOptionProps } from './model_select_option'; +import { ModelSelectOption } from './model_select_option'; -const DEFAULT_PROPS: ModelSelectOptionProps = { +const DEFAULT_PROPS: EuiSelectableOption = { modelId: 'model_1', type: 'ner', label: 'Model 1', diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx index ced26293cd68d..b3728ab6f2c7f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx @@ -10,6 +10,7 @@ import React from 'react'; import { EuiFlexGroup, EuiFlexItem, + EuiSelectableOption, EuiText, EuiTextColor, EuiTextTruncate, @@ -22,12 +23,7 @@ import { TrainedModelHealth } from '../ml_model_health'; import { LicenseBadge } from './license_badge'; -export type ModelSelectOptionProps = MlModel & { - label: string; - checked?: 'on'; -}; - -export const ModelSelectOption: React.FC = ({ +export const ModelSelectOption: React.FC> = ({ modelId, title, description, diff --git a/x-pack/plugins/fleet/common/services/agent_status.ts b/x-pack/plugins/fleet/common/services/agent_status.ts index a7a5257c603b8..78726667f3b13 100644 --- a/x-pack/plugins/fleet/common/services/agent_status.ts +++ b/x-pack/plugins/fleet/common/services/agent_status.ts @@ -61,10 +61,15 @@ export const AGENT_UPDATING_TIMEOUT_HOURS = 2; export function isStuckInUpdating(agent: Agent): boolean { return ( - agent.status === 'updating' && - !!agent.upgrade_started_at && - !agent.upgraded_at && - Date.now() - Date.parse(agent.upgrade_started_at) > - AGENT_UPDATING_TIMEOUT_HOURS * 60 * 60 * 1000 + (agent.status !== 'offline' && agent.active && isAgentInFailedUpgradeState(agent)) || + (agent.status === 'updating' && + !!agent.upgrade_started_at && + !agent.upgraded_at && + Date.now() - Date.parse(agent.upgrade_started_at) > + AGENT_UPDATING_TIMEOUT_HOURS * 60 * 60 * 1000) ); } + +export function isAgentInFailedUpgradeState(agent: Agent): boolean { + return agent.upgrade_details?.state === 'UPG_FAILED'; +} diff --git a/x-pack/plugins/fleet/common/types/models/preconfiguration.ts b/x-pack/plugins/fleet/common/types/models/preconfiguration.ts index ac3f8f566ec1f..c6ad134fb31c9 100644 --- a/x-pack/plugins/fleet/common/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/common/types/models/preconfiguration.ts @@ -35,6 +35,7 @@ export interface PreconfiguredAgentPolicy extends Omit { prerelease?: boolean; + skipDataStreamRollover?: boolean; } export interface PreconfiguredOutput extends Omit { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx index 93646a544bebb..b55190d848f8a 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx @@ -40,6 +40,8 @@ describe('AgentHealth', () => { true ); + utils.getByText('Agent may be stuck updating.'); + act(() => { fireEvent.click(utils.getByTestId('restartUpgradeBtn')); }); @@ -47,6 +49,56 @@ describe('AgentHealth', () => { utils.findByText('Upgrade Modal'); }); + it('should render agent health with callout when agent has upgrade state failed', () => { + const { utils } = renderAgentHealth( + { + active: true, + status: 'online', + upgrade_started_at: '2022-11-21T12:27:24Z', + upgrade_details: { + state: 'UPG_FAILED', + }, + } as any, + true + ); + + utils.getByText('Agent upgrade is stuck in failed state.'); + + utils.getByTestId('restartUpgradeBtn'); + }); + + it('should not render agent health with callout when agent has upgrade state failed but offline', () => { + const { utils } = renderAgentHealth( + { + active: true, + status: 'offline', + upgrade_started_at: '2022-11-21T12:27:24Z', + upgrade_details: { + state: 'UPG_FAILED', + }, + } as any, + true + ); + + expect(utils.queryByTestId('restartUpgradeBtn')).not.toBeInTheDocument(); + }); + + it('should not render agent health with callout when agent has upgrade state failed but inactive', () => { + const { utils } = renderAgentHealth( + { + active: false, + status: 'unenrolled', + upgrade_started_at: '2022-11-21T12:27:24Z', + upgrade_details: { + state: 'UPG_FAILED', + }, + } as any, + true + ); + + expect(utils.queryByTestId('restartUpgradeBtn')).not.toBeInTheDocument(); + }); + it('should not render agent health with callout when agent not stuck updating', () => { const { utils } = renderAgentHealth( { @@ -58,6 +110,7 @@ describe('AgentHealth', () => { ); expect(utils.queryByTestId('restartUpgradeBtn')).not.toBeInTheDocument(); + expect(utils.queryByText('Agent may be stuck updating.')).not.toBeInTheDocument(); }); it('should not render agent health with callout when not from details', () => { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx index 0cb89b06b62d2..fa8e263c16170 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx @@ -23,6 +23,7 @@ import { euiLightVars as euiVars } from '@kbn/ui-theme'; import { getPreviousAgentStatusForOfflineAgents, + isAgentInFailedUpgradeState, isStuckInUpdating, } from '../../../../../../common/services/agent_status'; @@ -152,12 +153,19 @@ export const AgentHealth: React.FunctionComponent = ({ agent, fromDetails

{lastCheckinText}

{lastCheckInMessageText}

{isStuckInUpdating(agent) ? ( -

+ isAgentInFailedUpgradeState(agent) ? ( -

+ ) : ( +

+ +

+ ) ) : null} } @@ -183,17 +191,27 @@ export const AgentHealth: React.FunctionComponent = ({ agent, fromDetails size="m" color="warning" title={ - + isAgentInFailedUpgradeState(agent) ? ( + + ) : ( + + ) } >

diff --git a/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts b/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts index 70cdd766b0a66..da5ee0bcc8e5c 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts @@ -19,7 +19,10 @@ import type { BulkInstallResponse, IBulkInstallPackageError } from './install'; interface BulkInstallPackagesParams { savedObjectsClient: SavedObjectsClientContract; - packagesToInstall: Array; + packagesToInstall: Array< + | string + | { name: string; version?: string; prerelease?: boolean; skipDataStreamRollover?: boolean } + >; esClient: ElasticsearchClient; force?: boolean; spaceId: string; @@ -48,10 +51,18 @@ export async function bulkInstallPackages({ name: pkgRes.name, version: pkgRes.version, prerelease: undefined, + skipDataStreamRollover: undefined, })); } if (pkg.version !== undefined) { - return Promise.resolve(pkg as { name: string; version: string; prerelease?: boolean }); + return Promise.resolve( + pkg as { + name: string; + version: string; + prerelease?: boolean; + skipDataStreamRollover?: boolean; + } + ); } return Registry.fetchFindLatestPackageOrThrow(pkg.name, { @@ -60,6 +71,7 @@ export async function bulkInstallPackages({ name: pkgRes.name, version: pkgRes.version, prerelease: pkg.prerelease, + skipDataStreamRollover: pkg.skipDataStreamRollover, })); }) ); @@ -114,6 +126,7 @@ export async function bulkInstallPackages({ force, prerelease: prerelease || ('prerelease' in pkgKeyProps && pkgKeyProps.prerelease), authorizationHeader, + skipDataStreamRollover: pkgKeyProps.skipDataStreamRollover, }); if (installResult.error) { diff --git a/x-pack/plugins/fleet/server/services/metrics/fetch_agent_metrics.test.ts b/x-pack/plugins/fleet/server/services/metrics/fetch_agent_metrics.test.ts index fee9e7497e0ef..d8e8030279620 100644 --- a/x-pack/plugins/fleet/server/services/metrics/fetch_agent_metrics.test.ts +++ b/x-pack/plugins/fleet/server/services/metrics/fetch_agent_metrics.test.ts @@ -29,6 +29,14 @@ describe('fetchAgentMetrics', () => { esClient = elasticsearch.client.asInternalUser as ElasticsearchClientMock; }); + it('should not fetch agent if .fleet-agents is not created', async () => { + esClient.indices.get.mockRejectedValue({ statusCode: 404 }); + + const result = await fetchAgentMetrics(mockCore, abortController); + + expect(result).toBeUndefined(); + }); + it('should fetch agent metrics', async () => { esClient.search.mockResolvedValue({ took: 5, diff --git a/x-pack/plugins/fleet/server/services/metrics/fetch_agent_metrics.ts b/x-pack/plugins/fleet/server/services/metrics/fetch_agent_metrics.ts index b768213986f3a..6fc0966e266ed 100644 --- a/x-pack/plugins/fleet/server/services/metrics/fetch_agent_metrics.ts +++ b/x-pack/plugins/fleet/server/services/metrics/fetch_agent_metrics.ts @@ -42,6 +42,23 @@ export const fetchAgentMetrics = async ( if (!soClient || !esClient) { return; } + + const fleetAgentsIndexExists = await esClient.indices + .get({ + index: AGENTS_INDEX, + }) + .catch((error) => { + if (error.statusCode === 404) { + return; + } + + throw error; + }); + + if (!fleetAgentsIndexExists) { + return; + } + const usage = { agents: await getAgentUsage(soClient, esClient), agents_per_version: await getAgentsPerVersion(esClient, abortController), diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts index 8c150aabb5b89..bf70ef7652d9a 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts @@ -30,7 +30,7 @@ import { } from './preconfiguration'; import { packagePolicyService } from './package_policy'; import { getBundledPackages } from './epm/packages/bundled_packages'; -import type { InstallPackageParams } from './epm/packages/install'; +import { installPackage, type InstallPackageParams } from './epm/packages/install'; jest.mock('./agent_policy_update'); jest.mock('./output'); @@ -144,44 +144,46 @@ jest.mock('./epm/registry', () => ({ })); jest.mock('./epm/packages/install', () => ({ - async installPackage(args: InstallPackageParams): Promise { - if (args.installSource === 'registry') { - const [pkgName, pkgVersion] = args.pkgkey.split('-'); - const installError = mockInstallPackageErrors.get(pkgName); - if (installError) { + installPackage: jest.fn( + async (args: InstallPackageParams): Promise => { + if (args.installSource === 'registry') { + const [pkgName, pkgVersion] = args.pkgkey.split('-'); + const installError = mockInstallPackageErrors.get(pkgName); + if (installError) { + return { + error: new Error(installError), + installType: 'install', + installSource: 'registry', + }; + } + + const installedPackage = mockInstalledPackages.get(pkgName); + if (installedPackage) { + if (installedPackage.version === pkgVersion) return installedPackage; + } + + const packageInstallation = { name: pkgName, version: pkgVersion, title: pkgName }; + mockInstalledPackages.set(pkgName, packageInstallation); + return { - error: new Error(installError), + status: 'installed', installType: 'install', installSource: 'registry', }; - } - - const installedPackage = mockInstalledPackages.get(pkgName); - if (installedPackage) { - if (installedPackage.version === pkgVersion) return installedPackage; - } + } else if (args.installSource === 'upload') { + const { archiveBuffer } = args; - const packageInstallation = { name: pkgName, version: pkgVersion, title: pkgName }; - mockInstalledPackages.set(pkgName, packageInstallation); + // Treat the buffer value passed in tests as the package's name for simplicity + const pkgName = archiveBuffer.toString('utf8'); - return { - status: 'installed', - installType: 'install', - installSource: 'registry', - }; - } else if (args.installSource === 'upload') { - const { archiveBuffer } = args; - - // Treat the buffer value passed in tests as the package's name for simplicity - const pkgName = archiveBuffer.toString('utf8'); - - // Just install every bundled package at version '1.0.0' - const packageInstallation = { name: pkgName, version: '1.0.0', title: pkgName }; - mockInstalledPackages.set(pkgName, packageInstallation); + // Just install every bundled package at version '1.0.0' + const packageInstallation = { name: pkgName, version: '1.0.0', title: pkgName }; + mockInstalledPackages.set(pkgName, packageInstallation); - return { status: 'installed', installType: 'install', installSource: 'upload' }; + return { status: 'installed', installType: 'install', installSource: 'upload' }; + } } - }, + ), ensurePackagesCompletedInstall() { return []; }, @@ -395,6 +397,30 @@ describe('policy preconfiguration', () => { expect(nonFatalErrors.length).toBe(0); }); + it('should pass skipDatastreamRollover flag if configured', async () => { + const soClient = getPutPreconfiguredPackagesMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + const { policies, packages, nonFatalErrors } = await ensurePreconfiguredPackagesAndPolicies( + soClient, + esClient, + [] as PreconfiguredAgentPolicy[], + [{ name: 'test_package', version: 'latest', skipDataStreamRollover: true }], + mockDefaultOutput, + mockDefaultDownloadService, + DEFAULT_SPACE_ID + ); + + expect(policies.length).toEqual(0); + expect(packages).toEqual(expect.arrayContaining(['test_package-1.0.0'])); + expect(nonFatalErrors.length).toBe(0); + expect(jest.mocked(installPackage)).toBeCalledWith( + expect.objectContaining({ + skipDataStreamRollover: true, + }) + ); + }); + it('should not add new package policy to existing non managed policies', async () => { const soClient = getPutPreconfiguredPackagesMock(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.ts b/x-pack/plugins/fleet/server/services/preconfiguration.ts index ad1e1c0ddb8b5..8a4944ddb99ad 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.ts @@ -81,7 +81,11 @@ export async function ensurePreconfiguredPackagesAndPolicies( const packagesToInstall = packages.map((pkg) => pkg.version === PRECONFIGURATION_LATEST_KEYWORD - ? { name: pkg.name, prerelease: pkg.prerelease } + ? { + name: pkg.name, + prerelease: pkg.prerelease, + skipDataStreamRollover: pkg.skipDataStreamRollover, + } : pkg ); diff --git a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts index 821debf37bca0..2928db35587d1 100644 --- a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts @@ -45,6 +45,7 @@ export const PreconfiguredPackagesSchema = schema.arrayOf( }, }), prerelease: schema.maybe(schema.boolean()), + skipDataStreamRollover: schema.maybe(schema.boolean()), }), { defaultValue: [], diff --git a/x-pack/plugins/global_search_bar/kibana.jsonc b/x-pack/plugins/global_search_bar/kibana.jsonc index 44689ddc5bdfd..552ee46e6e41d 100644 --- a/x-pack/plugins/global_search_bar/kibana.jsonc +++ b/x-pack/plugins/global_search_bar/kibana.jsonc @@ -16,9 +16,6 @@ "optionalPlugins": [ "usageCollection", "savedObjectsTagging" - ], - "requiredBundles": [ - "kibanaReact" ] } } diff --git a/x-pack/plugins/global_search_bar/public/components/popover_placeholder.tsx b/x-pack/plugins/global_search_bar/public/components/popover_placeholder.tsx index ecd4b2aee8f02..7783cc94cfdba 100644 --- a/x-pack/plugins/global_search_bar/public/components/popover_placeholder.tsx +++ b/x-pack/plugins/global_search_bar/public/components/popover_placeholder.tsx @@ -6,16 +6,17 @@ */ import React, { FC } from 'react'; -import { EuiImage, EuiText, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { EuiImage, EuiText, EuiFlexGroup, EuiFlexItem, useEuiTheme } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; interface PopoverPlaceholderProps { - darkMode: boolean; basePath: string; } -export const PopoverPlaceholder: FC = ({ basePath, darkMode }) => { +export const PopoverPlaceholder: FC = ({ basePath }) => { + const { colorMode } = useEuiTheme(); + return ( = ({ basePath, dark })} size="fullWidth" url={`${basePath}illustration_product_no_search_results_${ - darkMode ? 'dark' : 'light' + colorMode === 'DARK' ? 'dark' : 'light' }.svg`} /> diff --git a/x-pack/plugins/global_search_bar/public/components/search_bar.test.tsx b/x-pack/plugins/global_search_bar/public/components/search_bar.test.tsx index fec5c4c008c09..1caa636e86cb5 100644 --- a/x-pack/plugins/global_search_bar/public/components/search_bar.test.tsx +++ b/x-pack/plugins/global_search_bar/public/components/search_bar.test.tsx @@ -52,7 +52,6 @@ describe('SearchBar', () => { const core = coreMock.createStart(); const basePathUrl = '/plugins/globalSearchBar/assets/'; - const darkMode = false; const eventReporter = new EventReporter({ analytics: core.analytics, usageCollection }); let searchService: ReturnType; let applications: ReturnType; @@ -109,7 +108,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -138,7 +136,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -171,7 +168,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -203,7 +199,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -227,7 +222,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> diff --git a/x-pack/plugins/global_search_bar/public/components/search_bar.tsx b/x-pack/plugins/global_search_bar/public/components/search_bar.tsx index f911b2bc18a4c..821a6efad3491 100644 --- a/x-pack/plugins/global_search_bar/public/components/search_bar.tsx +++ b/x-pack/plugins/global_search_bar/public/components/search_bar.tsx @@ -36,9 +36,9 @@ import { PopoverPlaceholder } from './popover_placeholder'; import './search_bar.scss'; import { SearchBarProps } from './types'; -const NoMatchesMessage = (props: { basePathUrl: string; darkMode: boolean }) => ( - -); +const NoMatchesMessage = (props: { basePathUrl: string }) => { + return ; +}; const EmptyMessage = () => ( diff --git a/x-pack/plugins/global_search_bar/public/components/types.ts b/x-pack/plugins/global_search_bar/public/components/types.ts index c56cde3bf443f..de0af36624db2 100644 --- a/x-pack/plugins/global_search_bar/public/components/types.ts +++ b/x-pack/plugins/global_search_bar/public/components/types.ts @@ -19,6 +19,5 @@ export interface SearchBarProps { reportEvent: EventReporter; taggingApi?: SavedObjectTaggingPluginStart; basePathUrl: string; - darkMode: boolean; chromeStyle$: Observable; } diff --git a/x-pack/plugins/global_search_bar/public/plugin.tsx b/x-pack/plugins/global_search_bar/public/plugin.tsx index 12f15036886c4..00cddfb65534f 100644 --- a/x-pack/plugins/global_search_bar/public/plugin.tsx +++ b/x-pack/plugins/global_search_bar/public/plugin.tsx @@ -7,8 +7,7 @@ import { ChromeNavControl, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { GlobalSearchPluginStart } from '@kbn/global-search-plugin/public'; -import { I18nProvider } from '@kbn/i18n-react'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { SavedObjectTaggingPluginStart } from '@kbn/saved-objects-tagging-plugin/public'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import React from 'react'; @@ -38,26 +37,23 @@ export class GlobalSearchBarPlugin implements Plugin<{}, {}, {}, GlobalSearchBar private getNavControl(deps: { core: CoreStart } & GlobalSearchBarPluginStartDeps) { const { core, globalSearch, savedObjectsTagging, usageCollection } = deps; - const { application, http, theme, uiSettings } = core; + const { application, http, theme, i18n } = core; const reportEvent = new EventReporter({ analytics: core.analytics, usageCollection }); const navControl: ChromeNavControl = { order: 1000, mount: (container) => { ReactDOM.render( - - - - - , + + + , container ); diff --git a/x-pack/plugins/global_search_bar/public/telemetry/telmetry.test.tsx b/x-pack/plugins/global_search_bar/public/telemetry/telmetry.test.tsx index 6eec366dc5ab2..f44612a382972 100644 --- a/x-pack/plugins/global_search_bar/public/telemetry/telmetry.test.tsx +++ b/x-pack/plugins/global_search_bar/public/telemetry/telmetry.test.tsx @@ -50,7 +50,6 @@ describe('SearchBar', () => { const usageCollection = usageCollectionPluginMock.createSetupContract(); const core = coreMock.createStart(); const basePathUrl = '/plugins/globalSearchBar/assets/'; - const darkMode = false; let searchService: ReturnType; let applications: ReturnType; let mockReportUiCounter: typeof usageCollection.reportUiCounter; @@ -114,7 +113,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -137,7 +135,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -165,7 +162,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -203,7 +199,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -240,7 +235,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -270,7 +264,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> @@ -300,7 +293,6 @@ describe('SearchBar', () => { globalSearch={searchService} navigateToUrl={applications.navigateToUrl} basePathUrl={basePathUrl} - darkMode={darkMode} chromeStyle$={chromeStyle$} reportEvent={eventReporter} /> diff --git a/x-pack/plugins/global_search_bar/tsconfig.json b/x-pack/plugins/global_search_bar/tsconfig.json index 1084a9b1139d6..1e66c8225abea 100644 --- a/x-pack/plugins/global_search_bar/tsconfig.json +++ b/x-pack/plugins/global_search_bar/tsconfig.json @@ -11,11 +11,11 @@ "@kbn/saved-objects-tagging-plugin", "@kbn/analytics", "@kbn/i18n-react", - "@kbn/kibana-react-plugin", "@kbn/i18n", "@kbn/saved-objects-tagging-oss-plugin", "@kbn/core-chrome-browser", "@kbn/analytics-client", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/graph/public/components/search_bar.tsx b/x-pack/plugins/graph/public/components/search_bar.tsx index 101a2b3170f0b..ad604ddc59091 100644 --- a/x-pack/plugins/graph/public/components/search_bar.tsx +++ b/x-pack/plugins/graph/public/components/search_bar.tsx @@ -12,6 +12,7 @@ import { i18n } from '@kbn/i18n'; import { connect } from 'react-redux'; import { toElasticsearchQuery, fromKueryExpression, Query } from '@kbn/es-query'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { QueryStringInput } from '@kbn/unified-search-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { IUnifiedSearchPluginServices } from '@kbn/unified-search-plugin/public/types'; @@ -27,8 +28,6 @@ import { selectedFieldsSelector, } from '../state_management'; -import { TooltipWrapper } from './tooltip_wrapper'; - export interface SearchBarProps { isLoading: boolean; urlQuery: string | null; diff --git a/x-pack/plugins/graph/public/components/tooltip_wrapper.tsx b/x-pack/plugins/graph/public/components/tooltip_wrapper.tsx deleted file mode 100644 index 5ab7800e05349..0000000000000 --- a/x-pack/plugins/graph/public/components/tooltip_wrapper.tsx +++ /dev/null @@ -1,34 +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 { EuiToolTip, EuiToolTipProps } from '@elastic/eui'; - -export type TooltipWrapperProps = Partial> & { - tooltipContent: string; - /** When the condition is truthy, the tooltip will be shown */ - condition: boolean; -}; - -export const TooltipWrapper: React.FunctionComponent = ({ - children, - condition, - tooltipContent, - ...tooltipProps -}) => { - return ( - <> - {condition ? ( - - <>{children} - - ) : ( - children - )} - - ); -}; diff --git a/x-pack/plugins/graph/tsconfig.json b/x-pack/plugins/graph/tsconfig.json index c1fc3807c4c18..0618744404be4 100644 --- a/x-pack/plugins/graph/tsconfig.json +++ b/x-pack/plugins/graph/tsconfig.json @@ -49,6 +49,7 @@ "@kbn/content-management-utils", "@kbn/logging", "@kbn/content-management-table-list-view-common", + "@kbn/visualization-utils", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_create.test.tsx b/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_create.test.tsx index 367437e5c5346..2bd505b4fa7aa 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_create.test.tsx +++ b/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_create.test.tsx @@ -608,7 +608,7 @@ describe('', () => { }); }); - describe('DSL', () => { + describe.skip('DSL', () => { beforeEach(async () => { await act(async () => { testBed = await setup(httpSetup); diff --git a/x-pack/plugins/index_management/public/application/store/actions/extension_action.js b/x-pack/plugins/index_management/public/application/store/actions/extension_action.js index 0fb49eea24b4d..95a94bf1d1696 100644 --- a/x-pack/plugins/index_management/public/application/store/actions/extension_action.js +++ b/x-pack/plugins/index_management/public/application/store/actions/extension_action.js @@ -15,7 +15,7 @@ export const performExtensionAction = try { await requestMethod(indexNames, httpService.httpClient); } catch (error) { - notificationService.showDangerToast(error.message); + notificationService.showDangerToast(error.body.message); return; } dispatch(reloadIndices(indexNames)); diff --git a/x-pack/plugins/infra/public/components/asset_details/hooks/use_data_views.ts b/x-pack/plugins/infra/public/components/asset_details/hooks/use_data_views.ts index ec299be484f2d..d8883b9c2079a 100644 --- a/x-pack/plugins/infra/public/components/asset_details/hooks/use_data_views.ts +++ b/x-pack/plugins/infra/public/components/asset_details/hooks/use_data_views.ts @@ -7,10 +7,14 @@ import useAsync from 'react-use/lib/useAsync'; import createContainer from 'constate'; +import { i18n } from '@kbn/i18n'; +import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import { useLogViewReference } from '../../../hooks/use_log_view_reference'; import { useDataMetricsAdHocDataView } from '../../../hooks/use_metrics_adhoc_data_view'; +import { useAssetDetailsRenderPropsContext } from './use_asset_details_render_props'; const useDataViews = ({ metricAlias }: { metricAlias: string }) => { + const { asset } = useAssetDetailsRenderPropsContext(); const { dataView: metricsDataView, loading: metricsDataViewLoading } = useDataMetricsAdHocDataView({ metricAlias }); const { @@ -19,6 +23,13 @@ const useDataViews = ({ metricAlias }: { metricAlias: string }) => { loading: logsReferenceLoading, } = useLogViewReference({ id: 'asset-details-logs-view', + name: i18n.translate('xpack.infra.hostsViewPage.tabs.logs.assetLogsWidgetName', { + defaultMessage: 'Logs from {type} "{name}"', + values: { + name: asset.name, + type: findInventoryModel(asset.type).singularDisplayName, + }, + }), }); const { value: logsDataView, loading: logsDataViewLoading } = useAsync( diff --git a/x-pack/plugins/infra/public/hooks/use_log_view_reference.ts b/x-pack/plugins/infra/public/hooks/use_log_view_reference.ts index d8c063767a8d1..56ba82b697338 100644 --- a/x-pack/plugins/infra/public/hooks/use_log_view_reference.ts +++ b/x-pack/plugins/infra/public/hooks/use_log_view_reference.ts @@ -14,9 +14,14 @@ import { useKibanaContextForPlugin } from './use_kibana'; interface Props { id: string; + /** + * Human readable name of log view. + * Will be displayed as the page title when navigating to "View in Logs". + * */ + name: string; extraFields?: string[]; } -export const useLogViewReference = ({ id, extraFields = [] }: Props) => { +export const useLogViewReference = ({ id, name, extraFields = [] }: Props) => { const { services: { logsShared }, } = useKibanaContextForPlugin(); @@ -33,8 +38,8 @@ export const useLogViewReference = ({ id, extraFields = [] }: Props) => { type: 'log-view-inline', id, attributes: { - name: 'Hosts Logs View', - description: 'Default view for hosts logs tab', + name, + description: '', logIndices: defaultLogView.attributes.logIndices, logColumns: [ { diff --git a/x-pack/plugins/infra/public/pages/logs/settings/inline_log_view_callout.tsx b/x-pack/plugins/infra/public/pages/logs/settings/inline_log_view_callout.tsx index ed332f97ea471..d3db574528490 100644 --- a/x-pack/plugins/infra/public/pages/logs/settings/inline_log_view_callout.tsx +++ b/x-pack/plugins/infra/public/pages/logs/settings/inline_log_view_callout.tsx @@ -7,7 +7,6 @@ import { EuiButton } from '@elastic/eui'; import { EuiCallOut } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -19,26 +18,29 @@ export const InlineLogViewCallout = ({ return ( + } > <>

- {i18n.translate('xpack.infra.logs.settings.inlineLogViewCalloutDescription', { - defaultMessage: - 'An inline Log View is currently being used, changes will be synchronized to the URL, but they will not be persisted.', - })} +

diff --git a/x-pack/plugins/infra/public/pages/logs/settings/source_configuration_settings.tsx b/x-pack/plugins/infra/public/pages/logs/settings/source_configuration_settings.tsx index 482a2fe48dd00..557fe1cfab314 100644 --- a/x-pack/plugins/infra/public/pages/logs/settings/source_configuration_settings.tsx +++ b/x-pack/plugins/infra/public/pages/logs/settings/source_configuration_settings.tsx @@ -101,6 +101,14 @@ export const LogsSettingsPage = () => { + {isInlineLogView && ( + + + + + + + )} { isLoading fill > - Loading + {i18n.translate('xpack.infra.logsSettingsPage.loadingButtonLabel', { + defaultMessage: 'Loading', + })}
) : ( - <> - {isInlineLogView && ( - - - - - - - )} - - - { - sourceConfigurationFormElement.resetValue(); - }} - > - - - - - - - - - - + + + { + sourceConfigurationFormElement.resetValue(); + }} + > + + + + + + + + + )} )} diff --git a/x-pack/plugins/infra/public/pages/logs/stream/components/stream_page_template.tsx b/x-pack/plugins/infra/public/pages/logs/stream/components/stream_page_template.tsx index fb9c26676d01c..5ea865351ef38 100644 --- a/x-pack/plugins/infra/public/pages/logs/stream/components/stream_page_template.tsx +++ b/x-pack/plugins/infra/public/pages/logs/stream/components/stream_page_template.tsx @@ -8,24 +8,78 @@ import { APP_WRAPPER_CLASS } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import React from 'react'; +import { useLogViewContext } from '@kbn/logs-shared-plugin/public'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiBadge, EuiToolTip } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; import { fullHeightContentStyles } from '../../../../page_template.styles'; import { LogsPageTemplate, LogsPageTemplateProps } from '../../shared/page_template'; -export const LogStreamPageTemplate: React.FC = React.memo((props) => ( -
- -
-)); +export const LogStreamPageTemplate: React.FC = (props) => { + const { logView, isInlineLogView, revertToDefaultLogView } = useLogViewContext(); + return ( +
+ + {logView.attributes.name} + + + } + > + + + + + + + ) : ( + streamTitle + ), + breadcrumbs: isInlineLogView + ? [ + { + text: ( + + + + + + + + + ), + color: 'primary', + 'aria-current': false, + 'data-test-subj': 'infraAssetDetailsReturnButton', + href: '#', + onClick: revertToDefaultLogView, + }, + ] + : undefined, + }} + pageSectionProps={{ + contentProps: { + css: fullHeightContentStyles, + }, + }} + {...props} + /> +
+ ); +}; const streamTitle = i18n.translate('xpack.infra.logs.streamPageTitle', { defaultMessage: 'Stream', diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/logs/logs_tab_content.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/logs/logs_tab_content.tsx index 331cc35722998..c977c1fde37a9 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/logs/logs_tab_content.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/logs/logs_tab_content.tsx @@ -9,6 +9,7 @@ import React, { useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { LogStream } from '@kbn/logs-shared-plugin/public'; +import { i18n } from '@kbn/i18n'; import { InfraLoadingPanel } from '../../../../../../components/loading'; import { useHostsViewContext } from '../../../hooks/use_hosts_view'; import { useUnifiedSearchContext } from '../../../hooks/use_unified_search'; @@ -35,6 +36,9 @@ export const LogsTabContent = () => { const { logViewReference: logView, loading: logViewLoading } = useLogViewReference({ id: 'hosts-logs-view', + name: i18n.translate('xpack.infra.hostsViewPage.tabs.logs.LogsByHostWidgetName', { + defaultMessage: 'Logs by host', + }), extraFields: ['host.name'], }); diff --git a/x-pack/plugins/infra/public/pages/metrics/metric_detail/asset_detail_page.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/asset_detail_page.tsx index e52008e2a90ab..81f577f1d553f 100644 --- a/x-pack/plugins/infra/public/pages/metrics/metric_detail/asset_detail_page.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/asset_detail_page.tsx @@ -8,6 +8,7 @@ import React from 'react'; import { useRouteMatch } from 'react-router-dom'; import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; +import { useMetricsBreadcrumbs } from '../../../hooks/use_metrics_breadcrumbs'; import { NoRemoteCluster } from '../../../components/empty_states'; import { SourceErrorPage } from '../../../components/source_error_page'; import { SourceLoadingPage } from '../../../components/source_loading_page'; @@ -15,6 +16,7 @@ import { useSourceContext } from '../../../containers/metrics_source'; import { AssetDetails } from '../../../components/asset_details/asset_details'; import { MetricsPageTemplate } from '../page_template'; import { commonFlyoutTabs } from '../../../common/asset_details_config/asset_details_tabs'; +import { useParentBreadcrumbResolver } from './hooks/use_parent_breadcrumb_resolver'; export const AssetDetailPage = () => { const { isLoading, loadSourceFailureMessage, loadSource, source } = useSourceContext(); @@ -24,6 +26,19 @@ export const AssetDetailPage = () => { const { metricIndicesExist, remoteClustersExist } = source?.status ?? {}; + const parentBreadcrumbResolver = useParentBreadcrumbResolver(); + + const breadcrumbOptions = parentBreadcrumbResolver.getBreadcrumbOptions(nodeType); + useMetricsBreadcrumbs([ + { + ...breadcrumbOptions.link, + text: breadcrumbOptions.text, + }, + { + text: nodeId, + }, + ]); + if (isLoading || !source) return ; if (!remoteClustersExist) { diff --git a/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_parent_breadcrumb_resolver.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_parent_breadcrumb_resolver.ts new file mode 100644 index 0000000000000..a0d5160e87472 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_parent_breadcrumb_resolver.ts @@ -0,0 +1,59 @@ +/* + * 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 { InventoryItemType } from '@kbn/metrics-data-access-plugin/common/inventory_models/types'; +import { useLinkProps } from '@kbn/observability-shared-plugin/public'; +import { useLocation } from 'react-router-dom'; +import { hostsTitle, inventoryTitle } from '../../../../translations'; +import { BreadcrumbOptions } from '../types'; + +interface LocationStateProps { + originPathname: string; +} + +export function useParentBreadcrumbResolver() { + const hostsLinkProps = useLinkProps({ + app: 'metrics', + pathname: 'hosts', + }); + + const inventoryLinkProps = useLinkProps({ + app: 'metrics', + pathname: 'inventory', + }); + + const breadcrumbMap = new Map([ + ['/hosts', { text: hostsTitle, link: hostsLinkProps }], + ['/inventory', { text: inventoryTitle, link: inventoryLinkProps }], + ]); + + const defaultOption: BreadcrumbOptions = breadcrumbMap.get('/inventory')!; + + const { state } = useLocation(); + const locationState: LocationStateProps = state as LocationStateProps; + + function getOptionsByNodeType(nodeType: InventoryItemType): BreadcrumbOptions { + if (nodeType === 'host') { + return breadcrumbMap.get('/hosts')!; + } + return defaultOption; + } + + function getBreadcrumbOptions(nodeType: InventoryItemType) { + if (locationState === undefined) { + return getOptionsByNodeType(nodeType); + } + + const originalPathBreadcrumb = locationState.originPathname + ? breadcrumbMap.get(locationState.originPathname) + : undefined; + + return originalPathBreadcrumb ?? defaultOption; + } + + return { getBreadcrumbOptions }; +} diff --git a/x-pack/plugins/infra/public/pages/metrics/metric_detail/index.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/index.tsx index f05a5d3d2dc2e..24fb24af5c982 100644 --- a/x-pack/plugins/infra/public/pages/metrics/metric_detail/index.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/index.tsx @@ -9,21 +9,14 @@ import { EuiErrorBoundary } from '@elastic/eui'; import React from 'react'; import { useRouteMatch } from 'react-router-dom'; import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; -import { useMetricsBreadcrumbs } from '../../../hooks/use_metrics_breadcrumbs'; import { AssetDetailPage } from './asset_detail_page'; import { MetricDetailPage } from './metric_detail_page'; import { MetricsTimeProvider } from './hooks/use_metrics_time'; export const NodeDetail = () => { const { - params: { type: nodeType, node: nodeName }, - } = useRouteMatch<{ type: InventoryItemType; node: string }>(); - - useMetricsBreadcrumbs([ - { - text: nodeName, - }, - ]); + params: { type: nodeType }, + } = useRouteMatch<{ type: InventoryItemType }>(); return ( diff --git a/x-pack/plugins/infra/public/pages/metrics/metric_detail/metric_detail_page.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/metric_detail_page.tsx index 4dd0da57536e2..9e51d316dd0ec 100644 --- a/x-pack/plugins/infra/public/pages/metrics/metric_detail/metric_detail_page.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/metric_detail_page.tsx @@ -11,6 +11,7 @@ import { useRouteMatch } from 'react-router-dom'; import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; import { useMetricsBreadcrumbs } from '../../../hooks/use_metrics_breadcrumbs'; +import { useParentBreadcrumbResolver } from './hooks/use_parent_breadcrumb_resolver'; import { useMetadata } from '../../../components/asset_details/hooks/use_metadata'; import { useSourceContext } from '../../../containers/metrics_source'; import { InfraLoadingPanel } from '../../../components/loading'; @@ -25,6 +26,7 @@ export const MetricDetailPage = () => { } = useRouteMatch<{ type: InventoryItemType; node: string }>(); const inventoryModel = findInventoryModel(nodeType); const { sourceId, metricIndicesExist } = useSourceContext(); + const parentBreadcrumbResolver = useParentBreadcrumbResolver(); const { timeRange, @@ -50,6 +52,17 @@ export const MetricDetailPage = () => { timeRange: parsedTimeRange, }); + const breadcrumbOptions = parentBreadcrumbResolver.getBreadcrumbOptions(nodeType); + useMetricsBreadcrumbs([ + { + ...breadcrumbOptions.link, + text: breadcrumbOptions.text, + }, + { + text: name, + }, + ]); + const [sideNav, setSideNav] = useState([]); const addNavItem = React.useCallback( @@ -61,12 +74,6 @@ export const MetricDetailPage = () => { [sideNav] ); - useMetricsBreadcrumbs([ - { - text: name, - }, - ]); - if (metadataLoading && !filteredRequiredMetrics.length) { return ( diff --git a/x-pack/plugins/infra/public/pages/metrics/metric_detail/types.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/types.ts index 2cf5c8844d726..545b09c2fe00e 100644 --- a/x-pack/plugins/infra/public/pages/metrics/metric_detail/types.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/types.ts @@ -8,6 +8,7 @@ import rt from 'io-ts'; import { EuiTheme } from '@kbn/kibana-react-plugin/common'; import { InventoryFormatterTypeRT } from '@kbn/metrics-data-access-plugin/common'; +import { LinkProps } from '@kbn/observability-shared-plugin/public/hooks/use_link_props'; import { MetricsTimeInput } from './hooks/use_metrics_time'; import { NodeDetailsMetricData } from '../../../../common/http_api/node_details_api'; @@ -61,3 +62,8 @@ export type VisSectionProps = rt.TypeOf & { isLiveStreaming?: boolean; stopLiveStreaming?: () => void; }; + +export interface BreadcrumbOptions { + text: string; + link: LinkProps; +} diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts index 4a51722288c05..830e50d04f5c7 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts @@ -14,7 +14,7 @@ import { AlertInstanceState as AlertState, RecoveredActionGroup, } from '@kbn/alerting-plugin/common'; -import { RuleExecutorOptions, RuleTypeState } from '@kbn/alerting-plugin/server'; +import { AlertsClientError, RuleExecutorOptions, RuleTypeState } from '@kbn/alerting-plugin/server'; import type { TimeUnitChar } from '@kbn/observability-plugin/common'; import { getAlertUrl } from '@kbn/observability-plugin/common'; import { ObservabilityMetricsAlert } from '@kbn/alerts-as-data-utils'; @@ -120,7 +120,7 @@ export const createMetricThresholdExecutor = const { alertsClient, savedObjectsClient } = services; if (!alertsClient) { - throw new Error(`Expected alertsClient to be defined but it was not!`); + throw new AlertsClientError(); } const alertReporter: MetricThresholdAlertReporter = async ( 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 bab45a9ffe856..f9a6ac0ce397b 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 @@ -32,6 +32,7 @@ export const FlyoutWrapper = ({ displayFlyoutHeader, language, attributesChanged, + isNewPanel, onCancel, navigateToLensEditor, onApply, @@ -49,12 +50,17 @@ export const FlyoutWrapper = ({ > - +

- {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 }, + })} diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx index 2421f303d7b3a..acef8feb6da50 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx @@ -114,6 +114,8 @@ export async function getEditLensConfiguration( navigateToLensEditor, displayFlyoutHeader, canEditTextBasedQuery, + isNewPanel, + deletePanel, hidesSuggestions, }: EditLensConfigurationProps) => { if (!lensServices || !datasourceMap || !visualizationMap) { @@ -208,6 +210,8 @@ export async function getEditLensConfiguration( canEditTextBasedQuery, hidesSuggestions, setCurrentAttributes, + isNewPanel, + deletePanel, }; return getWrapper( diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx index adc0b83861b9c..6aad89b50ef0c 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx @@ -94,6 +94,16 @@ describe('LensEditConfigurationFlyout', () => { expect(navigateToLensEditorSpy).toHaveBeenCalled(); }); + it('should display the header title correctly for a newly created panel', async () => { + renderConfigFlyout({ + displayFlyoutHeader: true, + isNewPanel: true, + }); + expect(screen.getByTestId('inlineEditingFlyoutLabel').textContent).toBe( + 'Create ES|QL visualization' + ); + }); + it('should call the closeFlyout callback if cancel button is clicked', async () => { const closeFlyoutSpy = jest.fn(); diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx index 13fedcf5cd7e0..39801f41c391c 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx @@ -61,6 +61,8 @@ export function LensEditConfigurationFlyout({ navigateToLensEditor, displayFlyoutHeader, canEditTextBasedQuery, + isNewPanel, + deletePanel, hidesSuggestions, }: EditConfigPanelProps) { const euiTheme = useEuiTheme(); @@ -165,18 +167,23 @@ export function LensEditConfigurationFlyout({ updateByRefInput?.(savedObjectId); } } + // for a newly created chart, I want cancelling to also remove the panel + if (isNewPanel && deletePanel) { + deletePanel(); + } closeFlyout?.(); }, [ - previousAttributes, attributesChanged, + isNewPanel, + deletePanel, closeFlyout, + visualization.activeId, + savedObjectId, datasourceMap, datasourceId, updatePanelState, updateSuggestion, - savedObjectId, updateByRefInput, - visualization, ]); const onApply = useCallback(() => { @@ -279,6 +286,7 @@ export function LensEditConfigurationFlyout({ onApply={onApply} isScrollable={true} attributesChanged={attributesChanged} + isNewPanel={isNewPanel} > void; onApply?: () => void; navigateToLensEditor?: () => void; @@ -75,6 +76,10 @@ export interface EditConfigPanelProps { displayFlyoutHeader?: boolean; /** If set to true the layout changes to accordion and the text based query (i.e. ES|QL) can be edited */ canEditTextBasedQuery?: boolean; + /** The flyout is used for adding a new panel by scratch */ + isNewPanel?: boolean; + /** Handler for deleting the embeddable, used in case a user cancels a newly created chart */ + deletePanel?: () => void; /** If set to true the layout changes to accordion and the text based query (i.e. ES|QL) can be edited */ hidesSuggestions?: boolean; } diff --git a/x-pack/plugins/lens/public/async_services.ts b/x-pack/plugins/lens/public/async_services.ts index 7bbfaf415db03..85724c871cda6 100644 --- a/x-pack/plugins/lens/public/async_services.ts +++ b/x-pack/plugins/lens/public/async_services.ts @@ -50,4 +50,5 @@ export * from './app_plugin/save_modal_container'; export * from './chart_info_api'; export * from './trigger_actions/open_in_discover_helpers'; -export * from './trigger_actions/open_lens_config/helpers'; +export * from './trigger_actions/open_lens_config/edit_action_helpers'; +export * from './trigger_actions/open_lens_config/create_action_helpers'; diff --git a/x-pack/plugins/lens/public/datasources/form_based/datapanel.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/datapanel.test.tsx index 01a31f98000f9..c7b6a2bcf6e90 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/datapanel.test.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/datapanel.test.tsx @@ -990,7 +990,7 @@ describe('FormBased Data Panel', () => { expect(wrapper.find(FieldItem).map((fieldItem) => fieldItem.prop('field').name)).toEqual([ DOCUMENT_FIELD_NAME, ]); - expect(wrapper.find(EuiCallOut).length).toEqual(3); + expect(wrapper.find(EuiCallOut).length).toEqual(2); }); it('should toggle type if clicked again', async () => { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/date_histogram.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/date_histogram.tsx index bdc88a7cef452..0d6556344a710 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/date_histogram.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/date_histogram.tsx @@ -29,7 +29,7 @@ import { } from '@kbn/data-plugin/public'; import { extendedBoundsToAst, intervalOptions } from '@kbn/data-plugin/common'; import { buildExpressionFunction } from '@kbn/expressions-plugin/public'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { updateColumnParam } from '../layer_helpers'; import { OperationDefinition, ParamEditorProps } from '.'; import { FieldBasedIndexPatternColumn } from './column_types'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_errors.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_errors.tsx new file mode 100644 index 0000000000000..521ce1ecaf859 --- /dev/null +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_errors.tsx @@ -0,0 +1,53 @@ +/* + * 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, { useState } from 'react'; +import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, EuiPagination } from '@elastic/eui'; +import type { UserMessage } from '../../../types'; + +interface Props { + errors: Array; + title: string; +} + +export function WorkspaceErrors(props: Props) { + const [activePage, setActivePage] = useState(0); + + const activeError = props.errors.length ? props.errors[activePage] : ''; + + return ( + 1 ? ( + + + + + + ) : ( + [] + ) + } + body={ +
+ {typeof activeError === 'string' ? activeError : activeError.longMessage} +
+ } + title={

{props.title}

} + iconColor="danger" + iconType="warning" + data-test-subj="lnsWorkspaceErrors" + /> + ); +} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx index a8e834e43881c..930dd4940171c 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx @@ -703,9 +703,9 @@ describe('workspace_panel', () => { instance.update(); // EuiFlexItem duplicates internally the attribute, so we need to filter only the most inner one here - expect( - instance.find('[data-test-subj="workspace-more-errors-button"]').last().text() - ).toEqual(' +1 error'); + expect(instance.find('[data-test-subj="workspace-error-message"]').last().text()).toEqual( + `i'm an error` + ); expect(instance.find(expressionRendererMock)).toHaveLength(0); expect(getUserMessages).toHaveBeenCalledWith(['visualization', 'visualizationInEditor'], { severity: 'error', diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx index bc3b71c08487a..18ea4791d6847 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx @@ -12,16 +12,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { toExpression } from '@kbn/interpreter'; import type { KibanaExecutionContext } from '@kbn/core-execution-context-common'; import { i18n } from '@kbn/i18n'; -import { - EuiEmptyPrompt, - EuiFlexGroup, - EuiFlexItem, - EuiText, - EuiButtonEmpty, - EuiLink, - EuiTextColor, - EuiSpacer, -} from '@elastic/eui'; +import { EuiText, EuiButtonEmpty, EuiLink, EuiTextColor } from '@elastic/eui'; import type { CoreStart } from '@kbn/core/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { @@ -83,6 +74,7 @@ import { import type { LensInspector } from '../../../lens_inspector_service'; import { inferTimeField, DONT_CLOSE_DIMENSION_CONTAINER_ON_CLICK_CLASS } from '../../../utils'; import { setChangesApplied } from '../../../state_management/lens_slice'; +import { WorkspaceErrors } from './workspace_errors'; export interface WorkspacePanelProps { visualizationMap: VisualizationMap; @@ -98,7 +90,6 @@ export interface WorkspacePanelProps { } interface WorkspaceState { - expandError: boolean; expressionToRender: string | null | undefined; errors: UserMessage[]; } @@ -166,7 +157,6 @@ export const InnerWorkspacePanel = React.memo(function InnerWorkspacePanel({ const searchSessionId = useLensSelector(selectSearchSessionId); const [localState, setLocalState] = useState({ - expandError: false, expressionToRender: undefined, errors: [], }); @@ -724,75 +714,35 @@ export const VisualizationWrapper = ({ const searchSessionId = useLensSelector(selectSearchSessionId); if (errors.length) { - const showExtraErrorsAction = - !localState.expandError && errors.length > 1 ? ( - { - setLocalState((prevState: WorkspaceState) => ({ - ...prevState, - expandError: !prevState.expandError, - })); - }} - data-test-subj="workspace-more-errors-button" - > - {i18n.translate('xpack.lens.editorFrame.configurationFailureMoreErrors', { - defaultMessage: ` +{errors} {errors, plural, one {error} other {errors}}`, - values: { errors: errors.length - 1 }, - })} - - ) : null; - - const [firstMessage, ...rest] = errors; - + const configurationErrorTitle = i18n.translate( + 'xpack.lens.editorFrame.configurationFailureErrors', + { + defaultMessage: `A configuration error occurred`, + } + ); return ( - - - -
{firstMessage.longMessage}
- {localState.expandError && ( - <> - - {rest.map((message) => ( -
- {message.longMessage} - -
- ))} - - )} - - } - iconColor="danger" - iconType="warning" - /> -
-
+ + ); } + const dataLoadingErrorTitle = i18n.translate('xpack.lens.editorFrame.dataFailure', { + defaultMessage: `An error occurred when loading data`, + }); + return (
{ - const errorsFromRequest = getOriginalRequestErrorMessages(error || null, core.docLinks); + const errorsFromRequest = getOriginalRequestErrorMessages(error || null); const visibleErrorMessages = errorsFromRequest.length - ? errorsFromRequest.map((e) => e.longMessage || e.shortMessage) + ? errorsFromRequest : errorMessage ? [errorMessage] : []; @@ -820,54 +770,7 @@ export const VisualizationWrapper = ({ setDynamicError(true); } - return ( - - - { - setLocalState((prevState: WorkspaceState) => ({ - ...prevState, - expandError: !prevState.expandError, - })); - }} - > - {i18n.translate('xpack.lens.editorFrame.expandRenderingErrorButton', { - defaultMessage: 'Show details of error', - })} - - ) : null - } - body={ - <> -

- -

- - {localState.expandError - ? visibleErrorMessages.map((visibleErrorMessage) => - typeof visibleErrorMessage === 'string' ? ( -

- {visibleErrorMessage} -

- ) : ( - visibleErrorMessage - ) - ) - : null} - - } - iconColor="danger" - iconType="warning" - /> -
-
- ); + return ; }} />
diff --git a/x-pack/plugins/lens/public/editor_frame_service/error_helper.test.ts b/x-pack/plugins/lens/public/editor_frame_service/error_helper.test.ts deleted file mode 100644 index 7e3b696a8e75f..0000000000000 --- a/x-pack/plugins/lens/public/editor_frame_service/error_helper.test.ts +++ /dev/null @@ -1,317 +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 { getOriginalRequestErrorMessages } from './error_helper'; -import type { CoreStart } from '@kbn/core/public'; - -const docLinksMock = { links: { fleet: { datastreamsTSDSMetrics: '' } } } as CoreStart['docLinks']; - -const runtimeFieldError = { - stack: 'Error: EsError\n...', - message: '[lens_merge_tables] > [esaggs] > EsError', - name: 'Error', - original: { - name: 'Error', - message: 'Something', - err: { - message: 'status_exception', - statusCode: 400, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'indexpattern_source', - node: 'jtqB1-UhQluyjeXIpQFqAA', - reason: { - type: 'script_exception', - reason: 'runtime error', - script_stack: [ - 'java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)', - 'java.base/java.lang.Integer.parseInt(Integer.java:652)', - 'java.base/java.lang.Integer.parseInt(Integer.java:770)', - "emit(Integer.parseInt('hello'))", - ' ^---- HERE', - ], - script: "emit(Integer.parseInt('hello'))", - lang: 'painless', - position: { offset: 12, start: 0, end: 31 }, - caused_by: { - type: 'number_format_exception', - reason: 'For input string: "hello"', - }, - }, - }, - ], - }, - }, - }, - }, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'indexpattern_source', - node: 'jtqB1-UhQluyjeXIpQFqAA', - reason: { - type: 'script_exception', - reason: 'runtime error', - script_stack: [ - 'java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)', - 'java.base/java.lang.Integer.parseInt(Integer.java:652)', - 'java.base/java.lang.Integer.parseInt(Integer.java:770)', - "emit(Integer.parseInt('hello'))", - ' ^---- HERE', - ], - script: "emit(Integer.parseInt('hello'))", - lang: 'painless', - position: { offset: 12, start: 0, end: 31 }, - caused_by: { type: 'number_format_exception', reason: 'For input string: "hello"' }, - }, - }, - ], - }, - }, - }, - }, -}; - -const scriptedFieldError = { - stack: 'Error: EsError\n...', - message: '[lens_merge_tables] > [esaggs] > EsError', - name: 'Error', - original: { - name: 'Error', - message: 'Some description', - err: { - message: 'status_exception', - statusCode: 500, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'indexpattern_source', - node: 'jtqB1-UhQluyjeXIpQFqAA', - reason: { - type: 'aggregation_execution_exception', - reason: 'Unsupported script value [hello], expected a number, date, or boolean', - }, - }, - ], - }, - }, - }, - }, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'indexpattern_source', - node: 'jtqB1-UhQluyjeXIpQFqAA', - reason: { - type: 'aggregation_execution_exception', - reason: 'Unsupported script value [hello], expected a number, date, or boolean', - }, - }, - ], - }, - }, - }, - }, -}; - -const networkError = { - stack: 'Error: Batch request failed with status 0', - message: '[lens_merge_tables] > [esaggs] > Batch request failed with status 0', - name: 'Error', - original: { - name: 'Error', - message: 'Batch request failed with status 0', - stack: 'Error: Batch request failed with status 0', - }, -}; - -// EsAggs will report an internal error when user attempts to use a runtime field on an indexpattern he has no access to -const indexpatternAccessError = { - stack: "TypeError: Cannot read property 'values' of undefined\n", - message: "[lens_merge_tables] > [esaggs] > Cannot read property 'values' of undefined", - name: 'TypeError', - original: { - message: "[lens_merge_tables] > [esaggs] > Cannot read property 'values' of undefined", - stack: "[lens_merge_tables] > [esaggs] > Cannot read property 'values' of undefined", - }, -}; - -const tsdbCounterUsedWithWrongOperationError = { - stack: - 'Error: EsError: Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - message: - '[layeredXyVis] > [esaggs] > EsError: Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - name: 'Error', - original: { - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'tsdb_index', - reason: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - }, - }, - ], - caused_by: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - caused_by: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - }, - }, - }, - }, - }, - err: { - message: - 'status_exception\n\tCaused by:\n\t\tsearch_phase_execution_exception: all shards failed', - statusCode: 400, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'tsdb_index', - reason: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - }, - }, - ], - caused_by: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - caused_by: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - }, - }, - }, - }, - }, - }, - }, -}; - -describe('lens_error_helpers', () => { - describe('getOriginalRequestErrorMessages', () => { - it('should report no errors if not parsable', () => { - expect(getOriginalRequestErrorMessages(null, docLinksMock)).toEqual([]); - }); - - it('should report an error for a runtime field error', () => { - expect(getOriginalRequestErrorMessages(runtimeFieldError, docLinksMock)).toEqual([ - expect.objectContaining({ - shortMessage: - 'Request error: number_format_exception, For input string: "hello" in "emit(Integer.parseInt(\'hello\'))" (Painless script)', - }), - ]); - }); - - it('should report an error for a scripted field error', () => { - expect(getOriginalRequestErrorMessages(scriptedFieldError, docLinksMock)).toEqual([ - expect.objectContaining({ - shortMessage: - 'Request error: aggregation_execution_exception, Unsupported script value [hello], expected a number, date, or boolean in Painless script', - }), - ]); - }); - - it('should report the original es aggs error for runtime fields for indexpattern not accessible', () => { - expect( - getOriginalRequestErrorMessages(indexpatternAccessError as Error, docLinksMock) - ).toEqual([ - expect.objectContaining({ - shortMessage: indexpatternAccessError.message, - }), - ]); - }); - - it("should report a network custom message when there's a network/connection problem", () => { - expect(getOriginalRequestErrorMessages(networkError as Error, docLinksMock)).toEqual([ - expect.objectContaining({ - shortMessage: 'Network error, try again later or contact your administrator.', - }), - ]); - }); - - it('should report two specific errors in case of an unsupported operation applied to a TSDB counter', () => { - expect( - getOriginalRequestErrorMessages( - tsdbCounterUsedWithWrongOperationError as Error, - docLinksMock - ) - ).toEqual([ - expect.objectContaining({ - shortMessage: - 'The field [bytes_counter] of Time series type [counter] has been used with the unsupported operation [sum].', - }), - ]); - }); - }); -}); diff --git a/x-pack/plugins/lens/public/editor_frame_service/error_helper.tsx b/x-pack/plugins/lens/public/editor_frame_service/error_helper.tsx index 475e2e17da2ea..062cbcc867fa2 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/error_helper.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/error_helper.tsx @@ -5,185 +5,31 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; -import { isEqual, uniqWith } from 'lodash'; -import { estypes } from '@elastic/elasticsearch'; import { ExpressionRenderError } from '@kbn/expressions-plugin/public'; -import type { CoreStart } from '@kbn/core/public'; -import { isEsError } from '@kbn/search-errors'; +import { renderSearchError } from '@kbn/search-errors'; import React from 'react'; -import { EuiLink } from '@elastic/eui'; import { RemovableUserMessage } from '../types'; -interface RequestError extends Error { - body?: { attributes?: { error: { caused_by: estypes.ErrorCause } } }; -} - -interface ReasonDescription { - type: string; - reason: string; - context?: ReasonDescription; -} - -interface EsAggError { - message: string; - stack: string; -} - -const isNetworkError = (e: Error): boolean => { - return e.message === 'Batch request failed with status 0'; // Note: 0 here means Network error -}; - -const isRequestError = (e: Error | RequestError): e is RequestError => { - if ('body' in e) { - return e.body?.attributes?.error?.caused_by !== undefined; - } - return false; -}; - -const isTSDBError = (e: ReasonDescription): boolean => { - return ( - e.type === 'illegal_argument_exception' && - /\]\[counter\] is not supported for aggregation/.test(e.reason) - ); -}; - -// what happens for runtime field used on indexpatterns not accessible to the user? -// they will throw on the kibana side as data will be undefined -const isEsAggError = (e: Error | EsAggError): e is EsAggError => { - return 'message' in e && 'stack' in e && !isRequestError(e as Error) && !isEsError(e); -}; - -function getNestedErrorClauseWithContext({ - type, - reason = '', - caused_by: causedBy, - lang, - script, -}: estypes.ErrorCause): ReasonDescription[] { - if (!causedBy) { - // scripted fields error has changed with no particular hint about painless in it, - // so it tries to lookup in the message for the script word - if (/script/.test(reason)) { - return [{ type, reason, context: { type: 'Painless script', reason: '' } }]; - } - return [{ type, reason }]; - } - const [payload] = getNestedErrorClause(causedBy); - if (lang === 'painless') { - return [ - { - ...payload, - context: { type: 'Painless script', reason: `"${script}"` || reason }, - }, - ]; - } - return [{ ...payload, context: { type, reason } }]; -} - -function getNestedErrorClause(e: estypes.ErrorCause): ReasonDescription[] { - const { type, reason = '', caused_by: causedBy } = e; - // Painless scripts errors are nested within the failed_shards property - if ('failed_shards' in e) { - if (e.failed_shards) { - return (e.failed_shards as estypes.ShardFailure[]).flatMap((shardCause) => - getNestedErrorClauseWithContext(shardCause.reason) - ); - } - } - if (causedBy) { - return getNestedErrorClause(causedBy); - } - return [{ type, reason }]; -} - -function getErrorSources(e: Error) { - if (isRequestError(e)) { - return getNestedErrorClause(e.body!.attributes!.error as estypes.ErrorCause); - } - if (isEsError(e)) { - if (e.attributes?.error?.reason) { - return getNestedErrorClause(e.attributes.error); - } - if (e.attributes?.error?.caused_by) { - return getNestedErrorClause(e.attributes.error.caused_by); - } - } - return []; -} - export function getOriginalRequestErrorMessages( - error: ExpressionRenderError | null, - docLinks: CoreStart['docLinks'] + error: ExpressionRenderError | null ): RemovableUserMessage[] { const errorMessages: Array = []; if (error && 'original' in error && error.original) { - if (isEsAggError(error.original)) { - if (isNetworkError(error.original)) { - errorMessages.push( - i18n.translate('xpack.lens.editorFrame.networkErrorMessage', { - defaultMessage: 'Network error, try again later or contact your administrator.', - }) - ); - } else { - errorMessages.push(error.message); - } + const searchErrorDisplay = renderSearchError(error.original); + if (searchErrorDisplay) { + errorMessages.push({ + short: error.original.message, + long: searchErrorDisplay.actions ? ( + <> + {searchErrorDisplay.body} + {searchErrorDisplay.actions} + + ) : ( + searchErrorDisplay.body + ), + }); } else { - const rootErrors = uniqWith(getErrorSources(error.original), isEqual); - for (const rootError of rootErrors) { - if (rootError.context) { - errorMessages.push( - i18n.translate('xpack.lens.editorFrame.expressionFailureMessageWithContext', { - defaultMessage: 'Request error: {type}, {reason} in {context}', - values: { - reason: rootError.reason, - type: rootError.type, - context: rootError.context.reason - ? `${rootError.context.reason} (${rootError.context.type})` - : rootError.context.type, - }, - }) - ); - } else if (isTSDBError(rootError)) { - const [fieldName, _type, _isCounter, opUsed] = rootError.reason.match(/\[(\w)*\]/g)!; - const shortMessage = i18n.translate( - 'xpack.lens.editorFrame.expressionTSDBDetailedMessage', - { - defaultMessage: - 'The field {field} of Time series type [counter] has been used with the unsupported operation {op}.', - values: { - field: fieldName, - op: opUsed, - }, - } - ); - const message = ( - <> -

{shortMessage}

- - {i18n.translate('xpack.lens.editorFrame.expressionTSDBCounterInfo', { - defaultMessage: - 'See more about Time series field types and [counter] supported aggregations', - })} - - - ); - errorMessages.push({ - short: shortMessage, - long: message, - }); - } else { - errorMessages.push( - i18n.translate('xpack.lens.editorFrame.expressionFailureMessage', { - defaultMessage: 'Request error: {type}, {reason}', - values: { - reason: rootError.reason, - type: rootError.type, - }, - }) - ); - } - } + errorMessages.push(error.original.message); } } else if (error?.message) { errorMessages.push(error.message); diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index e5d34db62ba75..ff1af09019c1b 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -21,6 +21,7 @@ import { isOfQueryType, getAggregateQueryMode, ExecutionContextSearch, + getLanguageDisplayName, } from '@kbn/es-query'; import type { PaletteOutput } from '@kbn/coloring'; import { @@ -740,7 +741,7 @@ export class Embeddable } const query = this.savedVis?.state.query as unknown as AggregateQuery; const language = getAggregateQueryMode(query); - return String(language).toUpperCase(); + return getLanguageDisplayName(language).toUpperCase(); } /** @@ -844,7 +845,11 @@ export class Embeddable this.updateInput({ attributes: attrs, savedObjectId }); } - async openConfingPanel(startDependencies: LensPluginStartDependencies) { + async openConfingPanel( + startDependencies: LensPluginStartDependencies, + isNewPanel?: boolean, + deletePanel?: () => void + ) { const { getEditLensConfiguration } = await import('../async_services'); const Component = await getEditLensConfiguration( this.deps.coreStart, @@ -874,6 +879,8 @@ export class Embeddable } displayFlyoutHeader={true} canEditTextBasedQuery={this.isTextBasedLanguage()} + isNewPanel={isNewPanel} + deletePanel={deletePanel} /> ); } @@ -1119,12 +1126,11 @@ export class Embeddable style={input.style} executionContext={this.getExecutionContext()} addUserMessages={(messages) => this.addUserMessages(messages)} - onRuntimeError={(message) => { - this.updateOutput({ error: new Error(message) }); + onRuntimeError={(error) => { + this.updateOutput({ error }); this.logError('runtime'); }} noPadding={this.visDisplayOptions.noPadding} - docLinks={this.deps.coreStart.docLinks} /> void; + onRuntimeError: (error: Error) => void; executionContext?: KibanaExecutionContext; lensInspector: LensInspector; noPadding?: boolean; - docLinks: CoreStart['docLinks']; } export function ExpressionWrapper({ @@ -72,7 +71,6 @@ export function ExpressionWrapper({ executionContext, lensInspector, noPadding, - docLinks, }: ExpressionWrapperProps) { if (!expression) return null; return ( @@ -95,9 +93,13 @@ export function ExpressionWrapper({ syncCursor={syncCursor} executionContext={executionContext} renderError={(errorMessage, error) => { - const messages = getOriginalRequestErrorMessages(error || null, docLinks); + const messages = getOriginalRequestErrorMessages(error || null); addUserMessages(messages); - onRuntimeError(messages[0].shortMessage ?? (errorMessage || '')); + if (error?.original) { + onRuntimeError(error.original); + } else { + onRuntimeError(new Error(errorMessage ? errorMessage : '')); + } return <>; // the embeddable will take care of displaying the messages }} diff --git a/x-pack/plugins/lens/public/plugin.ts b/x-pack/plugins/lens/public/plugin.ts index 460864d1c86f2..872e1a566ab20 100644 --- a/x-pack/plugins/lens/public/plugin.ts +++ b/x-pack/plugins/lens/public/plugin.ts @@ -105,7 +105,8 @@ import type { } from './types'; import { getLensAliasConfig } from './vis_type_alias'; import { createOpenInDiscoverAction } from './trigger_actions/open_in_discover_action'; -import { ConfigureInLensPanelAction } from './trigger_actions/open_lens_config/action'; +import { ConfigureInLensPanelAction } from './trigger_actions/open_lens_config/edit_action'; +import { CreateESQLPanelAction } from './trigger_actions/open_lens_config/create_action'; import { visualizeFieldAction } from './trigger_actions/visualize_field_actions'; import { visualizeTSVBAction } from './trigger_actions/visualize_tsvb_actions'; import { visualizeAggBasedVisAction } from './trigger_actions/visualize_agg_based_vis_actions'; @@ -327,6 +328,9 @@ export class LensPlugin { this.editorFrameService!.loadVisualizations(), this.editorFrameService!.loadDatasources(), ]); + const { setVisualizationMap, setDatasourceMap } = await import('./async_services'); + setDatasourceMap(datasourceMap); + setVisualizationMap(visualizationMap); const eventAnnotationService = await plugins.eventAnnotation.getService(); if (plugins.usageCollection) { @@ -598,6 +602,10 @@ export class LensPlugin { ); startDependencies.uiActions.addTriggerAction('CONTEXT_MENU_TRIGGER', editInLensAction); + // Displays the add ESQL panel in the dashboard add Panel menu + const createESQLPanelAction = new CreateESQLPanelAction(startDependencies, core); + startDependencies.uiActions.addTriggerAction('ADD_PANEL_TRIGGER', createESQLPanelAction); + const discoverLocator = startDependencies.share?.url.locators.get('DISCOVER_APP_LOCATOR'); if (discoverLocator) { startDependencies.uiActions.addTriggerAction( diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.test.tsx b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.test.tsx new file mode 100644 index 0000000000000..9a06fea94cd98 --- /dev/null +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.test.tsx @@ -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 type { CoreStart } from '@kbn/core/public'; +import { coreMock } from '@kbn/core/public/mocks'; +import type { LensPluginStartDependencies } from '../../plugin'; +import { createMockStartDependencies } from '../../editor_frame_service/mocks'; +import { CreateESQLPanelAction } from './create_action'; + +describe('create Lens panel action', () => { + const core = coreMock.createStart(); + const mockStartDependencies = + createMockStartDependencies() as unknown as LensPluginStartDependencies; + describe('compatibility check', () => { + it('is incompatible if ui setting for ES|QL is off', async () => { + const configurablePanelAction = new CreateESQLPanelAction(mockStartDependencies, core); + const isCompatible = await configurablePanelAction.isCompatible(); + + expect(isCompatible).toBeFalsy(); + }); + + it('is compatible if ui setting for ES|QL is on', async () => { + const updatedCore = { + ...core, + uiSettings: { + ...core.uiSettings, + get: (setting: string) => { + return setting === 'discover:enableESQL'; + }, + }, + } as CoreStart; + const createESQLAction = new CreateESQLPanelAction(mockStartDependencies, updatedCore); + const isCompatible = await createESQLAction.isCompatible(); + + expect(isCompatible).toBeTruthy(); + }); + }); +}); diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.tsx b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.tsx new file mode 100644 index 0000000000000..aa33a629c3969 --- /dev/null +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.tsx @@ -0,0 +1,67 @@ +/* + * 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'; +import type { CoreStart } from '@kbn/core/public'; +import { Action } from '@kbn/ui-actions-plugin/public'; +import type { + EmbeddableFactory, + EmbeddableInput, + IEmbeddable, +} from '@kbn/embeddable-plugin/public'; +import type { LensPluginStartDependencies } from '../../plugin'; + +const ACTION_CREATE_ESQL_CHART = 'ACTION_CREATE_ESQL_CHART'; + +interface Context { + createNewEmbeddable: ( + embeddableFactory: EmbeddableFactory, + initialInput?: Partial, + dismissNotification?: boolean + ) => Promise; + deleteEmbeddable: (embeddableId: string) => void; + initialInput?: Partial; +} + +export const getAsyncHelpers = async () => await import('../../async_services'); + +export class CreateESQLPanelAction implements Action { + public type = ACTION_CREATE_ESQL_CHART; + public id = ACTION_CREATE_ESQL_CHART; + public order = 50; + + constructor( + protected readonly startDependencies: LensPluginStartDependencies, + protected readonly core: CoreStart + ) {} + + public getDisplayName(): string { + return i18n.translate('xpack.lens.app.createVisualizationLabel', { + defaultMessage: 'ES|QL', + }); + } + + public getIconType() { + // need to create a new one + return 'esqlVis'; + } + + public async isCompatible() { + // compatible only when ES|QL advanced setting is enabled + const { isCreateActionCompatible } = await getAsyncHelpers(); + return isCreateActionCompatible(this.core); + } + + public async execute({ createNewEmbeddable, deleteEmbeddable }: Context) { + const { executeCreateAction } = await getAsyncHelpers(); + executeCreateAction({ + deps: this.startDependencies, + core: this.core, + createNewEmbeddable, + deleteEmbeddable, + }); + } +} diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts new file mode 100644 index 0000000000000..1eddc499f4170 --- /dev/null +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts @@ -0,0 +1,127 @@ +/* + * 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 { createGetterSetter } from '@kbn/kibana-utils-plugin/common'; +import type { CoreStart } from '@kbn/core/public'; +import type { + EmbeddableFactory, + EmbeddableInput, + IEmbeddable, +} from '@kbn/embeddable-plugin/public'; +import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; +import type { Datasource, Visualization } from '../../types'; +import type { LensPluginStartDependencies } from '../../plugin'; +import { fetchDataFromAggregateQuery } from '../../datasources/text_based/fetch_data_from_aggregate_query'; +import { suggestionsApi } from '../../lens_suggestions_api'; +import { getLensAttributes } from '../../app_plugin/shared/edit_on_the_fly/helpers'; +import { generateId } from '../../id_generator'; +import { executeEditAction } from './edit_action_helpers'; + +// datasourceMap and visualizationMap setters/getters +export const [getVisualizationMap, setVisualizationMap] = createGetterSetter< + Record> +>('VisualizationMap', false); + +export const [getDatasourceMap, setDatasourceMap] = createGetterSetter< + Record> +>('DatasourceMap', false); + +export function isCreateActionCompatible(core: CoreStart) { + return core.uiSettings.get('discover:enableESQL'); +} + +export async function executeCreateAction({ + deps, + core, + createNewEmbeddable, + deleteEmbeddable, +}: { + deps: LensPluginStartDependencies; + core: CoreStart; + createNewEmbeddable: ( + embeddableFactory: EmbeddableFactory, + initialInput?: Partial, + dismissNotification?: boolean + ) => Promise; + deleteEmbeddable: (embeddableId: string) => void; +}) { + const isCompatibleAction = isCreateActionCompatible(core); + const defaultDataView = await deps.dataViews.getDefaultDataView({ + displayErrors: false, + }); + if (!isCompatibleAction || !defaultDataView) { + throw new IncompatibleActionError(); + } + const visualizationMap = getVisualizationMap(); + const datasourceMap = getDatasourceMap(); + + const defaultIndex = defaultDataView.getIndexPattern(); + const defaultEsqlQuery = { + esql: `from ${defaultIndex} | limit 10`, + }; + + // For the suggestions api we need only the columns + // so we are requesting them with limit 0 + // this is much more performant than requesting + // all the table + const performantQuery = { + esql: `from ${defaultIndex} | limit 0`, + }; + + const table = await fetchDataFromAggregateQuery( + performantQuery, + defaultDataView, + deps.data, + deps.expressions + ); + + const context = { + dataViewSpec: defaultDataView.toSpec(), + fieldName: '', + textBasedColumns: table?.columns, + query: defaultEsqlQuery, + }; + + // get the initial attributes from the suggestions api + const allSuggestions = + suggestionsApi({ context, dataView: defaultDataView, datasourceMap, visualizationMap }) ?? []; + + // Lens might not return suggestions for some cases, i.e. in case of errors + if (!allSuggestions.length) return undefined; + const [firstSuggestion] = allSuggestions; + const attrs = getLensAttributes({ + filters: [], + query: defaultEsqlQuery, + suggestion: firstSuggestion, + dataView: defaultDataView, + }); + + const input = { + attributes: attrs, + id: generateId(), + }; + const embeddableStart = deps.embeddable; + const factory = embeddableStart.getEmbeddableFactory('lens'); + if (!factory) { + return undefined; + } + const embeddable = await createNewEmbeddable(factory, input, true); + // open the flyout if embeddable has been created successfully + if (embeddable) { + const deletePanel = () => { + deleteEmbeddable(embeddable.id); + }; + + executeEditAction({ + embeddable, + startDependencies: deps, + overlays: core.overlays, + theme: core.theme, + isNewPanel: true, + deletePanel, + }); + } +} diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.test.tsx b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action.test.tsx similarity index 98% rename from x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.test.tsx rename to x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action.test.tsx index d8dbc219c6c17..e1ab0f715cac5 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.test.tsx +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action.test.tsx @@ -12,7 +12,7 @@ import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; import type { LensPluginStartDependencies } from '../../plugin'; import { createMockStartDependencies } from '../../editor_frame_service/mocks'; import { DOC_TYPE } from '../../../common/constants'; -import { ConfigureInLensPanelAction } from './action'; +import { ConfigureInLensPanelAction } from './edit_action'; describe('open config panel action', () => { const overlays = overlayServiceMock.createStartContract(); diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.tsx b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action.tsx similarity index 88% rename from x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.tsx rename to x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action.tsx index 376cae58d1339..c4960532bdd66 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.tsx +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action.tsx @@ -43,13 +43,13 @@ export class ConfigureInLensPanelAction implements Action { } public async isCompatible({ embeddable }: Context) { - const { isActionCompatible } = await getConfigureLensHelpersAsync(); - return isActionCompatible(embeddable); + const { isEditActionCompatible } = await getConfigureLensHelpersAsync(); + return isEditActionCompatible(embeddable); } public async execute({ embeddable }: Context) { - const { executeAction } = await getConfigureLensHelpersAsync(); - return executeAction({ + const { executeEditAction } = await getConfigureLensHelpersAsync(); + return executeEditAction({ embeddable, startDependencies: this.startDependencies, overlays: this.overlays, diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts similarity index 85% rename from x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts rename to x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts index 8fd011fddfb2e..38f1aadc2c576 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts @@ -18,22 +18,31 @@ interface Context { startDependencies: LensPluginStartDependencies; overlays: OverlayStart; theme: ThemeServiceStart; + isNewPanel?: boolean; + deletePanel?: () => void; } -export async function isActionCompatible(embeddable: IEmbeddable) { +export async function isEditActionCompatible(embeddable: IEmbeddable) { // display the action only if dashboard is on editable mode const inDashboardEditMode = embeddable.getInput().viewMode === 'edit'; return Boolean(isLensEmbeddable(embeddable) && embeddable.getIsEditable() && inDashboardEditMode); } -export async function executeAction({ embeddable, startDependencies, overlays, theme }: Context) { - const isCompatibleAction = await isActionCompatible(embeddable); +export async function executeEditAction({ + embeddable, + startDependencies, + overlays, + theme, + isNewPanel, + deletePanel, +}: Context) { + const isCompatibleAction = await isEditActionCompatible(embeddable); if (!isCompatibleAction || !isLensEmbeddable(embeddable)) { throw new IncompatibleActionError(); } const rootEmbeddable = embeddable.getRoot(); const overlayTracker = tracksOverlays(rootEmbeddable) ? rootEmbeddable : undefined; - const ConfigPanel = await embeddable.openConfingPanel(startDependencies); + const ConfigPanel = await embeddable.openConfingPanel(startDependencies, isNewPanel, deletePanel); if (ConfigPanel) { const handle = overlays.openFlyout( toMountPoint( diff --git a/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx index bd10558d71404..8bd02702c841a 100644 --- a/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx @@ -25,7 +25,7 @@ import { } from '@kbn/coloring'; import { GaugeTicksPositions, GaugeColorModes } from '@kbn/expression-gauge-plugin/common'; import { getMaxValue, getMinValue } from '@kbn/expression-gauge-plugin/public'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { isNumericFieldForDatatable } from '../../../common/expressions/datatable/utils'; import { applyPaletteParams, PalettePanelContainer } from '../../shared_components'; import type { VisualizationDimensionEditorProps } from '../../types'; diff --git a/x-pack/plugins/lens/public/visualizations/heatmap/toolbar_component.tsx b/x-pack/plugins/lens/public/visualizations/heatmap/toolbar_component.tsx index ebc0b1040623f..c621a59e9ea9b 100644 --- a/x-pack/plugins/lens/public/visualizations/heatmap/toolbar_component.tsx +++ b/x-pack/plugins/lens/public/visualizations/heatmap/toolbar_component.tsx @@ -11,7 +11,7 @@ import { Position } from '@elastic/charts'; import { i18n } from '@kbn/i18n'; import { LegendSize } from '@kbn/visualizations-plugin/public'; import { EuiIconAxisLeft, EuiIconAxisBottom } from '@kbn/chart-icons'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { VisualizationToolbarProps } from '../../types'; import { LegendSettingsPopover, diff --git a/x-pack/plugins/lens/public/visualizations/legacy_metric/metric_config_panel/appearance_options_popover.tsx b/x-pack/plugins/lens/public/visualizations/legacy_metric/metric_config_panel/appearance_options_popover.tsx index fe070e50449d6..ad3215634a261 100644 --- a/x-pack/plugins/lens/public/visualizations/legacy_metric/metric_config_panel/appearance_options_popover.tsx +++ b/x-pack/plugins/lens/public/visualizations/legacy_metric/metric_config_panel/appearance_options_popover.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { ToolbarPopover } from '../../../shared_components'; import { TitlePositionOptions } from './title_position_option'; import { FramePublicAPI } from '../../../types'; diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/index.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/index.tsx index 3697ce988efb5..a02d4c1d82772 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/index.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/index.tsx @@ -11,7 +11,7 @@ import { Position, ScaleType } from '@elastic/charts'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { AxisExtentConfig } from '@kbn/expression-xy-plugin/common'; import { LegendSize } from '@kbn/visualizations-plugin/public'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { LegendSettingsPopoverProps } from '../../../shared_components/legend/legend_settings_popover'; import type { VisualizationToolbarProps, FramePublicAPI } from '../../../types'; import { State, XYState, AxesSettingsConfig } from '../types'; diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/shared/marker_decoration_settings.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/shared/marker_decoration_settings.tsx index 3f620a9379538..e2b149dfc0eb6 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/shared/marker_decoration_settings.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/shared/marker_decoration_settings.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButtonGroup, EuiFormRow } from '@elastic/eui'; import { IconPosition } from '@kbn/expression-xy-plugin/common'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { YAxisMode } from '../../types'; import { idPrefix } from '../dimension_editor'; diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/visual_options_popover/index.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/visual_options_popover/index.tsx index bd147779fed8d..b8b244daf85d2 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/visual_options_popover/index.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/visual_options_popover/index.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { ToolbarPopover, ValueLabelsSettings } from '../../../../shared_components'; import { MissingValuesOptions } from './missing_values_option'; import { LineCurveOption } from './line_curve_option'; diff --git a/x-pack/plugins/lens/tsconfig.json b/x-pack/plugins/lens/tsconfig.json index d07e00376c8ad..457e349873b1c 100644 --- a/x-pack/plugins/lens/tsconfig.json +++ b/x-pack/plugins/lens/tsconfig.json @@ -99,6 +99,7 @@ "@kbn/calculate-width-from-char-count", "@kbn/discover-utils", "@kbn/lens-formula-docs" + "@kbn/visualization-utils" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/maps/public/classes/util/data_request.tsx b/x-pack/plugins/maps/public/classes/util/data_request.tsx index 62fd17cc44277..4554761ac0f4e 100644 --- a/x-pack/plugins/maps/public/classes/util/data_request.tsx +++ b/x-pack/plugins/maps/public/classes/util/data_request.tsx @@ -9,7 +9,6 @@ import React, { ReactNode } from 'react'; import { renderSearchError } from '@kbn/search-errors'; -import { getApplication } from '../../kibana_services'; import type { DataRequestDescriptor, DataRequestMeta } from '../../../common/descriptor_types'; export class DataRequest { @@ -60,10 +59,7 @@ export class DataRequest { return null; } - const searchErrorDisplay = renderSearchError({ - error: this._descriptor.error, - application: getApplication(), - }); + const searchErrorDisplay = renderSearchError(this._descriptor.error); const body = searchErrorDisplay?.body ? ( searchErrorDisplay.body diff --git a/x-pack/plugins/ml/public/alerting/ml_anomaly_alert_trigger.tsx b/x-pack/plugins/ml/public/alerting/ml_anomaly_alert_trigger.tsx index 3262fbd6cac7f..45bf7b1ca613b 100644 --- a/x-pack/plugins/ml/public/alerting/ml_anomaly_alert_trigger.tsx +++ b/x-pack/plugins/ml/public/alerting/ml_anomaly_alert_trigger.tsx @@ -16,6 +16,7 @@ import { JobSelectorControl } from './job_selector'; import { useMlKibana } from '../application/contexts/kibana'; import { jobsApiProvider } from '../application/services/ml_api_service/jobs'; import { HttpService } from '../application/services/http_service'; +import { useToastNotificationService } from '../application/services/toast_notification_service'; import { SeverityControl } from '../application/components/severity_control'; import { ResultTypeSelector } from './result_type_selector'; import { alertingApiProvider } from '../application/services/ml_api_service/alerting'; @@ -44,11 +45,11 @@ const MlAnomalyAlertTrigger: FC = ({ }) => { const { services: { http }, - notifications: { toasts }, } = useMlKibana(); const mlHttpService = useMemo(() => new HttpService(http), [http]); const adJobsApiService = useMemo(() => jobsApiProvider(mlHttpService), [mlHttpService]); const alertingApiService = useMemo(() => alertingApiProvider(mlHttpService), [mlHttpService]); + const { displayErrorToast } = useToastNotificationService(); const [jobConfigs, setJobConfigs] = useState([]); @@ -74,13 +75,13 @@ const MlAnomalyAlertTrigger: FC = ({ const jobs = await adJobsApiService.jobs(jobsAndGroupIds); setJobConfigs(jobs); } catch (e) { - toasts.danger({ - title: i18n.translate('xpack.ml.anomalyDetectionAlert.errorFetchingJobs', { + displayErrorToast( + e, + i18n.translate('xpack.ml.anomalyDetectionAlert.errorFetchingJobs', { defaultMessage: 'Unable to fetch jobs configuration', }), - body: e.message, - toastLifeTimeMs: 5000, - }); + 5000 + ); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [jobsAndGroupIds]); diff --git a/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.test.tsx b/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.test.tsx index 7f2bd05fe9208..f061dbb96f16f 100644 --- a/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.test.tsx +++ b/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.test.tsx @@ -13,6 +13,14 @@ import { CustomUrlList, CustomUrlListProps } from './list'; jest.mock('../../../contexts/kibana'); +jest.mock('../../../services/toast_notification_service', () => ({ + useToastNotificationService: () => { + return { + displayErrorToast: jest.fn(), + }; + }, +})); + function prepareTest(setCustomUrlsFn: jest.Mock) { const customUrls = [ { diff --git a/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.tsx b/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.tsx index 3ee39cb611764..a4de96f662600 100644 --- a/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.tsx +++ b/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.tsx @@ -29,6 +29,7 @@ import { import { parseUrlState } from '@kbn/ml-url-state'; import { useMlKibana } from '../../../contexts/kibana'; +import { useToastNotificationService } from '../../../services/toast_notification_service'; import { isValidLabel, openCustomUrlWindow } from '../../../util/custom_url_utils'; import { getTestUrl } from './utils'; @@ -68,10 +69,10 @@ export const CustomUrlList: FC = ({ const { services: { http, - notifications, data: { dataViews }, }, } = useMlKibana(); + const { displayErrorToast } = useToastNotificationService(); const [expandedUrlIndex, setExpandedUrlIndex] = useState(null); const onLabelChange = (e: ChangeEvent, index: number) => { @@ -161,11 +162,8 @@ export const CustomUrlList: FC = ({ const testUrl = await getTestUrl(job, customUrl, timefieldName, undefined, isPartialDFAJob); openCustomUrlWindow(testUrl, customUrl, http.basePath.get()); } catch (error) { - // eslint-disable-next-line no-console - console.error('Error obtaining URL for test:', error); - - const { toasts } = notifications; - toasts.addDanger( + displayErrorToast( + error, i18n.translate( 'xpack.ml.customUrlEditorList.obtainingUrlToTestConfigurationErrorMessage', { diff --git a/x-pack/plugins/ml/public/application/components/custom_urls/custom_urls.tsx b/x-pack/plugins/ml/public/application/components/custom_urls/custom_urls.tsx index b020a87b36c1b..c64f7f3ee2861 100644 --- a/x-pack/plugins/ml/public/application/components/custom_urls/custom_urls.tsx +++ b/x-pack/plugins/ml/public/application/components/custom_urls/custom_urls.tsx @@ -29,6 +29,10 @@ import type { DataViewListItem } from '@kbn/data-views-plugin/common'; import type { MlUrlConfig } from '@kbn/ml-anomaly-utils'; import { isDataFrameAnalyticsConfigs } from '@kbn/ml-data-frame-analytics-utils'; import type { DashboardService, DashboardItems } from '../../services/dashboard_service'; +import { + ToastNotificationService, + toastNotificationServiceProvider, +} from '../../services/toast_notification_service'; import type { MlKibanaReactContextValue } from '../../contexts/kibana'; import { CustomUrlEditor, CustomUrlList } from './custom_url_editor'; import { @@ -58,6 +62,8 @@ interface CustomUrlsProps extends CustomUrlsWrapperProps { } class CustomUrlsUI extends Component { + private toastNotificationService: ToastNotificationService | undefined; + constructor(props: CustomUrlsProps) { super(props); @@ -79,16 +85,17 @@ class CustomUrlsUI extends Component { componentDidMount() { const { toasts } = this.props.kibana.services.notifications; + this.toastNotificationService = toastNotificationServiceProvider(toasts); const { dashboardService } = this.props; + dashboardService .fetchDashboards() .then((dashboards) => { this.setState({ dashboards }); }) - .catch((resp) => { - // eslint-disable-next-line no-console - console.error('Error loading list of dashboards:', resp); - toasts.addDanger( + .catch((error) => { + this.toastNotificationService!.displayErrorToast( + error, i18n.translate( 'xpack.ml.jobsList.editJobFlyout.customUrls.loadSavedDashboardsErrorNotificationMessage', { @@ -102,10 +109,9 @@ class CustomUrlsUI extends Component { .then((dataViewListItems) => { this.setState({ dataViewListItems }); }) - .catch((resp) => { - // eslint-disable-next-line no-console - console.error('Error loading list of dashboards:', resp); - toasts.addDanger( + .catch((error) => { + this.toastNotificationService!.displayErrorToast( + error, i18n.translate( 'xpack.ml.jobsList.editJobFlyout.customUrls.loadDataViewsErrorNotificationMessage', { @@ -148,11 +154,9 @@ class CustomUrlsUI extends Component { this.props.setCustomUrls(customUrls); this.setState({ editorOpen: false }); }) - .catch((error: Error) => { - // eslint-disable-next-line no-console - console.error('Error building custom URL from settings:', error); - const { toasts } = this.props.kibana.services.notifications; - toasts.addDanger( + .catch((error) => { + this.toastNotificationService!.displayErrorToast( + error, i18n.translate( 'xpack.ml.jobsList.editJobFlyout.customUrls.addNewUrlErrorNotificationMessage', { @@ -167,7 +171,6 @@ class CustomUrlsUI extends Component { onTestButtonClick = () => { const { http: { basePath }, - notifications: { toasts }, data: { dataViews }, dashboard, } = this.props.kibana.services; @@ -194,10 +197,9 @@ class CustomUrlsUI extends Component { .then((testUrl) => { openCustomUrlWindow(testUrl, customUrl, basePath.get()); }) - .catch((resp) => { - // eslint-disable-next-line no-console - console.error('Error obtaining URL for test:', resp); - toasts.addWarning( + .catch((error) => { + this.toastNotificationService!.displayErrorToast( + error, i18n.translate( 'xpack.ml.jobsList.editJobFlyout.customUrls.getTestUrlErrorNotificationMessage', { @@ -210,10 +212,9 @@ class CustomUrlsUI extends Component { } ); }) - .catch((resp) => { - // eslint-disable-next-line no-console - console.error('Error building custom URL from settings:', resp); - toasts.addWarning( + .catch((error) => { + this.toastNotificationService!.displayErrorToast( + error, i18n.translate( 'xpack.ml.jobsList.editJobFlyout.customUrls.buildUrlErrorNotificationMessage', { diff --git a/x-pack/plugins/ml/public/application/components/job_messages/job_messages.tsx b/x-pack/plugins/ml/public/application/components/job_messages/job_messages.tsx index c5a7826ac0ee9..adc56c5467133 100644 --- a/x-pack/plugins/ml/public/application/components/job_messages/job_messages.tsx +++ b/x-pack/plugins/ml/public/application/components/job_messages/job_messages.tsx @@ -48,7 +48,7 @@ export const JobMessages: FC = ({ }) => { const { showNodeInfo } = useEnabledFeatures(); const columns: Array> = useMemo(() => { - const cols = [ + const cols: Array> = [ { name: refreshMessage ? ( = ({ }); } - return cols; - }, [showNodeInfo, refreshMessage]); - - if (typeof actionHandler === 'function') { - columns.push({ - name: i18n.translate('xpack.ml.jobMessages.actionsLabel', { - defaultMessage: 'Actions', - }), - width: '10%', - actions: [ - { - render: (message: JobMessage) => { - return ( - { + return ( + + } + > + actionHandler(message)} /> - } - > - actionHandler(message)} - /> - - ); + + ); + }, }, - }, - ], - }); - } + ], + }); + } + + return cols; + }, [showNodeInfo, refreshMessage, actionHandler]); const defaultSorting = { sort: { diff --git a/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.js b/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.js index 907933ad290c3..0e21de91dbbb9 100644 --- a/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.js +++ b/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.js @@ -32,7 +32,6 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { withKibana } from '@kbn/kibana-react-plugin/public'; -import { extractErrorMessage } from '@kbn/ml-error-utils'; import { ML_DETECTOR_RULE_ACTION, ML_DETECTOR_RULE_CONDITIONS_NOT_SUPPORTED_FUNCTIONS, @@ -55,6 +54,7 @@ import { import { getPartitioningFieldNames } from '../../../../common/util/job_utils'; import { mlJobService } from '../../services/job_service'; +import { toastNotificationServiceProvider } from '../../services/toast_notification_service'; import { ml } from '../../services/ml_api_service'; class RuleEditorFlyoutUI extends Component { @@ -83,6 +83,9 @@ class RuleEditorFlyoutUI extends Component { } componentDidMount() { + this.toastNotificationService = toastNotificationServiceProvider( + this.props.kibana.services.notifications.toasts + ); if (typeof this.props.setShowFunction === 'function') { this.props.setShowFunction(this.showFlyout); } @@ -105,8 +108,7 @@ class RuleEditorFlyoutUI extends Component { i18n.translate( 'xpack.ml.ruleEditor.ruleEditorFlyout.unableToConfigureRulesNotificationMesssage', { - defaultMessage: - 'Unable to configure job rules as an error occurred obtaining details for job ID {jobId}', + defaultMessage: 'Unable to configure job rules as no job found with ID {jobId}', values: { jobId: anomaly.jobId }, } ) @@ -153,10 +155,9 @@ class RuleEditorFlyoutUI extends Component { filterListIds, }); }) - .catch((resp) => { - console.log('Error loading list of filters:', resp); - const { toasts } = this.props.kibana.services.notifications; - toasts.addDanger( + .catch((error) => { + this.toastNotificationService.displayErrorToast( + error, i18n.translate( 'xpack.ml.ruleEditor.ruleEditorFlyout.errorWithLoadingFilterListsNotificationMesssage', { @@ -374,8 +375,8 @@ class RuleEditorFlyoutUI extends Component { } }) .catch((error) => { - console.error(error); - toasts.addDanger( + this.toastNotificationService.displayErrorToast( + error, i18n.translate( 'xpack.ml.ruleEditor.ruleEditorFlyout.errorWithSavingChangesToJobDetectorRulesNotificationMessage', { @@ -426,18 +427,16 @@ class RuleEditorFlyoutUI extends Component { } }) .catch((error) => { - console.error(error); - let errorMessage = i18n.translate( - 'xpack.ml.ruleEditor.ruleEditorFlyout.errorWithDeletingRuleFromJobDetectorNotificationMessage', - { - defaultMessage: 'Error deleting rule from {jobId} detector', - values: { jobId }, - } + this.toastNotificationService.displayErrorToast( + error, + i18n.translate( + 'xpack.ml.ruleEditor.ruleEditorFlyout.errorWithDeletingRuleFromJobDetectorNotificationMessage', + { + defaultMessage: 'Error deleting rule from {jobId} detector', + values: { jobId }, + } + ) ); - if (error.error) { - errorMessage += ` : ${extractErrorMessage(error.error)}`; - } - toasts.addDanger(errorMessage); }); }; @@ -467,8 +466,8 @@ class RuleEditorFlyoutUI extends Component { } }) .catch((error) => { - console.log(`Error adding ${item} to filter ${filterId}:`, error); - toasts.addDanger( + this.toastNotificationService.displayErrorToast( + error, i18n.translate( 'xpack.ml.ruleEditor.ruleEditorFlyout.errorWithAddingItemToFilterListNotificationMessage', { diff --git a/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.test.js b/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.test.js index 290d815271dcc..67ace1427eb13 100644 --- a/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.test.js +++ b/x-pack/plugins/ml/public/application/components/rule_editor/rule_editor_flyout.test.js @@ -93,6 +93,11 @@ function prepareTest() { }, }, }, + notifications: { + toasts: { + addDanger: () => {}, + }, + }, }, }, }; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js index 840b34ca70ceb..ffa9e8eecf0ee 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js @@ -185,17 +185,19 @@ function showResults(resp, action) { } const toastNotifications = getToastNotifications(); - toastNotifications.addSuccess( - i18n.translate('xpack.ml.jobsList.actionExecuteSuccessfullyNotificationMessage', { - defaultMessage: - '{successesJobsCount, plural, one{{successJob}} other{# jobs}} {actionTextPT} successfully', - values: { - successesJobsCount: successes.length, - successJob: successes[0], - actionTextPT, - }, - }) - ); + if (successes.length > 0) { + toastNotifications.addSuccess( + i18n.translate('xpack.ml.jobsList.actionExecuteSuccessfullyNotificationMessage', { + defaultMessage: + '{successesJobsCount, plural, one{{successJob}} other{# jobs}} {actionTextPT} successfully', + values: { + successesJobsCount: successes.length, + successJob: successes[0], + actionTextPT, + }, + }) + ); + } if (failures.length > 0) { failures.forEach((f) => { diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/util/model_memory_estimator.ts b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/util/model_memory_estimator.ts index 52d4d77106217..ebc8820e25566 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/util/model_memory_estimator.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/util/model_memory_estimator.ts @@ -123,7 +123,11 @@ export const useModelMemoryEstimator = ( title: i18n.translate('xpack.ml.newJob.wizard.estimateModelMemoryError', { defaultMessage: 'Model memory limit could not be calculated', }), - text: extractErrorMessage(error), + text: i18n.translate('xpack.ml.newJob.wizard.estimateModelMemoryErrorText', { + defaultMessage: + '{errorText}. You can proceed with creating the job, but check for warning messages once the job is running that the configured limit has not been exceeded.', + values: { errorText: extractErrorMessage(error) }, + }), }); }) ); diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/time_range_step/time_range.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/time_range_step/time_range.tsx index d93eb690c31d9..9849864811bc4 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/time_range_step/time_range.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/time_range_step/time_range.tsx @@ -113,7 +113,8 @@ export const TimeRangeStep: FC = ({ setCurrentStep, isCurrentStep }) const { toasts } = services.notifications; toasts.addDanger( i18n.translate('xpack.ml.newJob.wizard.timeRangeStep.fullTimeRangeError', { - defaultMessage: 'An error occurred obtaining the time range for the index', + defaultMessage: + 'An error occurred obtaining the time range for the index. Please set the desired start and end times.', }) ); } diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/recognize/page.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/recognize/page.tsx index fe2c5dfa966aa..1feab0193d087 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/recognize/page.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/recognize/page.tsx @@ -234,21 +234,22 @@ export const Page: FC = ({ moduleId, existingGroupIds }) => { ); } catch (e) { setSaveState(SAVE_STATE.FAILED); - // eslint-disable-next-line no-console - console.error('Error setting up module', e); const { toasts } = notifications; - toasts.addDanger({ + toasts.addError(e, { title: i18n.translate('xpack.ml.newJob.recognize.moduleSetupFailedWarningTitle', { defaultMessage: 'Error setting up module {moduleId}', values: { moduleId }, }), - text: i18n.translate('xpack.ml.newJob.recognize.moduleSetupFailedWarningDescription', { - defaultMessage: - 'An error occurred trying to create the {count, plural, one {job} other {jobs}} in the module.', - values: { - count: jobs.length, - }, - }), + toastMessage: i18n.translate( + 'xpack.ml.newJob.recognize.moduleSetupFailedWarningDescription', + { + defaultMessage: + 'An error occurred trying to create the {count, plural, one {job} other {jobs}} in the module.', + values: { + count: jobs.length, + }, + } + ), }); } }, diff --git a/x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx b/x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx index ebbae3fff924f..e8851124e3399 100644 --- a/x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx +++ b/x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx @@ -126,7 +126,7 @@ export const JobMemoryTreeMap: FC = ({ node, type, height }) => { displayErrorToast( error, i18n.translate('xpack.ml.memoryUsage.treeMap.fetchFailedErrorMessage', { - defaultMessage: 'Models memory usage fetch failed', + defaultMessage: 'Error loading model memory usage data', }) ); } diff --git a/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx b/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx index a8e5848aaef1a..8c2bfa15a0891 100644 --- a/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx +++ b/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx @@ -84,7 +84,7 @@ export const NodesList: FC = ({ compactView = false }) => { displayErrorToast( e, i18n.translate('xpack.ml.trainedModels.nodesList.nodesFetchError', { - defaultMessage: 'Nodes fetch failed', + defaultMessage: 'Error loading overview on machine learning nodes', }) ); setIsLoading(false); diff --git a/x-pack/plugins/ml/public/application/model_management/models_list.tsx b/x-pack/plugins/ml/public/application/model_management/models_list.tsx index dd766d10c36d1..a12d55cd22bed 100644 --- a/x-pack/plugins/ml/public/application/model_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/model_management/models_list.tsx @@ -305,7 +305,7 @@ export const ModelsList: FC = ({ displayErrorToast( error, i18n.translate('xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage', { - defaultMessage: 'Models fetch failed', + defaultMessage: 'Error loading trained models', }) ); } @@ -383,7 +383,7 @@ export const ModelsList: FC = ({ displayErrorToast( error, i18n.translate('xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage', { - defaultMessage: 'Fetch model stats failed', + defaultMessage: 'Error loading trained models statistics', }) ); return false; diff --git a/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx b/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx index 850ce45fde123..c603fcde74df1 100644 --- a/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx +++ b/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx @@ -136,7 +136,7 @@ export const NotificationsList: FC = () => { displayErrorToast( error, i18n.translate('xpack.ml.notifications.fetchFailedError', { - defaultMessage: 'Fetch notifications failed', + defaultMessage: 'Error loading list of notifications', }) ); } diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/recognize.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/recognize.tsx index ff783fe2260af..caf6a7674373a 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/recognize.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/recognize.tsx @@ -105,18 +105,16 @@ const CheckViewOrCreateWrapper: FC = ({ location }) => { } }) .catch(async (err: Error) => { - // eslint-disable-next-line no-console - console.error(`Error checking whether jobs in module ${moduleId} exists`, err); - toasts.addWarning({ + toasts.addError(err, { title: i18n.translate('xpack.ml.newJob.recognize.moduleCheckJobsExistWarningTitle', { defaultMessage: 'Error checking module {moduleId}', values: { moduleId }, }), - text: i18n.translate( + toastMessage: i18n.translate( 'xpack.ml.newJob.recognize.moduleCheckJobsExistWarningDescription', { defaultMessage: - 'An error occurred trying to check whether the jobs in the module have been created.', + 'An error occurred checking whether the jobs in the module have been created. Search the list for matching jobs or create new jobs.', } ), }); diff --git a/x-pack/plugins/ml/public/application/settings/anomaly_detection_settings.tsx b/x-pack/plugins/ml/public/application/settings/anomaly_detection_settings.tsx index 4a19bc96c8c67..17dea3ca3536f 100644 --- a/x-pack/plugins/ml/public/application/settings/anomaly_detection_settings.tsx +++ b/x-pack/plugins/ml/public/application/settings/anomaly_detection_settings.tsx @@ -22,8 +22,8 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { AnomalyDetectionSettingsContext } from './anomaly_detection_settings_context'; -import { useNotifications } from '../contexts/kibana'; import { ml } from '../services/ml_api_service'; +import { useToastNotificationService } from '../services/toast_notification_service'; import { ML_PAGES } from '../../../common/constants/locator'; import { useCreateAndNavigateToMlLink } from '../contexts/kibana/use_create_url'; @@ -35,7 +35,7 @@ export const AnomalyDetectionSettings: FC = () => { AnomalyDetectionSettingsContext ); - const { toasts } = useNotifications(); + const { displayErrorToast } = useToastNotificationService(); const redirectToCalendarList = useCreateAndNavigateToMlLink(ML_PAGES.CALENDARS_MANAGE); const redirectToNewCalendarPage = useCreateAndNavigateToMlLink(ML_PAGES.CALENDARS_NEW); const redirectToFilterLists = useCreateAndNavigateToMlLink(ML_PAGES.FILTER_LISTS_MANAGE); @@ -53,7 +53,8 @@ export const AnomalyDetectionSettings: FC = () => { const calendars = await ml.calendars(); setCalendarsCount(calendars.length); } catch (e) { - toasts.addDanger( + displayErrorToast( + e, i18n.translate('xpack.ml.settings.anomalyDetection.loadingCalendarsCountErrorMessage', { defaultMessage: 'An error occurred obtaining the count of calendars', }) @@ -66,7 +67,8 @@ export const AnomalyDetectionSettings: FC = () => { const filterLists = await ml.filters.filtersStats(); setFilterListsCount(filterLists.length); } catch (e) { - toasts.addDanger( + displayErrorToast( + e, i18n.translate('xpack.ml.settings.anomalyDetection.loadingFilterListCountErrorMessage', { defaultMessage: 'An error occurred obtaining the count of filter lists', }) diff --git a/x-pack/plugins/ml/public/application/settings/calendars/edit/new_calendar.js b/x-pack/plugins/ml/public/application/settings/calendars/edit/new_calendar.js index ce1dfe7cd970f..6375dfab79857 100644 --- a/x-pack/plugins/ml/public/application/settings/calendars/edit/new_calendar.js +++ b/x-pack/plugins/ml/public/application/settings/calendars/edit/new_calendar.js @@ -20,6 +20,7 @@ import { ml } from '../../../services/ml_api_service'; import { withKibana } from '@kbn/kibana-react-plugin/public'; import { GLOBAL_CALENDAR } from '../../../../../common/constants/calendars'; import { ML_PAGES } from '../../../../../common/constants/locator'; +import { toastNotificationServiceProvider } from '../../../services/toast_notification_service'; import { getDocLinks } from '../../../util/dependency_cache'; import { HelpMenu } from '../../../components/help_menu'; @@ -54,6 +55,9 @@ class NewCalendarUI extends Component { } componentDidMount() { + this.toastNotificationService = toastNotificationServiceProvider( + this.props.kibana.services.notifications.toasts + ); this.formSetup(); } @@ -118,10 +122,9 @@ class NewCalendarUI extends Component { isGlobalCalendar, }); } catch (error) { - console.log(error); this.setState({ loading: false }); - const { toasts } = this.props.kibana.services.notifications; - toasts.addDanger( + this.toastNotificationService.displayErrorToast( + error, i18n.translate('xpack.ml.calendarsEdit.errorWithLoadingCalendarFromDataErrorMessage', { defaultMessage: 'An error occurred loading calendar form data. Try refreshing the page.', }) @@ -160,10 +163,9 @@ class NewCalendarUI extends Component { await ml.addCalendar(calendar); await this.returnToCalendarsManagementPage(); } catch (error) { - console.log('Error saving calendar', error); this.setState({ saving: false }); - const { toasts } = this.props.kibana.services.notifications; - toasts.addDanger( + this.toastNotificationService.displayErrorToast( + error, i18n.translate('xpack.ml.calendarsEdit.errorWithCreatingCalendarErrorMessage', { defaultMessage: 'An error occurred creating calendar {calendarId}', values: { calendarId: calendar.calendarId }, @@ -181,10 +183,9 @@ class NewCalendarUI extends Component { await ml.updateCalendar(calendar); await this.returnToCalendarsManagementPage(); } catch (error) { - console.log('Error saving calendar', error); this.setState({ saving: false }); - const { toasts } = this.props.kibana.services.notifications; - toasts.addDanger( + this.toastNotificationService.displayErrorToast( + error, i18n.translate('xpack.ml.calendarsEdit.errorWithUpdatingCalendarErrorMessage', { defaultMessage: 'An error occurred saving calendar {calendarId}. Try refreshing the page.', diff --git a/x-pack/plugins/ml/public/application/settings/calendars/edit/new_calendar.test.js b/x-pack/plugins/ml/public/application/settings/calendars/edit/new_calendar.test.js index 299c1340e8599..4e9a16858f816 100644 --- a/x-pack/plugins/ml/public/application/settings/calendars/edit/new_calendar.test.js +++ b/x-pack/plugins/ml/public/application/settings/calendars/edit/new_calendar.test.js @@ -117,6 +117,11 @@ const props = { }, }, }, + notifications: { + toasts: { + addDanger: () => {}, + }, + }, }, }, }; diff --git a/x-pack/plugins/ml/public/application/settings/calendars/list/calendars_list.js b/x-pack/plugins/ml/public/application/settings/calendars/list/calendars_list.js index a3bb900ca1ce2..27c6b4de8389c 100644 --- a/x-pack/plugins/ml/public/application/settings/calendars/list/calendars_list.js +++ b/x-pack/plugins/ml/public/application/settings/calendars/list/calendars_list.js @@ -13,6 +13,7 @@ import { EuiConfirmModal, EUI_MODAL_CONFIRM_BUTTON } from '@elastic/eui'; import { CalendarsListHeader } from './header'; import { CalendarsListTable } from './table'; import { ml } from '../../../services/ml_api_service'; +import { toastNotificationServiceProvider } from '../../../services/toast_notification_service'; import { mlNodesAvailable } from '../../../ml_nodes_check/check_ml_nodes'; import { deleteCalendars } from './delete_calendars'; import { i18n } from '@kbn/i18n'; @@ -58,6 +59,13 @@ export class CalendarsListUI extends Component { defaultMessage: 'An error occurred loading the list of calendars.', }) ); + const toastNotificationService = toastNotificationServiceProvider(toasts); + toastNotificationService.displayErrorToast( + error, + i18n.translate('xpack.ml.calendarsList.errorWithLoadingListOfCalendarsErrorMessage', { + defaultMessage: 'An error occurred loading the list of calendars.', + }) + ); } }; diff --git a/x-pack/plugins/ml/public/application/settings/filter_lists/edit/edit_filter_list.js b/x-pack/plugins/ml/public/application/settings/filter_lists/edit/edit_filter_list.js index 1c6dc162f505f..d05484a9d3b89 100644 --- a/x-pack/plugins/ml/public/application/settings/filter_lists/edit/edit_filter_list.js +++ b/x-pack/plugins/ml/public/application/settings/filter_lists/edit/edit_filter_list.js @@ -31,6 +31,7 @@ import { EditFilterListToolbar } from './toolbar'; import { ItemsGrid } from '../../../components/items_grid'; import { isValidFilterListId, saveFilterList } from './utils'; import { ml } from '../../../services/ml_api_service'; +import { toastNotificationServiceProvider } from '../../../services/toast_notification_service'; import { ML_PAGES } from '../../../../../common/constants/locator'; import { getDocLinks } from '../../../util/dependency_cache'; import { HelpMenu } from '../../../components/help_menu'; @@ -93,6 +94,9 @@ export class EditFilterListUI extends Component { } componentDidMount() { + this.toastNotificationService = toastNotificationServiceProvider( + this.props.kibana.services.notifications.toasts + ); const filterId = this.props.filterId; if (filterId !== undefined) { this.loadFilterList(filterId); @@ -117,10 +121,9 @@ export class EditFilterListUI extends Component { .then((filter) => { this.setLoadedFilterState(filter); }) - .catch((resp) => { - console.log(`Error loading filter ${filterId}:`, resp); - const { toasts } = this.props.kibana.services.notifications; - toasts.addDanger( + .catch((error) => { + this.toastNotificationService.displayErrorToast( + error, i18n.translate( 'xpack.ml.settings.filterLists.editFilterList.loadingDetailsOfFilterErrorMessage', { @@ -287,10 +290,9 @@ export class EditFilterListUI extends Component { this.setLoadedFilterState(savedFilter); this.returnToFiltersList(); }) - .catch((resp) => { - console.log(`Error saving filter ${filterId}:`, resp); - const { toasts } = this.props.kibana.services.notifications; - toasts.addDanger( + .catch((error) => { + this.toastNotificationService.displayErrorToast( + error, i18n.translate('xpack.ml.settings.filterLists.editFilterList.savingFilterErrorMessage', { defaultMessage: 'An error occurred saving filter {filterId}', values: { diff --git a/x-pack/plugins/ml/public/application/settings/filter_lists/edit/edit_filter_list.test.js b/x-pack/plugins/ml/public/application/settings/filter_lists/edit/edit_filter_list.test.js index 45c43e04daa68..e3e740f1f7d78 100644 --- a/x-pack/plugins/ml/public/application/settings/filter_lists/edit/edit_filter_list.test.js +++ b/x-pack/plugins/ml/public/application/settings/filter_lists/edit/edit_filter_list.test.js @@ -59,6 +59,15 @@ import { EditFilterList } from './edit_filter_list'; const props = { canCreateFilter: true, canDeleteFilter: true, + kibana: { + services: { + notifications: { + toasts: { + addWarning: () => {}, + }, + }, + }, + }, }; function prepareEditTest() { diff --git a/x-pack/plugins/ml/public/application/settings/filter_lists/list/filter_lists.js b/x-pack/plugins/ml/public/application/settings/filter_lists/list/filter_lists.js index 352856c6fcf51..a55473a731322 100644 --- a/x-pack/plugins/ml/public/application/settings/filter_lists/list/filter_lists.js +++ b/x-pack/plugins/ml/public/application/settings/filter_lists/list/filter_lists.js @@ -19,6 +19,7 @@ import { withKibana } from '@kbn/kibana-react-plugin/public'; import { FilterListsHeader } from './header'; import { FilterListsTable } from './table'; import { ml } from '../../../services/ml_api_service'; +import { toastNotificationServiceProvider } from '../../../services/toast_notification_service'; import { getDocLinks } from '../../../util/dependency_cache'; import { HelpMenu } from '../../../components/help_menu'; @@ -69,8 +70,8 @@ export class FilterListsUI extends Component { .then((filterLists) => { this.setFilterLists(filterLists); }) - .catch((resp) => { - console.log('Error loading list of filters:', resp); + .catch((error) => { + console.log('Error loading list of filters:', error); const { toasts } = this.props.kibana.services.notifications; toasts.addDanger( i18n.translate( @@ -80,6 +81,16 @@ export class FilterListsUI extends Component { } ) ); + const toastNotificationService = toastNotificationServiceProvider(toasts); + toastNotificationService.displayErrorToast( + error, + i18n.translate( + 'xpack.ml.settings.filterLists.filterLists.loadingFilterListsErrorMessage', + { + defaultMessage: 'An error occurred loading the filter lists', + } + ) + ); }); }; diff --git a/x-pack/plugins/ml/public/application/settings/settings.test.tsx b/x-pack/plugins/ml/public/application/settings/settings.test.tsx index ad3847e011371..89ad2a965df91 100644 --- a/x-pack/plugins/ml/public/application/settings/settings.test.tsx +++ b/x-pack/plugins/ml/public/application/settings/settings.test.tsx @@ -18,7 +18,7 @@ jest.mock('../components/help_menu', () => ({ jest.mock('../contexts/kibana', () => ({ useNotifications: () => { return { - toasts: { addDanger: jest.fn() }, + toasts: { addDanger: jest.fn(), addError: jest.fn() }, }; }, useMlKibana: () => { diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts index 90d107882f7bb..a4f0e6e230541 100644 --- a/x-pack/plugins/ml/public/plugin.ts +++ b/x-pack/plugins/ml/public/plugin.ts @@ -232,6 +232,19 @@ export class MlPlugin implements Plugin { } = await import('./register_helper'); registerSearchLinks(this.appUpdater$, fullLicense, mlCapabilities, !this.isServerless); + if ( + pluginsSetup.triggersActionsUi && + ((fullLicense && mlCapabilities.canUseMlAlerts && mlCapabilities.canGetJobs) || + // Register rules for basic license to show them in the UI as disabled + !fullLicense) + ) { + registerMlAlerts( + pluginsSetup.triggersActionsUi, + core.getStartServices, + pluginsSetup.alerting + ); + } + if (fullLicense) { registerMlUiActions(pluginsSetup.uiActions, core); @@ -242,18 +255,6 @@ export class MlPlugin implements Plugin { registerCasesAttachments(pluginsSetup.cases, coreStart, pluginStart); } - if ( - pluginsSetup.triggersActionsUi && - mlCapabilities.canUseMlAlerts && - mlCapabilities.canGetJobs - ) { - registerMlAlerts( - pluginsSetup.triggersActionsUi, - core.getStartServices, - pluginsSetup.alerting - ); - } - if (pluginsSetup.maps) { // Pass canGetJobs as minimum permission to show anomalies card in maps layers await registerMapExtension(pluginsSetup.maps, core, { diff --git a/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts b/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts index 2dadf5e510268..d270ca3166e2f 100644 --- a/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts +++ b/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts @@ -15,7 +15,11 @@ import type { RuleTypeParams, RuleTypeState, } from '@kbn/alerting-plugin/common'; -import { IRuleTypeAlerts, RuleExecutorOptions } from '@kbn/alerting-plugin/server'; +import { + AlertsClientError, + IRuleTypeAlerts, + RuleExecutorOptions, +} from '@kbn/alerting-plugin/server'; import { ALERT_REASON, ALERT_URL } from '@kbn/rule-data-utils'; import { MlAnomalyDetectionAlert } from '@kbn/alerts-as-data-utils'; import { ES_FIELD_TYPES } from '@kbn/field-types'; @@ -249,7 +253,9 @@ export function registerAnomalyDetectionAlertType({ ); const { alertsClient } = services; - if (!alertsClient) return { state: {} }; + if (!alertsClient) { + throw new AlertsClientError(); + } const executionResult = await execute(params, spaceId); diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/apm_transaction/manifest.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/apm_transaction/manifest.json index f07c9dcba94a4..46f7f7362eb21 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/apm_transaction/manifest.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/apm_transaction/manifest.json @@ -1,7 +1,7 @@ { "id": "apm_transaction", "title": "APM", - "description": "Detect anomalies in transaction latency, throughput and failure rate from your APM services for metric data.", + "description": "Legacy job for detecting anomalies in transaction latency, throughput and failure rate from your APM services for metric data. The latest version can be installed from the APM app in Observability.", "type": "Transaction data", "logoFile": "logo.json", "defaultIndexPattern": "apm-*-metric,metrics-apm*", diff --git a/x-pack/plugins/ml/server/shared_services/providers/__mocks__/trained_models.ts b/x-pack/plugins/ml/server/shared_services/providers/__mocks__/trained_models.ts index fa37f3d468fc3..ea935aa9cb61d 100644 --- a/x-pack/plugins/ml/server/shared_services/providers/__mocks__/trained_models.ts +++ b/x-pack/plugins/ml/server/shared_services/providers/__mocks__/trained_models.ts @@ -18,6 +18,7 @@ const trainedModelsServiceMock = { putTrainedModel: jest.fn(), getELSER: jest.fn().mockResolvedValue({ model_id: '.elser_model_2' }), getCuratedModelConfig: jest.fn().mockResolvedValue({ model_id: '.elser_model_2' }), + installElasticModel: jest.fn(), } as jest.Mocked; export const createTrainedModelsProviderMock = () => diff --git a/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts b/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts index 6b04a3e7580d9..36d639066f97a 100644 --- a/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts +++ b/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts @@ -53,6 +53,7 @@ export interface TrainedModelsProvider { ): Promise; getELSER(params?: GetModelDownloadConfigOptions): Promise; getCuratedModelConfig(...params: GetCuratedModelConfigParams): Promise; + installElasticModel(modelId: string): Promise; }; } @@ -144,6 +145,17 @@ export function getTrainedModelsProvider( return modelsProvider(scopedClient, mlClient, cloud).getCuratedModelConfig(...params); }); }, + async installElasticModel(modelId: string) { + return await guards + .isFullLicense() + .hasMlCapabilities(['canGetTrainedModels']) + .ok(async ({ scopedClient, mlClient, mlSavedObjectService }) => { + return modelsProvider(scopedClient, mlClient, cloud).installElasticModel( + modelId, + mlSavedObjectService + ); + }); + }, }; }, }; diff --git a/x-pack/plugins/observability/common/index.ts b/x-pack/plugins/observability/common/index.ts index 143bf77a1b0cc..3bd302b262fbc 100644 --- a/x-pack/plugins/observability/common/index.ts +++ b/x-pack/plugins/observability/common/index.ts @@ -45,7 +45,6 @@ export { profilingCo2PerKWH, profilingDatacenterPUE, profilingPervCPUWattX86, - profilingUseLegacyCo2Calculation, profilingPervCPUWattArm64, profilingAWSCostDiscountRate, profilingCostPervCPUPerHour, diff --git a/x-pack/plugins/observability/common/ui_settings_keys.ts b/x-pack/plugins/observability/common/ui_settings_keys.ts index bcc2f0451caac..b647fc8361db8 100644 --- a/x-pack/plugins/observability/common/ui_settings_keys.ts +++ b/x-pack/plugins/observability/common/ui_settings_keys.ts @@ -33,6 +33,5 @@ export const profilingPervCPUWattX86 = 'observability:profilingPerVCPUWattX86'; export const profilingPervCPUWattArm64 = 'observability:profilingPervCPUWattArm64'; export const profilingCo2PerKWH = 'observability:profilingCo2PerKWH'; export const profilingDatacenterPUE = 'observability:profilingDatacenterPUE'; -export const profilingUseLegacyCo2Calculation = 'observability:profilingUseLegacyCo2Calculation'; export const profilingAWSCostDiscountRate = 'observability:profilingAWSCostDiscountRate'; export const profilingCostPervCPUPerHour = 'observability:profilingCostPervCPUPerHour'; diff --git a/x-pack/plugins/observability/public/pages/overview/components/sections/metrics/metric_with_sparkline.tsx b/x-pack/plugins/observability/public/pages/overview/components/sections/metrics/metric_with_sparkline.tsx index 3e4b0476b5075..bd292a2bf88cb 100644 --- a/x-pack/plugins/observability/public/pages/overview/components/sections/metrics/metric_with_sparkline.tsx +++ b/x-pack/plugins/observability/public/pages/overview/components/sections/metrics/metric_with_sparkline.tsx @@ -36,7 +36,7 @@ export function MetricWithSparkline({ id, formatter, value, timeseries, color }: const theme = [EUI_SPARKLINE_THEME_PARTIAL]; const baseTheme = isDarkTheme ? DARK_THEME : LIGHT_THEME; - const colors = theme[1].colors?.vizColors ?? []; + const colors = baseTheme.colors?.vizColors ?? []; if (!value) { return ( diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap index 8c2cfc3b0d1f5..7c0ea00b409c9 100644 --- a/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap @@ -149,8 +149,8 @@ Array [ "goodEvents": 0, "isTempDoc": true, "service": Object { - "environment": null, - "name": null, + "environment": "irrelevant", + "name": "irrelevant", }, "sliValue": -1, "slo": Object { @@ -180,8 +180,8 @@ Array [ "statusCode": 0, "totalEvents": 0, "transaction": Object { - "name": null, - "type": null, + "name": "irrelevant", + "type": "irrelevant", }, }, "id": "slo-unique-id", diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap index 9ad1d09bd1ef8..d70d8ebfc0073 100644 --- a/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap @@ -435,8 +435,8 @@ exports[`ResetSLO resets all associated resources 11`] = ` "goodEvents": 0, "isTempDoc": true, "service": Object { - "environment": null, - "name": null, + "environment": "irrelevant", + "name": "irrelevant", }, "sliValue": -1, "slo": Object { @@ -469,8 +469,8 @@ exports[`ResetSLO resets all associated resources 11`] = ` "statusCode": 0, "totalEvents": 0, "transaction": Object { - "name": null, - "type": null, + "name": "irrelevant", + "type": "irrelevant", }, }, "id": "slo-irrelevant", diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts index 166ca0198dbb8..8e1939647bac8 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts @@ -9,14 +9,16 @@ import { ALL_VALUE } from '@kbn/slo-schema'; import { SLO } from '../../../../domain/models'; export function createTempSummaryDocument(slo: SLO, spaceId: string) { + const apmParams = 'environment' in slo.indicator.params ? slo.indicator.params : null; + return { service: { - environment: null, - name: null, + environment: apmParams?.environment ?? null, + name: apmParams?.service ?? null, }, transaction: { - name: null, - type: null, + name: apmParams?.transactionName ?? null, + type: apmParams?.transactionType ?? null, }, slo: { indicator: { diff --git a/x-pack/plugins/observability/server/ui_settings.ts b/x-pack/plugins/observability/server/ui_settings.ts index 8029b412ebb6a..5890dd4e16611 100644 --- a/x-pack/plugins/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability/server/ui_settings.ts @@ -33,7 +33,6 @@ import { profilingCo2PerKWH, profilingDatacenterPUE, profilingPervCPUWattX86, - profilingUseLegacyCo2Calculation, profilingPervCPUWattArm64, profilingAWSCostDiscountRate, profilingCostPervCPUPerHour, @@ -479,14 +478,6 @@ export const uiSettings: Record = { schema: schema.number({ min: 0 }), requiresPageReload: true, }, - [profilingUseLegacyCo2Calculation]: { - category: [observabilityFeatureId], - name: i18n.translate('xpack.observability.profilingUseLegacyCo2Calculation', { - defaultMessage: 'Use legacy CO2 and Dollar cost calculations in Universal Profiling', - }), - value: false, - schema: schema.boolean(), - }, [profilingAWSCostDiscountRate]: { category: [observabilityFeatureId], name: i18n.translate('xpack.observability.profilingAWSCostDiscountRateUiSettingName', { diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/welcome_message_knowledge_base.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/welcome_message_knowledge_base.tsx index 849a07b7cabfc..afdbed9ed4c43 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/welcome_message_knowledge_base.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/welcome_message_knowledge_base.tsx @@ -113,7 +113,7 @@ export function WelcomeMessageKnowledgeBase({ {i18n.translate( 'xpack.observabilityAiAssistant.welcomeMessageKnowledgeBase.yourKnowledgeBaseIsNotSetUpCorrectlyLabel', - { defaultMessage: 'Your Knowledge base is not set up correctly' } + { defaultMessage: `Your Knowledge base hasn't been set up.` } )} @@ -127,13 +127,13 @@ export function WelcomeMessageKnowledgeBase({ data-test-subj="observabilityAiAssistantWelcomeMessageSetUpKnowledgeBaseButton" fill isLoading={checkForInstallStatus} - iconType="refresh" + iconType="importAction" onClick={handleRetryInstall} > {i18n.translate( 'xpack.observabilityAiAssistant.welcomeMessage.retryButtonLabel', { - defaultMessage: 'Retry install', + defaultMessage: 'Install Knowledge base', } )} diff --git a/x-pack/plugins/observability_ai_assistant/public/components/feedback_buttons.tsx b/x-pack/plugins/observability_ai_assistant/public/components/feedback_buttons.tsx index 2187817e7228e..6315d493078c5 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/feedback_buttons.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/feedback_buttons.tsx @@ -16,6 +16,11 @@ interface FeedbackButtonsProps { onClickFeedback: (feedback: Feedback) => void; } +const THANK_YOU_MESSAGE = i18n.translate( + 'xpack.observabilityAiAssistant.feedbackButtons.em.thanksForYourFeedbackLabel', + { defaultMessage: 'Thanks for your feedback' } +); + export function FeedbackButtons({ onClickFeedback }: FeedbackButtonsProps) { const { notifications } = useKibana().services; @@ -24,13 +29,13 @@ export function FeedbackButtons({ onClickFeedback }: FeedbackButtonsProps) { const handleClickPositive = () => { onClickFeedback('positive'); setHasBeenClicked(true); - notifications.toasts.addSuccess('Thanks for your feedback!'); + notifications.toasts.addSuccess(THANK_YOU_MESSAGE); }; const handleClickNegative = () => { onClickFeedback('negative'); setHasBeenClicked(true); - notifications.toasts.addSuccess('Thanks for your feedback!'); + notifications.toasts.addSuccess(THANK_YOU_MESSAGE); }; return ( diff --git a/x-pack/plugins/osquery/public/agents/agent_grouper.ts b/x-pack/plugins/osquery/public/agents/agent_grouper.ts index 1375c30437d60..86f6bcbd42245 100644 --- a/x-pack/plugins/osquery/public/agents/agent_grouper.ts +++ b/x-pack/plugins/osquery/public/agents/agent_grouper.ts @@ -35,7 +35,7 @@ export const generateAgentOption = ( disabled: agent.status !== 'online', label: `${agent.local_metadata.host.hostname} (${agent.local_metadata.elastic.agent.id})`, key: agent.local_metadata.elastic.agent.id, - color: getColor(groupType), + color: agent.status !== 'online' ? 'danger' : getColor(groupType), value: { groupType, groups: { diff --git a/x-pack/plugins/osquery/public/agents/agents_table.tsx b/x-pack/plugins/osquery/public/agents/agents_table.tsx index f6b80e670f95b..c7b6fdd432fa3 100644 --- a/x-pack/plugins/osquery/public/agents/agents_table.tsx +++ b/x-pack/plugins/osquery/public/agents/agents_table.tsx @@ -5,8 +5,8 @@ * 2.0. */ -import { find } from 'lodash/fp'; -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { find, isEmpty } from 'lodash/fp'; +import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react'; import { EuiComboBox, EuiHealth, @@ -40,7 +40,7 @@ import { NO_AGENT_AVAILABLE_TITLE, } from './translations'; -import type { SelectedGroups, AgentOptionValue, GroupOption, AgentSelection } from './types'; +import type { GroupOption, AgentSelection } from './types'; import { AGENT_GROUP_KEY } from './types'; interface AgentsTableProps { @@ -70,48 +70,45 @@ const AgentsTableComponent: React.FC = ({ agentSelection, onCh const { isLoading: agentsLoading, + isRefetching: agentsRefetching, data: agentList, isFetched: agentsFetched, } = useAllAgents(debouncedSearchValue, { perPage, + agentIds: agentSelection?.agents, }); // option related const [options, setOptions] = useState([]); const [selectedOptions, setSelectedOptions] = useState([]); - const [numAgentsSelected, setNumAgentsSelected] = useState(0); const defaultValueInitialized = useRef(false); + const numAgentsSelected = useMemo(() => { + const { newAgentSelection, selectedAgents, selectedGroups } = + generateAgentSelection(selectedOptions); + if (newAgentSelection.allAgentsSelected) { + return agentList?.total ?? 0; + } else { + const checkAgent = generateAgentCheck(selectedGroups); + + return ( + // filter out all the agents counted by selected policies and platforms + selectedAgents.filter(checkAgent).length + + // add the number of agents added via policy and platform groups + getNumAgentsInGrouping(selectedGroups) - + // subtract the number of agents double counted by policy/platform selections + getNumOverlapped(selectedGroups, agentList?.groups?.overlap ?? {}) + ); + } + }, [agentList?.groups?.overlap, agentList?.total, selectedOptions]); + const onSelection = useCallback( (selection: GroupOption[]) => { - // TODO?: optimize this by making the selection computation incremental - const { - newAgentSelection, - selectedAgents, - selectedGroups, - }: { - newAgentSelection: AgentSelection; - selectedAgents: AgentOptionValue[]; - selectedGroups: SelectedGroups; - } = generateAgentSelection(selection); - if (newAgentSelection.allAgentsSelected) { - setNumAgentsSelected(agentList?.total ?? 0); - } else { - const checkAgent = generateAgentCheck(selectedGroups); - setNumAgentsSelected( - // filter out all the agents counted by selected policies and platforms - selectedAgents.filter(checkAgent).length + - // add the number of agents added via policy and platform groups - getNumAgentsInGrouping(selectedGroups) - - // subtract the number of agents double counted by policy/platform selections - getNumOverlapped(selectedGroups, agentList?.groups?.overlap ?? {}) - ); - } - + const { newAgentSelection } = generateAgentSelection(selection); onChange(newAgentSelection); setSelectedOptions(selection); }, - [agentList?.groups?.overlap, agentList?.total, onChange] + [onChange] ); useEffect(() => { @@ -132,7 +129,13 @@ const AgentsTableComponent: React.FC = ({ agentSelection, onCh } }; - if (agentSelection && !defaultValueInitialized.current && options.length) { + if ( + agentSelection && + !isEmpty(agentSelection) && + !defaultValueInitialized.current && + options.length && + !agentsRefetching + ) { if (agentSelection.allAgentsSelected) { const allAgentsOptions = find(['label', ALL_AGENTS_LABEL], options); @@ -150,7 +153,7 @@ const AgentsTableComponent: React.FC = ({ agentSelection, onCh handleSelectedOptions(agentSelection.agents, AGENT_SELECTION_LABEL); } } - }, [agentSelection, onSelection, options, selectedOptions]); + }, [agentSelection, agentsFetched, agentsRefetching, onSelection, options, selectedOptions]); useEffect(() => { if (agentsFetched && agentList?.groups) { diff --git a/x-pack/plugins/osquery/public/agents/helpers.test.ts b/x-pack/plugins/osquery/public/agents/helpers.test.ts index 067aebc57944e..bdf4d2628e360 100644 --- a/x-pack/plugins/osquery/public/agents/helpers.test.ts +++ b/x-pack/plugins/osquery/public/agents/helpers.test.ts @@ -19,6 +19,7 @@ describe('generateAgentSelection', () => { expect(newAgentSelection).toEqual({ agents: [], allAgentsSelected: false, + offlineAgentsSelected: false, platformsSelected: [], policiesSelected: [], }); @@ -47,6 +48,7 @@ describe('generateAgentSelection', () => { expect(newAgentSelection).toEqual({ agents: [], allAgentsSelected: false, + offlineAgentsSelected: false, platformsSelected: platformOptions.map(({ value: { id } }) => id), policiesSelected: policyOptions.map(({ value: { id } }) => id), }); diff --git a/x-pack/plugins/osquery/public/agents/helpers.ts b/x-pack/plugins/osquery/public/agents/helpers.ts index b84c6e4957286..83c14ec0dcdac 100644 --- a/x-pack/plugins/osquery/public/agents/helpers.ts +++ b/x-pack/plugins/osquery/public/agents/helpers.ts @@ -67,12 +67,19 @@ export const generateAgentCheck = }) .every((a) => !a); -export const generateAgentSelection = (selection: GroupOption[]) => { +export const generateAgentSelection = ( + selection: GroupOption[] +): { + newAgentSelection: AgentSelection; + selectedAgents: AgentOptionValue[]; + selectedGroups: SelectedGroups; +} => { const newAgentSelection: AgentSelection = { agents: [], allAgentsSelected: false, platformsSelected: [], policiesSelected: [], + offlineAgentsSelected: false, }; // parse through the selections to be able to determine how many are actually selected const selectedAgents: AgentOptionValue[] = []; @@ -116,6 +123,10 @@ export const generateAgentSelection = (selection: GroupOption[]) => { } newAgentSelection.agents.push(key); + if (opt.disabled) { + newAgentSelection.offlineAgentsSelected = true; + } + break; default: // this should never happen! diff --git a/x-pack/plugins/osquery/public/agents/types.ts b/x-pack/plugins/osquery/public/agents/types.ts index 6f443641b227b..813c8a6276a02 100644 --- a/x-pack/plugins/osquery/public/agents/types.ts +++ b/x-pack/plugins/osquery/public/agents/types.ts @@ -30,6 +30,7 @@ export interface AgentSelection { allAgentsSelected: boolean; platformsSelected: string[]; policiesSelected: string[]; + offlineAgentsSelected?: boolean; } interface BaseGroupOption { diff --git a/x-pack/plugins/osquery/public/agents/use_all_agents.ts b/x-pack/plugins/osquery/public/agents/use_all_agents.ts index d0ea65c6bab05..12b98bccc0ed5 100644 --- a/x-pack/plugins/osquery/public/agents/use_all_agents.ts +++ b/x-pack/plugins/osquery/public/agents/use_all_agents.ts @@ -18,11 +18,12 @@ import { useOsqueryPolicies } from './use_osquery_policies'; interface RequestOptions { perPage?: number; page?: number; + agentIds?: string[]; } // TODO: break out the paginated vs all cases into separate hooks export const useAllAgents = (searchValue = '', opts: RequestOptions = { perPage: 9000 }) => { - const { perPage } = opts; + const { perPage, agentIds } = opts; const { http } = useKibana().services; const setErrorToast = useErrorToast(); @@ -32,9 +33,9 @@ export const useAllAgents = (searchValue = '', opts: RequestOptions = { perPage: agents: Agent[]; groups: ReturnType; total: number; - }>( - ['agents', osqueryPolicies, searchValue, perPage], - () => { + }>({ + queryKey: ['agents', osqueryPolicies, searchValue, perPage, agentIds], + queryFn: () => { let kuery = ''; if (osqueryPolicies?.length) { @@ -43,7 +44,9 @@ export const useAllAgents = (searchValue = '', opts: RequestOptions = { perPage: if (searchValue) { kuery += ` and (local_metadata.host.hostname:*${searchValue}* or local_metadata.elastic.agent.id:*${searchValue}*)`; } else { - kuery += ` and (status:online)`; + kuery += ` and (status:online ${ + agentIds?.length ? `or local_metadata.elastic.agent.id:(${agentIds.join(' or ')})` : '' + })`; } } @@ -55,18 +58,16 @@ export const useAllAgents = (searchValue = '', opts: RequestOptions = { perPage: }, }); }, - { - enabled: isFetched && !!osqueryPolicies?.length, - onSuccess: () => setErrorToast(), - onError: (error) => - // @ts-expect-error update types - setErrorToast(error?.body, { - title: i18n.translate('xpack.osquery.agents.fetchError', { - defaultMessage: 'Error while fetching agents', - }), - // @ts-expect-error update types - toastMessage: error?.body?.error, + enabled: isFetched && !!osqueryPolicies?.length, + onSuccess: () => setErrorToast(), + onError: (error) => + // @ts-expect-error update types + setErrorToast(error?.body, { + title: i18n.translate('xpack.osquery.agents.fetchError', { + defaultMessage: 'Error while fetching agents', }), - } - ); + // @ts-expect-error update types + toastMessage: error?.body?.error, + }), + }); }; diff --git a/x-pack/plugins/osquery/public/live_queries/form/agents_table_field.tsx b/x-pack/plugins/osquery/public/live_queries/form/agents_table_field.tsx index eab43c5982b80..078a9c712fc08 100644 --- a/x-pack/plugins/osquery/public/live_queries/form/agents_table_field.tsx +++ b/x-pack/plugins/osquery/public/live_queries/form/agents_table_field.tsx @@ -14,6 +14,12 @@ import type { AgentSelection } from '../../agents/types'; const checkAgentsLength = (agentsSelection: AgentSelection) => { if (!isEmpty(agentsSelection)) { + if (agentsSelection.offlineAgentsSelected) { + return i18n.translate('xpack.osquery.pack.queryFlyoutForm.osqueryAgentsOfflineErrorMessage', { + defaultMessage: 'Some agents are offline', + }); + } + const isValid = !!( agentsSelection.allAgentsSelected || agentsSelection.agents?.length || diff --git a/x-pack/plugins/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts b/x-pack/plugins/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts index 272b5a1743d65..b2f3f743df37e 100644 --- a/x-pack/plugins/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts +++ b/x-pack/plugins/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts @@ -174,9 +174,8 @@ describe('Functions page', () => { cy.get(firstRowSelector).eq(2).contains('/'); }); - // skipping this for now until the values are passed to the ES plugin - describe.skip('Test changing CO2 settings', () => { - afterEach(() => { + describe('Test changing CO2 settings', () => { + after(() => { cy.updateAdvancedSettings({ [profilingCo2PerKWH]: 0.000379069, [profilingDatacenterPUE]: 1.7, @@ -190,7 +189,7 @@ describe('Functions page', () => { const firstRowSelector = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"]'; cy.get(firstRowSelector).eq(1).contains('1'); cy.get(firstRowSelector).eq(2).contains('vmlinux'); - cy.get(firstRowSelector).eq(5).contains('1.84 lbs / 0.84 kg'); + cy.get(firstRowSelector).eq(5).contains('4.07 lbs / 1.84 kg'); cy.contains('Settings').click(); cy.contains('Advanced Settings'); cy.get(`[data-test-subj="advancedSetting-editField-${profilingCo2PerKWH}"]`) @@ -209,22 +208,22 @@ describe('Functions page', () => { }); cy.go('back'); cy.wait('@getTopNFunctions'); - cy.get(firstRowSelector).eq(5).contains('24.22k lbs / 10.99k'); + cy.get(firstRowSelector).eq(5).contains('1.87k lbs / 847.83 kg'); const firstRowSelectorActionButton = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"] .euiButtonIcon'; cy.get(firstRowSelectorActionButton).click(); [ - { parentKey: 'impactEstimates', key: 'co2Emission', value: '0.02 lbs / 0.01 kg' }, - { parentKey: 'impactEstimates', key: 'selfCo2Emission', value: '0.02 lbs / 0.01 kg' }, + { parentKey: 'impactEstimates', key: 'co2Emission', value: '~0.00 lbs / ~0.00 kg' }, + { parentKey: 'impactEstimates', key: 'selfCo2Emission', value: '~0.00 lbs / ~0.00 kg' }, { parentKey: 'impactEstimates', key: 'annualizedCo2Emission', - value: '24.22k lbs / 10.99k kg', + value: '1.87k lbs / 847.83 kg', }, { parentKey: 'impactEstimates', key: 'annualizedSelfCo2Emission', - value: '24.22k lbs / 10.99k kg', + value: '1.87k lbs / 847.83 kg', }, ].forEach(({ parentKey, key, value }) => { cy.get(`[data-test-subj="${parentKey}_${key}"]`).contains(value); diff --git a/x-pack/plugins/profiling/public/components/differential_topn_functions_grid/index.tsx b/x-pack/plugins/profiling/public/components/differential_topn_functions_grid/index.tsx index 621a3b2ba0329..d31090f9c8c82 100644 --- a/x-pack/plugins/profiling/public/components/differential_topn_functions_grid/index.tsx +++ b/x-pack/plugins/profiling/public/components/differential_topn_functions_grid/index.tsx @@ -6,10 +6,12 @@ */ import { + EuiButtonIcon, EuiDataGrid, EuiDataGridCellValueElementProps, EuiDataGridColumn, EuiDataGridSorting, + EuiScreenReaderOnly, useEuiTheme, } from '@elastic/eui'; import { css } from '@emotion/react'; @@ -24,8 +26,14 @@ import { import { orderBy } from 'lodash'; import React, { useEffect, useMemo, useState } from 'react'; import { useCalculateImpactEstimate } from '../../hooks/use_calculate_impact_estimates'; +import { FrameInformationTooltip } from '../frame_information_window/frame_information_tooltip'; import { FunctionRow } from '../topn_functions/function_row'; -import { getFunctionsRows, IFunctionRow } from '../topn_functions/utils'; +import { + convertRowToFrame, + getFunctionsRows, + getTotalCount, + IFunctionRow, +} from '../topn_functions/utils'; import { getColumns } from './get_columns'; import { getCompareFrameAction } from './get_compare_frame_action'; @@ -83,6 +91,7 @@ interface Props { comparisonSortDirection: 'asc' | 'desc'; comparisonSortField: TopNComparisonFunctionSortField; totalSeconds: number; + comparisonTotalSeconds: number; } export function DifferentialTopNFunctionsGrid({ @@ -90,27 +99,27 @@ export function DifferentialTopNFunctionsGrid({ baselineScaleFactor, comparison, comparisonScaleFactor, + comparisonSortDirection, + comparisonSortField, + comparisonTotalSeconds, onChangePage, onChangeSort, + onFrameClick, pageIndex, sortDirection, sortField, totalSeconds, - onFrameClick, - comparisonSortDirection, - comparisonSortField, }: Props) { + const theme = useEuiTheme(); const calculateImpactEstimates = useCalculateImpactEstimate(); const [selectedFrame, setSelectedFrame] = useState(); - const theme = useEuiTheme(); - - const totalCount = useMemo(() => { - if (!base || !base.TotalCount) { - return 0; - } + const [rowsInformation, setRowsInformation] = useState< + { baseRow: IFunctionRow; comparisonRow?: IFunctionRow } | undefined + >(); - return base.TotalCount; - }, [base]); + const { totalCount, comparisonTotalCount } = useMemo(() => { + return { totalCount: getTotalCount(base), comparisonTotalCount: getTotalCount(comparison) }; + }, [base, comparison]); function onSort(newSortingColumns: EuiDataGridSorting['columns']) { // As newSortingColumns is an array and we only sort by a single field for both base and comparison @@ -151,7 +160,7 @@ export function DifferentialTopNFunctionsGrid({ comparisonScaleFactor, comparisonTopNFunctions: base, topNFunctions: comparison, - totalSeconds, + totalSeconds: comparisonTotalSeconds, }), }; }, [ @@ -160,6 +169,7 @@ export function DifferentialTopNFunctionsGrid({ calculateImpactEstimates, comparison, comparisonScaleFactor, + comparisonTotalSeconds, totalSeconds, ]); @@ -224,42 +234,109 @@ export function DifferentialTopNFunctionsGrid({ const rowCount = Math.min(Math.max(sortedBaseRows.length, sortedComparisonRows.length), 100); return ( - {}, - onChangePage, - pageSizeOptions: [], - }} - rowHeightsOptions={{ defaultHeight: 'auto' }} - toolbarVisibility={{ - showColumnSelector: false, - showKeyboardShortcuts: false, - showDisplaySelector: false, - showSortSelector: false, - }} - /> + <> + + + {i18n.translate('xpack.profiling.topNFunctionsGrid.span.controlsLabel', { + defaultMessage: 'Controls', + })} + + + ); + }, + rowCellRender: function RowCellRender({ rowIndex }) { + function handleOnClick() { + const row = sortedBaseRows[rowIndex]; + const currentFrameId = getFrameIdentification(row.frame); + const compareRow = sortedComparisonRows.find( + (item) => getFrameIdentification(item.frame) === currentFrameId + ); + setRowsInformation({ + baseRow: row, + comparisonRow: compareRow, + }); + } + return ( + + ); + }, + }, + ]} + columnVisibility={{ visibleColumns, setVisibleColumns }} + rowCount={rowCount} + renderCellValue={CellValue} + sorting={{ + columns: [ + { id: sortField, direction: sortDirection }, + { id: comparisonSortField, direction: comparisonSortDirection }, + ], + onSort, + }} + pagination={{ + pageIndex, + pageSize: 50, + // Left it empty on purpose as it is a required property on the pagination + onChangeItemsPerPage: () => {}, + onChangePage, + pageSizeOptions: [], + }} + rowHeightsOptions={{ defaultHeight: 'auto' }} + toolbarVisibility={{ + showColumnSelector: false, + showKeyboardShortcuts: false, + showDisplaySelector: false, + showSortSelector: false, + }} + /> + {rowsInformation && ( + { + setRowsInformation(undefined); + }} + /> + )} + ); } diff --git a/x-pack/plugins/profiling/public/components/flamegraph/flamegraph_tooltip.tsx b/x-pack/plugins/profiling/public/components/flamegraph/flamegraph_tooltip.tsx index 75ba9258aeaf0..d500f556fd5ff 100644 --- a/x-pack/plugins/profiling/public/components/flamegraph/flamegraph_tooltip.tsx +++ b/x-pack/plugins/profiling/public/components/flamegraph/flamegraph_tooltip.tsx @@ -21,14 +21,12 @@ import { css } from '@emotion/react'; import { i18n } from '@kbn/i18n'; import { isNumber } from 'lodash'; import React from 'react'; -import { profilingUseLegacyCo2Calculation } from '@kbn/observability-plugin/common'; import { useCalculateImpactEstimate } from '../../hooks/use_calculate_impact_estimates'; import { asCost } from '../../utils/formatters/as_cost'; import { asPercentage } from '../../utils/formatters/as_percentage'; import { asWeight } from '../../utils/formatters/as_weight'; import { CPULabelWithHint } from '../cpu_label_with_hint'; import { TooltipRow } from './tooltip_row'; -import { useProfilingDependencies } from '../contexts/profiling_dependencies/use_profiling_dependencies'; interface Props { annualCO2KgsInclusive: number; @@ -73,13 +71,6 @@ export function FlameGraphTooltip({ totalSamples, totalSeconds, }: Props) { - const { - start: { core }, - } = useProfilingDependencies(); - const shouldUseLegacyCo2Calculation = core.uiSettings.get( - profilingUseLegacyCo2Calculation - ); - const theme = useEuiTheme(); const calculateImpactEstimates = useCalculateImpactEstimate(); @@ -187,16 +178,8 @@ export function FlameGraphTooltip({ label={i18n.translate('xpack.profiling.flameGraphTooltip.annualizedCo2', { defaultMessage: `Annualized CO2`, })} - value={ - shouldUseLegacyCo2Calculation - ? impactEstimates.totalCPU.annualizedCo2 - : annualCO2KgsInclusive - } - comparison={ - shouldUseLegacyCo2Calculation - ? comparisonImpactEstimates?.totalCPU.annualizedCo2 - : comparisonAnnualCO2KgsInclusive - } + value={annualCO2KgsInclusive} + comparison={comparisonAnnualCO2KgsInclusive} formatValue={(value) => asWeight(value, 'kgs')} showDifference formatDifferenceAsPercentage={false} @@ -205,16 +188,8 @@ export function FlameGraphTooltip({ label={i18n.translate('xpack.profiling.flameGraphTooltip.annualizedDollarCost', { defaultMessage: `Annualized dollar cost`, })} - value={ - shouldUseLegacyCo2Calculation - ? impactEstimates.totalCPU.annualizedDollarCost - : annualCostsUSDInclusive - } - comparison={ - shouldUseLegacyCo2Calculation - ? comparisonImpactEstimates?.totalCPU.annualizedDollarCost - : comparisonAnnualCostsUSDInclusive - } + value={annualCostsUSDInclusive} + comparison={comparisonAnnualCostsUSDInclusive} formatValue={asCost} showDifference formatDifferenceAsPercentage={false} diff --git a/x-pack/plugins/profiling/public/components/flamegraph/index.tsx b/x-pack/plugins/profiling/public/components/flamegraph/index.tsx index cbebc80606703..38fa7273bc1af 100644 --- a/x-pack/plugins/profiling/public/components/flamegraph/index.tsx +++ b/x-pack/plugins/profiling/public/components/flamegraph/index.tsx @@ -88,6 +88,7 @@ export function FlameGraph({ }; const totalSamples = columnarData.viewModel.value[0]; + const comparisonTotalSamples = comparisonFlamegraph?.CountInclusive[0]; const [highlightedVmIndex, setHighlightedVmIndex] = useState(undefined); @@ -109,6 +110,31 @@ export function FlameGraph({ totalAnnualCostUSD: primaryFlamegraph.TotalAnnualCostsUSDItems[highlightedVmIndex], } : undefined; + const primaryFlamegraphNodeId = + highlightedVmIndex !== undefined ? primaryFlamegraph?.ID[highlightedVmIndex] : undefined; + const comparisonFlamegraphNode = + primaryFlamegraphNodeId !== undefined + ? columnarData.comparisonNodesById[primaryFlamegraphNodeId] + : undefined; + + const comparisonSelected: Frame | undefined = + comparisonFlamegraphNode !== undefined + ? { + fileID: comparisonFlamegraphNode.FileID, + frameType: comparisonFlamegraphNode.FrameType, + exeFileName: comparisonFlamegraphNode.ExeFileName, + addressOrLine: comparisonFlamegraphNode.AddressOrLine, + functionName: comparisonFlamegraphNode.FunctionName, + sourceFileName: comparisonFlamegraphNode.SourceFileName, + sourceLine: comparisonFlamegraphNode.SourceLine, + countInclusive: comparisonFlamegraphNode.CountInclusive, + countExclusive: comparisonFlamegraphNode.CountExclusive, + selfAnnualCO2Kgs: comparisonFlamegraphNode.SelfAnnualCO2Kgs, + totalAnnualCO2Kgs: comparisonFlamegraphNode.TotalAnnualCO2Kgs, + selfAnnualCostUSD: comparisonFlamegraphNode.SelfAnnualCostUSD, + totalAnnualCostUSD: comparisonFlamegraphNode.TotalAnnualCostUSD, + } + : undefined; useEffect(() => { setHighlightedVmIndex(undefined); @@ -220,7 +246,11 @@ export function FlameGraph({
{showInformationWindow && ( + + {i18n.translate('xpack.profiling.frameInformationWindow.selectFrame', { + defaultMessage: 'Click on a frame to display more information', + })} + + + ); +} diff --git a/x-pack/plugins/profiling/public/components/frame_information_window/get_impact_rows.tsx b/x-pack/plugins/profiling/public/components/frame_information_window/get_impact_rows.tsx index 29289faca843b..1df0d55ae22e2 100644 --- a/x-pack/plugins/profiling/public/components/frame_information_window/get_impact_rows.tsx +++ b/x-pack/plugins/profiling/public/components/frame_information_window/get_impact_rows.tsx @@ -7,16 +7,16 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; +import { + ANNUAL_SECONDS, + CalculateImpactEstimates, +} from '../../hooks/use_calculate_impact_estimates'; import { asCost } from '../../utils/formatters/as_cost'; import { asDuration } from '../../utils/formatters/as_duration'; import { asNumber } from '../../utils/formatters/as_number'; import { asPercentage } from '../../utils/formatters/as_percentage'; import { asWeight } from '../../utils/formatters/as_weight'; import { CPULabelWithHint } from '../cpu_label_with_hint'; -import { - ANNUAL_SECONDS, - CalculateImpactEstimates, -} from '../../hooks/use_calculate_impact_estimates'; interface Params { countInclusive: number; @@ -24,11 +24,56 @@ interface Params { totalSamples: number; totalSeconds: number; calculateImpactEstimates: CalculateImpactEstimates; - shouldUseLegacyCo2Calculation: boolean; selfAnnualCO2Kgs: number; totalAnnualCO2Kgs: number; selfAnnualCostUSD: number; totalAnnualCostUSD: number; + rank?: number; +} + +export interface ImpactRow { + 'data-test-subj': string; + label: React.ReactNode; + value: string; +} + +const getComparisonValue = (value: T, comparisonValue?: T) => + comparisonValue ? `${value} vs ${comparisonValue}` : value; + +/** + * e.g.: + * label: 'foo', + * value: 'abc' vs 'xyz' + */ +export function getComparisonImpactRow({ + base, + comparison, +}: { + base: Params; + comparison?: Params; +}) { + const baseImpactRows = getImpactRows(base); + const comparisonImpactRows = comparison ? getImpactRows(comparison) : []; + return [ + ...(base.rank + ? [ + { + 'data-test-subj': 'rank', + label: i18n.translate('xpack.profiling.flameGraphInformationWindow.rank', { + defaultMessage: 'Rank', + }), + value: getComparisonValue(base.rank, comparison?.rank), + }, + ] + : []), + ...baseImpactRows.map((baseItem, index) => { + const comparisonValue = comparisonImpactRows[index]?.value; + return { + ...baseItem, + value: getComparisonValue(baseItem.value, comparisonValue), + }; + }), + ]; } export function getImpactRows({ @@ -37,12 +82,11 @@ export function getImpactRows({ totalSamples, totalSeconds, calculateImpactEstimates, - shouldUseLegacyCo2Calculation, selfAnnualCO2Kgs, totalAnnualCO2Kgs, selfAnnualCostUSD, totalAnnualCostUSD, -}: Params) { +}: Params): ImpactRow[] { const { selfCPU, totalCPU } = calculateImpactEstimates({ countInclusive, countExclusive, @@ -117,10 +161,7 @@ export function getImpactRows({ defaultMessage: 'CO2 emission', } ), - value: asWeight( - shouldUseLegacyCo2Calculation ? totalCPU.co2 : totalAnnualCO2Kgs / annualSecondsRatio, - 'kgs' - ), + value: asWeight(totalAnnualCO2Kgs / annualSecondsRatio, 'kgs'), }, { 'data-test-subj': 'selfCo2Emission', @@ -128,10 +169,7 @@ export function getImpactRows({ 'xpack.profiling.flameGraphInformationWindow.co2EmissionExclusiveLabel', { defaultMessage: 'CO2 emission (excl. children)' } ), - value: asWeight( - shouldUseLegacyCo2Calculation ? selfCPU.co2 : selfAnnualCO2Kgs / annualSecondsRatio, - 'kgs' - ), + value: asWeight(selfAnnualCO2Kgs / annualSecondsRatio, 'kgs'), }, { 'data-test-subj': 'annualizedCo2Emission', @@ -139,10 +177,7 @@ export function getImpactRows({ 'xpack.profiling.flameGraphInformationWindow.annualizedCo2InclusiveLabel', { defaultMessage: 'Annualized CO2' } ), - value: asWeight( - shouldUseLegacyCo2Calculation ? totalCPU.annualizedCo2 : totalAnnualCO2Kgs, - 'kgs' - ), + value: asWeight(totalAnnualCO2Kgs, 'kgs'), }, { 'data-test-subj': 'annualizedSelfCo2Emission', @@ -150,10 +185,7 @@ export function getImpactRows({ 'xpack.profiling.flameGraphInformationWindow.annualizedCo2ExclusiveLabel', { defaultMessage: 'Annualized CO2 (excl. children)' } ), - value: asWeight( - shouldUseLegacyCo2Calculation ? selfCPU.annualizedCo2 : selfAnnualCO2Kgs, - 'kgs' - ), + value: asWeight(selfAnnualCO2Kgs, 'kgs'), }, { 'data-test-subj': 'dollarCost', @@ -161,11 +193,7 @@ export function getImpactRows({ 'xpack.profiling.flameGraphInformationWindow.dollarCostInclusiveLabel', { defaultMessage: 'Dollar cost' } ), - value: asCost( - shouldUseLegacyCo2Calculation - ? totalCPU.dollarCost - : totalAnnualCostUSD / annualSecondsRatio - ), + value: asCost(totalAnnualCostUSD / annualSecondsRatio), }, { 'data-test-subj': 'selfDollarCost', @@ -173,9 +201,7 @@ export function getImpactRows({ 'xpack.profiling.flameGraphInformationWindow.dollarCostExclusiveLabel', { defaultMessage: 'Dollar cost (excl. children)' } ), - value: asCost( - shouldUseLegacyCo2Calculation ? selfCPU.dollarCost : selfAnnualCostUSD / annualSecondsRatio - ), + value: asCost(selfAnnualCostUSD / annualSecondsRatio), }, { 'data-test-subj': 'annualizedDollarCost', @@ -183,9 +209,7 @@ export function getImpactRows({ 'xpack.profiling.flameGraphInformationWindow.annualizedDollarCostInclusiveLabel', { defaultMessage: 'Annualized dollar cost' } ), - value: asCost( - shouldUseLegacyCo2Calculation ? totalCPU.annualizedDollarCost : totalAnnualCostUSD - ), + value: asCost(totalAnnualCostUSD), }, { 'data-test-subj': 'annualizedSelfDollarCost', @@ -193,9 +217,7 @@ export function getImpactRows({ 'xpack.profiling.flameGraphInformationWindow.annualizedDollarCostExclusiveLabel', { defaultMessage: 'Annualized dollar cost (excl. children)' } ), - value: asCost( - shouldUseLegacyCo2Calculation ? selfCPU.annualizedDollarCost : selfAnnualCostUSD - ), + value: asCost(selfAnnualCostUSD), }, ]; } diff --git a/x-pack/plugins/profiling/public/components/frame_information_window/index.tsx b/x-pack/plugins/profiling/public/components/frame_information_window/index.tsx index a81eadd215204..a0dbc1c7737b4 100644 --- a/x-pack/plugins/profiling/public/components/frame_information_window/index.tsx +++ b/x-pack/plugins/profiling/public/components/frame_information_window/index.tsx @@ -4,19 +4,19 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiText, EuiTitle } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiStat, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FrameSymbolStatus, getFrameSymbolStatus } from '@kbn/profiling-utils'; import React from 'react'; -import { profilingUseLegacyCo2Calculation } from '@kbn/observability-plugin/common'; +import { useCalculateImpactEstimate } from '../../hooks/use_calculate_impact_estimates'; +import { FramesSummary } from '../frames_summary'; +import { EmptyFrame } from './empty_frame'; import { FrameInformationAIAssistant } from './frame_information_ai_assistant'; import { FrameInformationPanel } from './frame_information_panel'; -import { getImpactRows } from './get_impact_rows'; +import { getComparisonImpactRow } from './get_impact_rows'; import { getInformationRows } from './get_information_rows'; import { KeyValueList } from './key_value_list'; import { MissingSymbolsCallout } from './missing_symbols_callout'; -import { useCalculateImpactEstimate } from '../../hooks/use_calculate_impact_estimates'; -import { useProfilingDependencies } from '../contexts/profiling_dependencies/use_profiling_dependencies'; export interface Frame { fileID: string; @@ -35,37 +35,34 @@ export interface Frame { } export interface Props { + comparisonFrame?: Frame; + comparisonTotalSeconds?: number; + comparisonTotalSamples?: number; + comparisonRank?: number; frame?: Frame; totalSamples: number; totalSeconds: number; - showAIAssistant?: boolean; + rank?: number; showSymbolsStatus?: boolean; + compressed?: boolean; } export function FrameInformationWindow({ frame, + showSymbolsStatus = true, + comparisonFrame, + comparisonRank, + comparisonTotalSamples, + comparisonTotalSeconds, totalSamples, totalSeconds, - showSymbolsStatus = true, + rank, + compressed = false, }: Props) { const calculateImpactEstimates = useCalculateImpactEstimate(); - const { - start: { core }, - } = useProfilingDependencies(); - const shouldUseLegacyCo2Calculation = core.uiSettings.get( - profilingUseLegacyCo2Calculation - ); if (!frame) { - return ( - - - {i18n.translate('xpack.profiling.frameInformationWindow.selectFrame', { - defaultMessage: 'Click on a frame to display more information', - })} - - - ); + return ; } const symbolStatus = getFrameSymbolStatus({ @@ -82,12 +79,6 @@ export function FrameInformationWindow({ functionName, sourceFileName, sourceLine, - countInclusive, - countExclusive, - selfAnnualCO2Kgs, - totalAnnualCO2Kgs, - selfAnnualCostUSD, - totalAnnualCostUSD, } = frame; const informationRows = getInformationRows({ @@ -100,24 +91,57 @@ export function FrameInformationWindow({ sourceLine, }); - const impactRows = getImpactRows({ - countInclusive, - countExclusive, - totalSamples, - totalSeconds, - calculateImpactEstimates, - shouldUseLegacyCo2Calculation, - selfAnnualCO2Kgs, - totalAnnualCO2Kgs, - selfAnnualCostUSD, - totalAnnualCostUSD, + const impactRows = getComparisonImpactRow({ + base: { + countInclusive: frame.countInclusive, + countExclusive: frame.countExclusive, + selfAnnualCO2Kgs: frame.selfAnnualCO2Kgs, + totalAnnualCO2Kgs: frame.totalAnnualCO2Kgs, + selfAnnualCostUSD: frame.selfAnnualCostUSD, + totalAnnualCostUSD: frame.totalAnnualCostUSD, + rank, + totalSamples, + totalSeconds, + calculateImpactEstimates, + }, + comparison: + comparisonFrame && + comparisonTotalSamples !== undefined && + comparisonTotalSeconds !== undefined + ? { + countInclusive: comparisonFrame.countInclusive, + countExclusive: comparisonFrame.countExclusive, + selfAnnualCO2Kgs: comparisonFrame.selfAnnualCO2Kgs, + totalAnnualCO2Kgs: comparisonFrame.totalAnnualCO2Kgs, + selfAnnualCostUSD: comparisonFrame.selfAnnualCostUSD, + totalAnnualCostUSD: comparisonFrame.totalAnnualCostUSD, + rank: comparisonRank, + totalSamples: comparisonTotalSamples, + totalSeconds: comparisonTotalSeconds, + calculateImpactEstimates, + } + : undefined, }); return ( - + + {informationRows.map((item, index) => ( + + + {item.value} + + } + description={item.label} + titleSize="xs" + /> + + ))} + @@ -127,6 +151,29 @@ export function FrameInformationWindow({ ) : null} + + + diff --git a/x-pack/plugins/profiling/public/components/frame_information_window/key_value_list.tsx b/x-pack/plugins/profiling/public/components/frame_information_window/key_value_list.tsx index 367d8e921ee6b..a7e742bdd184b 100644 --- a/x-pack/plugins/profiling/public/components/frame_information_window/key_value_list.tsx +++ b/x-pack/plugins/profiling/public/components/frame_information_window/key_value_list.tsx @@ -15,25 +15,22 @@ interface Props { value: React.ReactNode; 'data-test-subj'?: string; }>; - prependString?: string; } -export function KeyValueList({ rows, prependString = '', ...props }: Props) { +export function KeyValueList({ rows, ...props }: Props) { return ( {rows.map((row, index) => ( - - + + {row.label}: - {prependString} {row.value} diff --git a/x-pack/plugins/profiling/public/components/frames_summary/index.tsx b/x-pack/plugins/profiling/public/components/frames_summary/index.tsx index e55f19d135f9e..78ac1cd4111a7 100644 --- a/x-pack/plugins/profiling/public/components/frames_summary/index.tsx +++ b/x-pack/plugins/profiling/public/components/frames_summary/index.tsx @@ -14,21 +14,16 @@ import { EuiText, EuiTextColor, } from '@elastic/eui'; -import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; -import { profilingUseLegacyCo2Calculation } from '@kbn/observability-plugin/common'; -import { useCalculateImpactEstimate } from '../../hooks/use_calculate_impact_estimates'; +import { isEmpty } from 'lodash'; +import React, { useMemo } from 'react'; import { asCost } from '../../utils/formatters/as_cost'; import { asWeight } from '../../utils/formatters/as_weight'; import { calculateBaseComparisonDiff } from '../topn_functions/utils'; import { SummaryItem } from './summary_item'; -import { useProfilingDependencies } from '../contexts/profiling_dependencies/use_profiling_dependencies'; interface FrameValue { - selfCPU: number; - totalCPU: number; totalCount: number; - duration: number; scaleFactor?: number; totalAnnualCO2Kgs: number; totalAnnualCostUSD: number; @@ -38,6 +33,8 @@ interface Props { baseValue?: FrameValue; comparisonValue?: FrameValue; isLoading: boolean; + hasBorder?: boolean; + compressed?: boolean; } const ESTIMATED_VALUE_LABEL = i18n.translate('xpack.profiling.diffTopNFunctions.estimatedValue', { @@ -48,15 +45,13 @@ function getScaleFactor(scaleFactor: number = 1) { return scaleFactor; } -export function FramesSummary({ baseValue, comparisonValue, isLoading }: Props) { - const { - start: { core }, - } = useProfilingDependencies(); - const shouldUseLegacyCo2Calculation = core.uiSettings.get( - profilingUseLegacyCo2Calculation - ); - const calculateImpactEstimates = useCalculateImpactEstimate(); - +export function FramesSummary({ + baseValue, + comparisonValue, + isLoading, + hasBorder = false, + compressed = false, +}: Props) { const baselineScaledTotalSamples = baseValue ? baseValue.totalCount * getScaleFactor(baseValue.scaleFactor) : 0; @@ -66,62 +61,23 @@ export function FramesSummary({ baseValue, comparisonValue, isLoading }: Props) : 0; const { co2EmissionDiff, costImpactDiff, totalSamplesDiff } = useMemo(() => { - const baseImpactEstimates = baseValue - ? // Do NOT scale values here. This is intended to show the exact values spent throughout the year - calculateImpactEstimates({ - countExclusive: baseValue.selfCPU, - countInclusive: baseValue.totalCPU, - totalSamples: baseValue.totalCount, - totalSeconds: baseValue.duration, - }) - : undefined; - - const comparisonImpactEstimates = comparisonValue - ? // Do NOT scale values here. This is intended to show the exact values spent throughout the year - calculateImpactEstimates({ - countExclusive: comparisonValue.selfCPU, - countInclusive: comparisonValue.totalCPU, - totalSamples: comparisonValue.totalCount, - totalSeconds: comparisonValue.duration, - }) - : undefined; - return { totalSamplesDiff: calculateBaseComparisonDiff({ baselineValue: baselineScaledTotalSamples || 0, comparisonValue: comparisonScaledTotalSamples || 0, }), co2EmissionDiff: calculateBaseComparisonDiff({ - baselineValue: - (shouldUseLegacyCo2Calculation - ? baseImpactEstimates?.totalSamples?.annualizedCo2 - : baseValue?.totalAnnualCO2Kgs) || 0, - comparisonValue: - (shouldUseLegacyCo2Calculation - ? comparisonImpactEstimates?.totalSamples.annualizedCo2 - : comparisonValue?.totalAnnualCO2Kgs) || 0, + baselineValue: baseValue?.totalAnnualCO2Kgs || 0, + comparisonValue: comparisonValue?.totalAnnualCO2Kgs || 0, formatValue: (value) => asWeight(value, 'kgs'), }), costImpactDiff: calculateBaseComparisonDiff({ - baselineValue: - (shouldUseLegacyCo2Calculation - ? baseImpactEstimates?.totalSamples.annualizedDollarCost - : baseValue?.totalAnnualCostUSD) || 0, - comparisonValue: - (shouldUseLegacyCo2Calculation - ? comparisonImpactEstimates?.totalSamples.annualizedDollarCost - : comparisonValue?.totalAnnualCostUSD) || 0, + baselineValue: baseValue?.totalAnnualCostUSD || 0, + comparisonValue: comparisonValue?.totalAnnualCostUSD || 0, formatValue: asCost, }), }; - }, [ - baseValue, - baselineScaledTotalSamples, - calculateImpactEstimates, - comparisonScaledTotalSamples, - comparisonValue, - shouldUseLegacyCo2Calculation, - ]); + }, [baseValue, baselineScaledTotalSamples, comparisonScaledTotalSamples, comparisonValue]); const data = [ { @@ -143,6 +99,7 @@ export function FramesSummary({ baseValue, comparisonValue, isLoading }: Props) baseIcon: totalSamplesDiff.icon, baseColor: totalSamplesDiff.color, titleHint: ESTIMATED_VALUE_LABEL, + hidden: isEmpty(comparisonValue), }, { id: 'annualizedCo2', @@ -182,7 +139,31 @@ export function FramesSummary({ baseValue, comparisonValue, isLoading }: Props) }, ]; - return ( + const Summary = ( + <> + + + {data + .filter((item) => !item.hidden) + .map((item) => { + return ( + + + + ); + })} + + + ); + + return compressed ? ( + <>{Summary} + ) : ( } > - <> - - - {data.map((item, idx) => { - return ( - - - - ); - })} - - + {Summary} ); } diff --git a/x-pack/plugins/profiling/public/components/frames_summary/summary_item.tsx b/x-pack/plugins/profiling/public/components/frames_summary/summary_item.tsx index a2f63aa55df28..19650ca431038 100644 --- a/x-pack/plugins/profiling/public/components/frames_summary/summary_item.tsx +++ b/x-pack/plugins/profiling/public/components/frames_summary/summary_item.tsx @@ -14,6 +14,7 @@ import { EuiStat, EuiText, EuiTextColor, + EuiTextProps, EuiToolTip, } from '@elastic/eui'; import React from 'react'; @@ -30,11 +31,13 @@ interface Props { comparisonIcon?: string; comparisonColor?: string; titleHint?: string; + hasBorder?: boolean; + compressed?: boolean; } -function Title({ title }: { title: string }) { +function Title({ title, size }: { title: string; size?: EuiTextProps['size'] }) { return ( - + {title} ); @@ -83,18 +86,21 @@ export function SummaryItem({ comparisonColor, comparisonIcon, titleHint, + hasBorder = false, + compressed = false, }: Props) { + const textSize = compressed ? 's' : 'm'; return ( - + } - titleSize="m" + titleSize={textSize} description={ <> {titleHint ? ( - + <Title title={title} size={textSize} /> </EuiFlexItem> <EuiFlexItem grow={false}> <EuiToolTip content={titleHint}> @@ -103,7 +109,7 @@ export function SummaryItem({ </EuiFlexItem> </EuiFlexGroup> ) : ( - <Title title={title} /> + <Title title={title} size={textSize} /> )} <EuiSpacer /> </> @@ -112,7 +118,7 @@ export function SummaryItem({ isLoading={isLoading} > {!isLoading && comparisonValue ? ( - <EuiText color={comparisonColor}> + <EuiText color={comparisonColor} size={textSize}> {comparisonIcon ? ( <EuiIcon data-test-subj={`${id}_comparison_${comparisonIcon}_${comparisonColor}`} diff --git a/x-pack/plugins/profiling/public/components/topn_functions/function_row.tsx b/x-pack/plugins/profiling/public/components/topn_functions/function_row.tsx index 1affab1df5f08..3d20818e7b012 100644 --- a/x-pack/plugins/profiling/public/components/topn_functions/function_row.tsx +++ b/x-pack/plugins/profiling/public/components/topn_functions/function_row.tsx @@ -17,10 +17,8 @@ import { import { i18n } from '@kbn/i18n'; import { TopNFunctionSortField } from '@kbn/profiling-utils'; import React, { useEffect } from 'react'; -import { profilingUseLegacyCo2Calculation } from '@kbn/observability-plugin/common'; import { asCost } from '../../utils/formatters/as_cost'; import { asWeight } from '../../utils/formatters/as_weight'; -import { useProfilingDependencies } from '../contexts/profiling_dependencies/use_profiling_dependencies'; import { StackFrameSummary } from '../stack_frame_summary'; import { CPUStat } from './cpu_stat'; import { SampleStat } from './sample_stat'; @@ -41,14 +39,6 @@ export function FunctionRow({ onFrameClick, setCellProps, }: Props) { - const { - start: { core }, - } = useProfilingDependencies(); - - const shouldUseLegacyCo2Calculation = core.uiSettings.get<boolean>( - profilingUseLegacyCo2Calculation - ); - if (columnId === TopNFunctionSortField.Diff) { return <DiffColumn diff={functionRow.diff} setCellProps={setCellProps} />; } @@ -80,35 +70,12 @@ export function FunctionRow({ return <CPUStat cpu={functionRow.totalCPUPerc} diffCPU={functionRow.diff?.totalCPUPerc} />; } - if ( - columnId === TopNFunctionSortField.AnnualizedCo2 && - functionRow.impactEstimates?.totalCPU?.annualizedCo2 - ) { - return ( - <div> - {asWeight( - shouldUseLegacyCo2Calculation - ? functionRow.impactEstimates.totalCPU.annualizedCo2 - : functionRow.totalAnnualCO2kgs, - 'kgs' - )} - </div> - ); + if (columnId === TopNFunctionSortField.AnnualizedCo2) { + return <div>{asWeight(functionRow.totalAnnualCO2kgs, 'kgs')}</div>; } - if ( - columnId === TopNFunctionSortField.AnnualizedDollarCost && - functionRow.impactEstimates?.totalCPU?.annualizedDollarCost - ) { - return ( - <div> - {asCost( - shouldUseLegacyCo2Calculation - ? functionRow.impactEstimates.totalCPU.annualizedDollarCost - : functionRow.totalAnnualCostUSD - )} - </div> - ); + if (columnId === TopNFunctionSortField.AnnualizedDollarCost) { + return <div>{asCost(functionRow.totalAnnualCostUSD)}</div>; } return null; diff --git a/x-pack/plugins/profiling/public/components/topn_functions/index.tsx b/x-pack/plugins/profiling/public/components/topn_functions/index.tsx index 9d3275e319cc7..6c754d61dac64 100644 --- a/x-pack/plugins/profiling/public/components/topn_functions/index.tsx +++ b/x-pack/plugins/profiling/public/components/topn_functions/index.tsx @@ -11,7 +11,6 @@ import { EuiDataGridCellValueElementProps, EuiDataGridColumn, EuiDataGridControlColumn, - EuiDataGridRefProps, EuiDataGridSorting, EuiScreenReaderOnly, } from '@elastic/eui'; @@ -19,16 +18,14 @@ import { i18n } from '@kbn/i18n'; import { useUiTracker } from '@kbn/observability-shared-plugin/public'; import { getCalleeFunction, TopNFunctions, TopNFunctionSortField } from '@kbn/profiling-utils'; import { last, orderBy } from 'lodash'; -import React, { forwardRef, Ref, useMemo, useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { GridOnScrollProps } from 'react-window'; -import { profilingUseLegacyCo2Calculation } from '@kbn/observability-plugin/common'; import { useCalculateImpactEstimate } from '../../hooks/use_calculate_impact_estimates'; -import { useProfilingDependencies } from '../contexts/profiling_dependencies/use_profiling_dependencies'; import { CPULabelWithHint } from '../cpu_label_with_hint'; import { FrameInformationTooltip } from '../frame_information_window/frame_information_tooltip'; import { LabelWithHint } from '../label_with_hint'; import { FunctionRow } from './function_row'; -import { getFunctionsRows, IFunctionRow } from './utils'; +import { convertRowToFrame, getFunctionsRows, getTotalCount, IFunctionRow } from './utils'; interface Props { topNFunctions?: TopNFunctions; @@ -49,132 +46,166 @@ interface Props { isEmbedded?: boolean; } -export const TopNFunctionsGrid = forwardRef( - ( - { - topNFunctions, - comparisonTopNFunctions, - totalSeconds, - isDifferentialView, - baselineScaleFactor, - comparisonScaleFactor, - onFrameClick, - onScroll, - showDiffColumn = false, - pageIndex, - onChangePage, - sortField, - sortDirection, - onChangeSort, - dataTestSubj = 'topNFunctionsGrid', - isEmbedded = false, - }: Props, - ref: Ref<EuiDataGridRefProps> | undefined - ) => { - const { - start: { core }, - } = useProfilingDependencies(); - const shouldUseLegacyCo2Calculation = core.uiSettings.get<boolean>( - profilingUseLegacyCo2Calculation - ); - const [selectedRow, setSelectedRow] = useState<IFunctionRow | undefined>(); - const trackProfilingEvent = useUiTracker({ app: 'profiling' }); - const calculateImpactEstimates = useCalculateImpactEstimate(); +export const TopNFunctionsGrid = ({ + topNFunctions, + comparisonTopNFunctions, + totalSeconds, + isDifferentialView, + baselineScaleFactor, + comparisonScaleFactor, + onFrameClick, + onScroll, + showDiffColumn = false, + pageIndex, + onChangePage, + sortField, + sortDirection, + onChangeSort, + dataTestSubj = 'topNFunctionsGrid', + isEmbedded = false, +}: Props) => { + const [selectedRow, setSelectedRow] = useState<IFunctionRow | undefined>(); + const trackProfilingEvent = useUiTracker({ app: 'profiling' }); + const calculateImpactEstimates = useCalculateImpactEstimate(); - function onSort(newSortingColumns: EuiDataGridSorting['columns']) { - const lastItem = last(newSortingColumns); - if (lastItem) { - onChangeSort(lastItem); - } + function onSort(newSortingColumns: EuiDataGridSorting['columns']) { + const lastItem = last(newSortingColumns); + if (lastItem) { + onChangeSort(lastItem); } + } - const totalCount = useMemo(() => { - if (!topNFunctions || !topNFunctions.TotalCount) { - return 0; - } - - return topNFunctions.TotalCount; - }, [topNFunctions]); + const totalCount = useMemo(() => getTotalCount(topNFunctions), [topNFunctions]); - const rows = useMemo(() => { - return getFunctionsRows({ - baselineScaleFactor, - comparisonScaleFactor, - comparisonTopNFunctions, - topNFunctions, - totalSeconds, - calculateImpactEstimates, - }); - }, [ + const rows = useMemo(() => { + return getFunctionsRows({ baselineScaleFactor, - calculateImpactEstimates, comparisonScaleFactor, comparisonTopNFunctions, topNFunctions, totalSeconds, - ]); + calculateImpactEstimates, + }); + }, [ + baselineScaleFactor, + calculateImpactEstimates, + comparisonScaleFactor, + comparisonTopNFunctions, + topNFunctions, + totalSeconds, + ]); - const sortedRows = useMemo(() => { - switch (sortField) { - case TopNFunctionSortField.Frame: - return orderBy(rows, (row) => getCalleeFunction(row.frame), sortDirection); - case TopNFunctionSortField.SelfCPU: - return orderBy(rows, (row) => row.selfCPUPerc, sortDirection); - case TopNFunctionSortField.TotalCPU: - return orderBy(rows, (row) => row.totalCPUPerc, sortDirection); - case TopNFunctionSortField.AnnualizedCo2: - return orderBy( - rows, - (row) => - shouldUseLegacyCo2Calculation - ? row.impactEstimates?.totalCPU.annualizedCo2 - : row.totalAnnualCO2kgs, - sortDirection - ); - case TopNFunctionSortField.AnnualizedDollarCost: - return orderBy( - rows, - (row) => - shouldUseLegacyCo2Calculation - ? row.impactEstimates?.totalCPU.annualizedDollarCost - : row.totalAnnualCostUSD, - sortDirection - ); - default: - return orderBy(rows, sortField, sortDirection); - } - }, [rows, shouldUseLegacyCo2Calculation, sortDirection, sortField]); + const sortedRows = useMemo(() => { + switch (sortField) { + case TopNFunctionSortField.Frame: + return orderBy(rows, (row) => getCalleeFunction(row.frame), sortDirection); + case TopNFunctionSortField.SelfCPU: + return orderBy(rows, (row) => row.selfCPUPerc, sortDirection); + case TopNFunctionSortField.TotalCPU: + return orderBy(rows, (row) => row.totalCPUPerc, sortDirection); + case TopNFunctionSortField.AnnualizedCo2: + return orderBy(rows, (row) => row.totalAnnualCO2kgs, sortDirection); + case TopNFunctionSortField.AnnualizedDollarCost: + return orderBy(rows, (row) => row.totalAnnualCostUSD, sortDirection); + default: + return orderBy(rows, sortField, sortDirection); + } + }, [rows, sortDirection, sortField]); - const { columns, leadingControlColumns } = useMemo(() => { - const gridColumns: EuiDataGridColumn[] = [ - { - id: TopNFunctionSortField.Rank, - schema: 'numeric', - actions: { showHide: false }, - initialWidth: isDifferentialView ? 50 : 90, - displayAsText: i18n.translate('xpack.profiling.functionsView.rankColumnLabel', { - defaultMessage: 'Rank', - }), - }, + const { columns, leadingControlColumns } = useMemo(() => { + const gridColumns: EuiDataGridColumn[] = [ + { + id: TopNFunctionSortField.Rank, + schema: 'numeric', + actions: { showHide: false }, + initialWidth: isDifferentialView ? 50 : 90, + displayAsText: i18n.translate('xpack.profiling.functionsView.rankColumnLabel', { + defaultMessage: 'Rank', + }), + }, + { + id: TopNFunctionSortField.Frame, + actions: { showHide: false }, + displayAsText: i18n.translate('xpack.profiling.functionsView.functionColumnLabel', { + defaultMessage: 'Function', + }), + }, + { + id: TopNFunctionSortField.Samples, + initialWidth: isDifferentialView ? 100 : 200, + schema: 'numeric', + actions: { showHide: false }, + display: ( + <LabelWithHint + label={i18n.translate('xpack.profiling.functionsView.samplesColumnLabel', { + defaultMessage: 'Samples', + })} + hint={i18n.translate('xpack.profiling.functionsView.samplesColumnLabel.hint', { + defaultMessage: 'Estimated values', + })} + labelSize="s" + labelStyle={{ fontWeight: 700 }} + iconSize="s" + /> + ), + }, + { + id: TopNFunctionSortField.SelfCPU, + schema: 'numeric', + actions: { showHide: false }, + initialWidth: isDifferentialView ? 100 : 200, + display: ( + <CPULabelWithHint + type="self" + labelSize="s" + labelStyle={{ fontWeight: 700 }} + iconSize="s" + /> + ), + }, + { + id: TopNFunctionSortField.TotalCPU, + schema: 'numeric', + actions: { showHide: false }, + initialWidth: isDifferentialView ? 100 : 200, + display: ( + <CPULabelWithHint + type="total" + labelSize="s" + labelStyle={{ fontWeight: 700 }} + iconSize="s" + /> + ), + }, + ]; + + const gridLeadingControlColumns: EuiDataGridControlColumn[] = []; + if (showDiffColumn) { + gridColumns.push({ + initialWidth: 60, + id: TopNFunctionSortField.Diff, + actions: { showHide: false }, + displayAsText: i18n.translate('xpack.profiling.functionsView.diffColumnLabel', { + defaultMessage: 'Diff', + }), + }); + } + + if (!isDifferentialView) { + gridColumns.push( { - id: TopNFunctionSortField.Frame, + id: TopNFunctionSortField.AnnualizedCo2, actions: { showHide: false }, - displayAsText: i18n.translate('xpack.profiling.functionsView.functionColumnLabel', { - defaultMessage: 'Function', - }), - }, - { - id: TopNFunctionSortField.Samples, initialWidth: isDifferentialView ? 100 : 200, schema: 'numeric', - actions: { showHide: false }, display: ( <LabelWithHint - label={i18n.translate('xpack.profiling.functionsView.samplesColumnLabel', { - defaultMessage: 'Samples', + label={i18n.translate('xpack.profiling.functionsView.annualizedCo2', { + defaultMessage: 'Annualized CO2', })} - hint={i18n.translate('xpack.profiling.functionsView.samplesColumnLabel.hint', { - defaultMessage: 'Estimated values', + hint={i18n.translate('xpack.profiling.functionsView.annualizedCo2.hint', { + defaultMessage: + 'Indicates the CO2 emission of the function and any functions called by it.', })} labelSize="s" labelStyle={{ fontWeight: 700 }} @@ -183,211 +214,127 @@ export const TopNFunctionsGrid = forwardRef( ), }, { - id: TopNFunctionSortField.SelfCPU, - schema: 'numeric', - actions: { showHide: false }, - initialWidth: isDifferentialView ? 100 : 200, - display: ( - <CPULabelWithHint - type="self" - labelSize="s" - labelStyle={{ fontWeight: 700 }} - iconSize="s" - /> - ), - }, - { - id: TopNFunctionSortField.TotalCPU, + id: TopNFunctionSortField.AnnualizedDollarCost, schema: 'numeric', actions: { showHide: false }, initialWidth: isDifferentialView ? 100 : 200, display: ( - <CPULabelWithHint - type="total" + <LabelWithHint + label={i18n.translate('xpack.profiling.functionsView.annualizedDollarCost', { + defaultMessage: `Annualized dollar cost`, + })} + hint={i18n.translate('xpack.profiling.functionsView.annualizedDollarCost.hint', { + defaultMessage: `Indicates the Dollar cost of the function and any functions called by it.`, + })} labelSize="s" labelStyle={{ fontWeight: 700 }} iconSize="s" /> ), - }, - ]; - - const gridLeadingControlColumns: EuiDataGridControlColumn[] = []; - if (showDiffColumn) { - gridColumns.push({ - initialWidth: 60, - id: TopNFunctionSortField.Diff, - actions: { showHide: false }, - displayAsText: i18n.translate('xpack.profiling.functionsView.diffColumnLabel', { - defaultMessage: 'Diff', - }), - }); - } + } + ); - if (!isDifferentialView) { - gridColumns.push( - { - id: TopNFunctionSortField.AnnualizedCo2, - actions: { showHide: false }, - initialWidth: isDifferentialView ? 100 : 200, - schema: 'numeric', - display: ( - <LabelWithHint - label={i18n.translate('xpack.profiling.functionsView.annualizedCo2', { - defaultMessage: 'Annualized CO2', + gridLeadingControlColumns.push({ + id: 'actions', + width: 40, + headerCellRender() { + return ( + <EuiScreenReaderOnly> + <span> + {i18n.translate('xpack.profiling.topNFunctionsGrid.span.controlsLabel', { + defaultMessage: 'Controls', })} - hint={i18n.translate('xpack.profiling.functionsView.annualizedCo2.hint', { - defaultMessage: - 'Indicates the CO2 emission of the function and any functions called by it.', - })} - labelSize="s" - labelStyle={{ fontWeight: 700 }} - iconSize="s" - /> - ), - }, - { - id: TopNFunctionSortField.AnnualizedDollarCost, - schema: 'numeric', - actions: { showHide: false }, - initialWidth: isDifferentialView ? 100 : 200, - display: ( - <LabelWithHint - label={i18n.translate('xpack.profiling.functionsView.annualizedDollarCost', { - defaultMessage: `Annualized dollar cost`, - })} - hint={i18n.translate('xpack.profiling.functionsView.annualizedDollarCost.hint', { - defaultMessage: `Indicates the Dollar cost of the function and any functions called by it.`, - })} - labelSize="s" - labelStyle={{ fontWeight: 700 }} - iconSize="s" - /> - ), + </span> + </EuiScreenReaderOnly> + ); + }, + rowCellRender: function RowCellRender({ rowIndex }) { + function handleOnClick() { + trackProfilingEvent({ metric: 'topN_function_details_click' }); + setSelectedRow(sortedRows[rowIndex]); } - ); - - gridLeadingControlColumns.push({ - id: 'actions', - width: 40, - headerCellRender() { - return ( - <EuiScreenReaderOnly> - <span> - {i18n.translate('xpack.profiling.topNFunctionsGrid.span.controlsLabel', { - defaultMessage: 'Controls', - })} - </span> - </EuiScreenReaderOnly> - ); - }, - rowCellRender: function RowCellRender({ rowIndex }) { - function handleOnClick() { - trackProfilingEvent({ metric: 'topN_function_details_click' }); - setSelectedRow(sortedRows[rowIndex]); - } - return ( - <EuiButtonIcon - data-test-subj="profilingTopNFunctionsGridButton" - aria-label={i18n.translate( - 'xpack.profiling.topNFunctionsGrid.euiButtonIcon.showActionsLabel', - { defaultMessage: 'Show actions' } - )} - iconType="expand" - color="text" - onClick={handleOnClick} - /> - ); - }, - }); - } - return { columns: gridColumns, leadingControlColumns: gridLeadingControlColumns }; - }, [isDifferentialView, sortedRows, showDiffColumn, trackProfilingEvent]); + return ( + <EuiButtonIcon + data-test-subj="profilingTopNFunctionsGridButton" + aria-label={i18n.translate( + 'xpack.profiling.topNFunctionsGrid.euiButtonIcon.showActionsLabel', + { defaultMessage: 'Show actions' } + )} + iconType="expand" + color="text" + onClick={handleOnClick} + /> + ); + }, + }); + } + return { columns: gridColumns, leadingControlColumns: gridLeadingControlColumns }; + }, [isDifferentialView, sortedRows, showDiffColumn, trackProfilingEvent]); - const [visibleColumns, setVisibleColumns] = useState(columns.map(({ id }) => id)); + const [visibleColumns, setVisibleColumns] = useState(columns.map(({ id }) => id)); - function RenderCellValue({ - rowIndex, - columnId, - setCellProps, - }: EuiDataGridCellValueElementProps) { - const data = sortedRows[rowIndex]; - if (data) { - return ( - <FunctionRow - functionRow={data} - columnId={columnId} - totalCount={totalCount} - onFrameClick={onFrameClick} - setCellProps={setCellProps} - /> - ); - } - return null; + function RenderCellValue({ rowIndex, columnId, setCellProps }: EuiDataGridCellValueElementProps) { + const data = sortedRows[rowIndex]; + if (data) { + return ( + <FunctionRow + functionRow={data} + columnId={columnId} + totalCount={totalCount} + onFrameClick={onFrameClick} + setCellProps={setCellProps} + /> + ); } + return null; + } - return ( - <> - <EuiDataGrid - data-test-subj={dataTestSubj} - ref={ref} - aria-label={i18n.translate( - 'xpack.profiling.topNFunctionsGrid.euiDataGrid.topNFunctionsLabel', - { defaultMessage: 'TopN functions' } - )} - columns={columns} - columnVisibility={{ visibleColumns, setVisibleColumns }} - rowCount={sortedRows.length > 100 ? 100 : sortedRows.length} - renderCellValue={RenderCellValue} - sorting={{ columns: [{ id: sortField, direction: sortDirection }], onSort }} - leadingControlColumns={leadingControlColumns} - pagination={{ - pageIndex, - pageSize: 50, - // Left it empty on purpose as it is a required property on the pagination - onChangeItemsPerPage: () => {}, - onChangePage, - pageSizeOptions: [], - }} - rowHeightsOptions={{ defaultHeight: 'auto' }} - toolbarVisibility={{ - showColumnSelector: false, - showKeyboardShortcuts: !isDifferentialView, - showDisplaySelector: !isDifferentialView, - showFullScreenSelector: !isDifferentialView, - showSortSelector: false, - }} - virtualizationOptions={{ - onScroll, + return ( + <> + <EuiDataGrid + data-test-subj={dataTestSubj} + aria-label={i18n.translate( + 'xpack.profiling.topNFunctionsGrid.euiDataGrid.topNFunctionsLabel', + { defaultMessage: 'TopN functions' } + )} + columns={columns} + columnVisibility={{ visibleColumns, setVisibleColumns }} + rowCount={sortedRows.length > 100 ? 100 : sortedRows.length} + renderCellValue={RenderCellValue} + sorting={{ columns: [{ id: sortField, direction: sortDirection }], onSort }} + leadingControlColumns={leadingControlColumns} + pagination={{ + pageIndex, + pageSize: 50, + // Left it empty on purpose as it is a required property on the pagination + onChangeItemsPerPage: () => {}, + onChangePage, + pageSizeOptions: [], + }} + rowHeightsOptions={{ defaultHeight: 'auto' }} + toolbarVisibility={{ + showColumnSelector: false, + showKeyboardShortcuts: !isDifferentialView, + showDisplaySelector: !isDifferentialView, + showFullScreenSelector: !isDifferentialView, + showSortSelector: false, + }} + virtualizationOptions={{ + onScroll, + }} + /> + {selectedRow && ( + <FrameInformationTooltip + compressed + onClose={() => { + setSelectedRow(undefined); }} + frame={convertRowToFrame(selectedRow)} + totalSeconds={totalSeconds} + totalSamples={totalCount} + showSymbolsStatus={!isEmbedded} /> - {selectedRow && ( - <FrameInformationTooltip - onClose={() => { - setSelectedRow(undefined); - }} - frame={{ - addressOrLine: selectedRow.frame.AddressOrLine, - countExclusive: selectedRow.selfCPU, - countInclusive: selectedRow.totalCPU, - exeFileName: selectedRow.frame.ExeFileName, - fileID: selectedRow.frame.FileID, - frameType: selectedRow.frame.FrameType, - functionName: selectedRow.frame.FunctionName, - sourceFileName: selectedRow.frame.SourceFilename, - sourceLine: selectedRow.frame.SourceLine, - selfAnnualCO2Kgs: selectedRow.selfAnnualCO2kgs, - totalAnnualCO2Kgs: selectedRow.totalAnnualCO2kgs, - selfAnnualCostUSD: selectedRow.selfAnnualCostUSD, - totalAnnualCostUSD: selectedRow.totalAnnualCostUSD, - }} - totalSeconds={totalSeconds} - totalSamples={totalCount} - showAIAssistant={!isEmbedded} - showSymbolsStatus={!isEmbedded} - /> - )} - </> - ); - } -); + )} + </> + ); +}; diff --git a/x-pack/plugins/profiling/public/components/topn_functions/utils.test.ts b/x-pack/plugins/profiling/public/components/topn_functions/utils.test.ts index f0c6ca1a25c8d..c7598f55acb0b 100644 --- a/x-pack/plugins/profiling/public/components/topn_functions/utils.test.ts +++ b/x-pack/plugins/profiling/public/components/topn_functions/utils.test.ts @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { getColorLabel } from './utils'; +import { TopNFunctions } from '@kbn/profiling-utils'; +import { getColorLabel, getTotalCount } from './utils'; describe('Top N functions: Utils', () => { describe('getColorLabel', () => { @@ -40,4 +41,12 @@ describe('Top N functions: Utils', () => { }); }); }); + describe('getTotalCount', () => { + it('returns default value', () => { + expect(getTotalCount()).toEqual(0); + }); + it('returns value from topNFunctions', () => { + expect(getTotalCount({ TotalCount: 10 } as TopNFunctions)).toEqual(10); + }); + }); }); diff --git a/x-pack/plugins/profiling/public/components/topn_functions/utils.ts b/x-pack/plugins/profiling/public/components/topn_functions/utils.ts index 3e8389e4e1e9b..f57d96ed07f8d 100644 --- a/x-pack/plugins/profiling/public/components/topn_functions/utils.ts +++ b/x-pack/plugins/profiling/public/components/topn_functions/utils.ts @@ -32,6 +32,8 @@ export function scaleValue({ value, scaleFactor = 1 }: { value: number; scaleFac return value * scaleFactor; } +export const getTotalCount = (topNFunctions?: TopNFunctions) => topNFunctions?.TotalCount ?? 0; + export interface IFunctionRow { id: string; rank: number; @@ -196,3 +198,21 @@ export function calculateBaseComparisonDiff({ label, }; } + +export function convertRowToFrame(row: IFunctionRow) { + return { + addressOrLine: row.frame.AddressOrLine, + countExclusive: row.selfCPU, + countInclusive: row.totalCPU, + exeFileName: row.frame.ExeFileName, + fileID: row.frame.FileID, + frameType: row.frame.FrameType, + functionName: row.frame.FunctionName, + sourceFileName: row.frame.SourceFilename, + sourceLine: row.frame.SourceLine, + selfAnnualCO2Kgs: row.selfAnnualCO2kgs, + totalAnnualCO2Kgs: row.totalAnnualCO2kgs, + selfAnnualCostUSD: row.selfAnnualCostUSD, + totalAnnualCostUSD: row.totalAnnualCostUSD, + }; +} diff --git a/x-pack/plugins/profiling/public/hooks/use_calculate_impact_estimates.test.ts b/x-pack/plugins/profiling/public/hooks/use_calculate_impact_estimates.test.ts index f0e6d2cda5c31..1c4017a468eae 100644 --- a/x-pack/plugins/profiling/public/hooks/use_calculate_impact_estimates.test.ts +++ b/x-pack/plugins/profiling/public/hooks/use_calculate_impact_estimates.test.ts @@ -50,30 +50,18 @@ describe('useCalculateImpactEstimate', () => { percentage: 0.1, coreSeconds: 50, annualizedCoreSeconds: 1752000, - co2: 0.00006265168194444443, - annualizedCo2: 2.1953149353333328, - dollarCost: 0.0005902777777777778, - annualizedDollarCost: 20.683333333333334, }); expect(selfCPU).toEqual({ percentage: 0.05, coreSeconds: 25, annualizedCoreSeconds: 876000, - co2: 0.000031325840972222215, - annualizedCo2: 1.0976574676666664, - dollarCost: 0.0002951388888888889, - annualizedDollarCost: 10.341666666666667, }); expect(totalSamples).toEqual({ percentage: 1, coreSeconds: 500, annualizedCoreSeconds: 17520000, - co2: 0.0006265168194444444, - annualizedCo2: 21.95314935333333, - dollarCost: 0.0059027777777777785, - annualizedDollarCost: 206.83333333333337, }); }); @@ -90,30 +78,18 @@ describe('useCalculateImpactEstimate', () => { percentage: 0.1, coreSeconds: 50, annualizedCoreSeconds: 1752000, - co2: 0.00006265168194444443, - annualizedCo2: 2.1953149353333328, - dollarCost: 0.0005902777777777778, - annualizedDollarCost: 20.683333333333334, }); expect(selfCPU).toEqual({ percentage: 0.1, coreSeconds: 50, annualizedCoreSeconds: 1752000, - co2: 0.00006265168194444443, - annualizedCo2: 2.1953149353333328, - dollarCost: 0.0005902777777777778, - annualizedDollarCost: 20.683333333333334, }); expect(totalSamples).toEqual({ percentage: 1, coreSeconds: 500, annualizedCoreSeconds: 17520000, - co2: 0.0006265168194444444, - annualizedCo2: 21.95314935333333, - dollarCost: 0.0059027777777777785, - annualizedDollarCost: 206.83333333333337, }); }); }); diff --git a/x-pack/plugins/profiling/public/hooks/use_calculate_impact_estimates.ts b/x-pack/plugins/profiling/public/hooks/use_calculate_impact_estimates.ts index 69820a5090a89..d148e0cc262dd 100644 --- a/x-pack/plugins/profiling/public/hooks/use_calculate_impact_estimates.ts +++ b/x-pack/plugins/profiling/public/hooks/use_calculate_impact_estimates.ts @@ -5,13 +5,6 @@ * 2.0. */ -import { - profilingCo2PerKWH, - profilingDatacenterPUE, - profilingPervCPUWattX86, -} from '@kbn/observability-plugin/common'; -import { useProfilingDependencies } from '../components/contexts/profiling_dependencies/use_profiling_dependencies'; - interface Params { countInclusive: number; countExclusive: number; @@ -24,19 +17,7 @@ export type ImpactEstimates = ReturnType<CalculateImpactEstimates>; export const ANNUAL_SECONDS = 60 * 60 * 24 * 365; -// The cost of an x86 CPU core per hour, in US$. -// (ARM is 60% less based graviton 3 data, see https://aws.amazon.com/ec2/graviton/) -const CORE_COST_PER_HOUR = 0.0425; - export function useCalculateImpactEstimate() { - const { - start: { core }, - } = useProfilingDependencies(); - - const perCoreWatts = core.uiSettings.get<number>(profilingPervCPUWattX86); - const co2PerTonKWH = core.uiSettings.get<number>(profilingCo2PerKWH); - const datacenterPUE = core.uiSettings.get<number>(profilingDatacenterPUE); - function calculateImpact({ samples, totalSamples, @@ -51,21 +32,11 @@ export function useCalculateImpactEstimate() { const percentage = samples / totalSamples; const coreSeconds = totalCoreSeconds * percentage; const annualizedCoreSeconds = coreSeconds * annualizedScaleUp; - const coreHours = coreSeconds / (60 * 60); - const co2PerKWH = co2PerTonKWH * 1000; - const co2 = ((perCoreWatts * coreHours) / 1000.0) * co2PerKWH * datacenterPUE; - const annualizedCo2 = co2 * annualizedScaleUp; - const dollarCost = coreHours * CORE_COST_PER_HOUR; - const annualizedDollarCost = dollarCost * annualizedScaleUp; return { percentage, coreSeconds, annualizedCoreSeconds, - co2, - annualizedCo2, - dollarCost, - annualizedDollarCost, }; } diff --git a/x-pack/plugins/profiling/public/utils/get_flamegraph_model/index.ts b/x-pack/plugins/profiling/public/utils/get_flamegraph_model/index.ts index 16d2b6a7a1644..614c17810a626 100644 --- a/x-pack/plugins/profiling/public/utils/get_flamegraph_model/index.ts +++ b/x-pack/plugins/profiling/public/utils/get_flamegraph_model/index.ts @@ -25,6 +25,22 @@ const nullColumnarViewModel = { size1: new Float32Array(), }; +interface ComparisonNode { + FileID: string; + FrameType: number; + ExeFileName: string; + AddressOrLine: number; + FunctionName: string; + SourceFileName: string; + SourceLine: number; + CountInclusive: number; + CountExclusive: number; + SelfAnnualCO2Kgs: number; + TotalAnnualCO2Kgs: number; + SelfAnnualCostUSD: number; + TotalAnnualCostUSD: number; +} + export function getFlamegraphModel({ primaryFlamegraph, comparisonFlamegraph, @@ -46,11 +62,10 @@ export function getFlamegraphModel({ }): { key: string; viewModel: ColumnarViewModel; - comparisonNodesById: Record<string, { CountInclusive: number; CountExclusive: number }>; + comparisonNodesById: Record<string, ComparisonNode>; legendItems: Array<{ label: string; color: string }>; } { - const comparisonNodesById: Record<string, { CountInclusive: number; CountExclusive: number }> = - {}; + const comparisonNodesById: Record<string, ComparisonNode> = {}; if (!primaryFlamegraph || !primaryFlamegraph.Label || primaryFlamegraph.Label.length === 0) { return { @@ -97,6 +112,17 @@ export function getFlamegraphModel({ comparisonFlamegraph.ID.forEach((nodeID, index) => { comparisonNodesById[nodeID] = { + FileID: comparisonFlamegraph.FileID[index], + FrameType: comparisonFlamegraph.FrameType[index], + ExeFileName: comparisonFlamegraph.ExeFilename[index], + AddressOrLine: comparisonFlamegraph.AddressOrLine[index], + FunctionName: comparisonFlamegraph.FunctionName[index], + SourceFileName: comparisonFlamegraph.SourceFilename[index], + SourceLine: comparisonFlamegraph.SourceLine[index], + SelfAnnualCO2Kgs: comparisonFlamegraph.SelfAnnualCO2KgsItems[index], + TotalAnnualCO2Kgs: comparisonFlamegraph.TotalAnnualCO2KgsItems[index], + SelfAnnualCostUSD: comparisonFlamegraph.SelfAnnualCostsUSDItems[index], + TotalAnnualCostUSD: comparisonFlamegraph.TotalAnnualCostsUSDItems[index], CountInclusive: comparisonFlamegraph.CountInclusive[index], CountExclusive: comparisonFlamegraph.CountExclusive[index], }; diff --git a/x-pack/plugins/profiling/public/views/flamegraphs/differential_flamegraphs/index.tsx b/x-pack/plugins/profiling/public/views/flamegraphs/differential_flamegraphs/index.tsx index 82c7c0f92c071..a956a6d715fbb 100644 --- a/x-pack/plugins/profiling/public/views/flamegraphs/differential_flamegraphs/index.tsx +++ b/x-pack/plugins/profiling/public/views/flamegraphs/differential_flamegraphs/index.tsx @@ -126,9 +126,6 @@ export function DifferentialFlameGraphsView() { baseValue={ state.data?.primaryFlamegraph ? { - duration: totalSeconds, - selfCPU: state.data.primaryFlamegraph.SelfCPU, - totalCPU: state.data.primaryFlamegraph.TotalCPU, totalCount: state.data.primaryFlamegraph.TotalSamples, scaleFactor: isNormalizedByTime ? baselineTime : baseline, totalAnnualCO2Kgs: state.data.primaryFlamegraph.TotalAnnualCO2KgsItems[0], @@ -139,9 +136,6 @@ export function DifferentialFlameGraphsView() { comparisonValue={ state.data?.comparisonFlamegraph ? { - duration: totalComparisonSeconds, - selfCPU: state.data.comparisonFlamegraph.SelfCPU, - totalCPU: state.data.comparisonFlamegraph.TotalCPU, totalCount: state.data.comparisonFlamegraph.TotalSamples, scaleFactor: isNormalizedByTime ? comparisonTime : comparison, totalAnnualCO2Kgs: state.data.comparisonFlamegraph.TotalAnnualCO2KgsItems[0], diff --git a/x-pack/plugins/profiling/public/views/functions/differential_topn/index.tsx b/x-pack/plugins/profiling/public/views/functions/differential_topn/index.tsx index 9551645bb7567..007f6a3546b7b 100644 --- a/x-pack/plugins/profiling/public/views/functions/differential_topn/index.tsx +++ b/x-pack/plugins/profiling/public/views/functions/differential_topn/index.tsx @@ -54,9 +54,7 @@ export function DifferentialTopNFunctionsView() { const totalSeconds = timeRange.inSeconds.end - timeRange.inSeconds.start; const totalComparisonSeconds = - (new Date(comparisonTimeRange.end!).getTime() - - new Date(comparisonTimeRange.start!).getTime()) / - 1000; + comparisonTimeRange.inSeconds.end! - comparisonTimeRange.inSeconds.start!; const comparisonTime = totalSeconds / totalComparisonSeconds; @@ -175,10 +173,7 @@ export function DifferentialTopNFunctionsView() { baseValue={ state.data ? { - duration: totalSeconds, - selfCPU: state.data.selfCPU, totalCount: state.data.TotalCount, - totalCPU: state.data.totalCPU, scaleFactor: isNormalizedByTime ? baselineTime : baseline, totalAnnualCO2Kgs: state.data.totalAnnualCO2Kgs, totalAnnualCostUSD: state.data.totalAnnualCostUSD, @@ -188,10 +183,7 @@ export function DifferentialTopNFunctionsView() { comparisonValue={ comparisonState.data ? { - duration: totalComparisonSeconds, - selfCPU: comparisonState.data.selfCPU, totalCount: comparisonState.data.TotalCount, - totalCPU: comparisonState.data.totalCPU, scaleFactor: isNormalizedByTime ? comparisonTime : comparison, totalAnnualCO2Kgs: comparisonState.data.totalAnnualCO2Kgs, totalAnnualCostUSD: comparisonState.data.totalAnnualCostUSD, @@ -209,18 +201,19 @@ export function DifferentialTopNFunctionsView() { > <DifferentialTopNFunctionsGrid base={state.data} - comparison={comparisonState.data} baselineScaleFactor={isNormalizedByTime ? comparisonTime : comparison} + comparison={comparisonState.data} comparisonScaleFactor={isNormalizedByTime ? baselineTime : baseline} - totalSeconds={totalSeconds} - pageIndex={pageIndex} + comparisonSortDirection={comparisonSortDirection} + comparisonSortField={comparisonSortField} + comparisonTotalSeconds={totalComparisonSeconds} onChangePage={handlePageChange} onChangeSort={handleOnSort} - sortField={sortField} - sortDirection={sortDirection} onFrameClick={handleOnFrameClick} - comparisonSortDirection={comparisonSortDirection} - comparisonSortField={comparisonSortField} + pageIndex={pageIndex} + sortDirection={sortDirection} + sortField={sortField} + totalSeconds={totalSeconds} /> </AsyncComponent> </EuiFlexItem> diff --git a/x-pack/plugins/reporting/public/panel_actions/get_csv_panel_action.tsx b/x-pack/plugins/reporting/public/panel_actions/get_csv_panel_action.tsx index 40a231a5220e9..5949131df49a5 100644 --- a/x-pack/plugins/reporting/public/panel_actions/get_csv_panel_action.tsx +++ b/x-pack/plugins/reporting/public/panel_actions/get_csv_panel_action.tsx @@ -44,12 +44,10 @@ export class ReportingCsvPanelAction implements ActionDefinition<ActionContext> private isDownloading: boolean; public readonly type = ''; public readonly id = CSV_REPORTING_ACTION; - private licenseHasDownloadCsv: boolean = false; - private capabilityHasDownloadCsv: boolean = false; - private notifications: NotificationsSetup; - private apiClient: ReportingAPIClient; - private startServices$: Params['startServices$']; - private usesUiCapabilities: any; + private readonly notifications: NotificationsSetup; + private readonly apiClient: ReportingAPIClient; + private readonly startServices$: Params['startServices$']; + private readonly usesUiCapabilities: boolean; constructor({ core, apiClient, startServices$, usesUiCapabilities }: Params) { this.isDownloading = false; @@ -78,31 +76,20 @@ export class ReportingCsvPanelAction implements ActionDefinition<ActionContext> } public isCompatible = async (context: ActionContext) => { - await new Promise<void>((resolve) => { - this.startServices$.subscribe(([{ application }, { licensing }]) => { - licensing.license$.subscribe((license) => { - const results = license.check('reporting', 'basic'); - const { showLinks } = checkLicense(results); - this.licenseHasDownloadCsv = showLinks; - }); - - if (this.usesUiCapabilities) { - this.capabilityHasDownloadCsv = application.capabilities.dashboard?.downloadCsv === true; - } else { - this.capabilityHasDownloadCsv = true; // deprecated - } - - resolve(); - }); - }); + const { embeddable } = context; - if (!this.licenseHasDownloadCsv || !this.capabilityHasDownloadCsv) { + if (embeddable.type !== 'search') { return false; } - const { embeddable } = context; + const [{ application }, { licensing }] = await firstValueFrom(this.startServices$); + const license = await firstValueFrom(licensing.license$); + const licenseHasDownloadCsv = checkLicense(license.check('reporting', 'basic')).showLinks; + const capabilityHasDownloadCsv = this.usesUiCapabilities + ? application.capabilities.dashboard?.downloadCsv === true + : true; // deprecated - if (embeddable.type !== 'search') { + if (!licenseHasDownloadCsv || !capabilityHasDownloadCsv) { return false; } diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.gen.ts b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.gen.ts index eebcde55a0301..e6d00181a7a4e 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.gen.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.gen.ts @@ -52,6 +52,7 @@ export const OsqueryParams = z.object({ queries: z.array(OsqueryQuery).optional(), pack_id: z.string().optional(), saved_query_id: z.string().optional(), + timeout: z.number().optional(), }); export type OsqueryParamsCamelCase = z.infer<typeof OsqueryParamsCamelCase>; @@ -61,6 +62,7 @@ export const OsqueryParamsCamelCase = z.object({ queries: z.array(OsqueryQuery).optional(), packId: z.string().optional(), savedQueryId: z.string().optional(), + timeout: z.number().optional(), }); export type OsqueryResponseAction = z.infer<typeof OsqueryResponseAction>; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.schema.yaml b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.schema.yaml index 9d27bb6e4a97c..3e4b37e115add 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.schema.yaml @@ -65,6 +65,8 @@ components: type: string saved_query_id: type: string + timeout: + type: number OsqueryParamsCamelCase: type: object @@ -81,6 +83,8 @@ components: type: string savedQueryId: type: string + timeout: + type: number OsqueryResponseAction: type: object diff --git a/x-pack/plugins/security_solution/common/endpoint/utils/package_v2.ts b/x-pack/plugins/security_solution/common/endpoint/utils/package_v2.ts index fffa55ccbe514..5aec9e894ad8b 100644 --- a/x-pack/plugins/security_solution/common/endpoint/utils/package_v2.ts +++ b/x-pack/plugins/security_solution/common/endpoint/utils/package_v2.ts @@ -5,14 +5,17 @@ * 2.0. */ -import semverLte from 'semver/functions/lte'; +// import semverLte from 'semver/functions/lte'; -function parseSemver(semver: string) { - return semver.includes('-') ? semver.substring(0, semver.indexOf('-')) : semver; -} +// function parseSemver(semver: string) { +// return semver.includes('-') ? semver.substring(0, semver.indexOf('-')) : semver; +// } -const MIN_ENDPOINT_PACKAGE_V2_VERSION = '8.13.0'; +// until a release is confirmed, or another feature-detection method is used, do not automatically +// switch to "v2" logic +// const MIN_ENDPOINT_PACKAGE_V2_VERSION = '8.13.0'; export function isEndpointPackageV2(version: string) { - const parsedVersion = parseSemver(version); - return semverLte(MIN_ENDPOINT_PACKAGE_V2_VERSION, parsedVersion); + // const parsedVersion = parseSemver(version); + // return semverLte(MIN_ENDPOINT_PACKAGE_V2_VERSION, parsedVersion); + return false; } diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index a9f3affba56d7..8c16307ab5b8c 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -162,7 +162,7 @@ export const allowedExperimentalValues = Object.freeze({ * This tab shows the JSON diff between the installed prebuilt rule * version and the latest available version. */ - jsonPrebuiltRulesDiffingEnabled: false, + jsonPrebuiltRulesDiffingEnabled: true, }); type ExperimentalConfigKeys = Array<keyof ExperimentalFeatures>; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifacts_mocked_data.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifacts_mocked_data.cy.ts index 55a1035ca8969..8d21ff3804364 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifacts_mocked_data.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifacts_mocked_data.cy.ts @@ -32,7 +32,7 @@ const loginWithoutAccess = (url: string) => { }; // Flaky: https://github.com/elastic/kibana/issues/171168 -describe.skip('Artifacts pages', { tags: ['@ess', '@serverless'] }, () => { +describe('Artifacts pages', { tags: ['@ess', '@serverless'] }, () => { let endpointData: ReturnTypeFromChainable<typeof indexEndpointHosts> | undefined; before(() => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts index 305ce11d165ef..1948434b39c9f 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts @@ -20,9 +20,7 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -// FLAKY: https://github.com/elastic/kibana/issues/168340 -// FLAKY: https://github.com/elastic/kibana/issues/168427 -describe.skip( +describe( 'Automated Response Actions', { tags: [ diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts index 91557f3958f27..e51f75d8eb737 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts @@ -26,7 +26,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -describe.skip('Response console', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts index 4093581366321..b806323726018 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/document_signing.cy.ts @@ -22,8 +22,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/170674 -describe.skip('Document signing:', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Document signing:', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts index e932250dada6b..75074b0d3f94a 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/endpoints_list_response_console.cy.ts @@ -20,9 +20,7 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/169821 -// FLAKY: https://github.com/elastic/kibana/issues/169822 -describe.skip('Response console', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts index 8be29e75ddd9c..dad573bb09c2b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts @@ -26,9 +26,7 @@ describe('Response console', { tags: ['@ess', '@serverless'] }, () => { login(); }); - // FLAKY: https://github.com/elastic/kibana/issues/170373 - // FLAKY: https://github.com/elastic/kibana/issues/171444 - describe.skip('Execute operations:', () => { + describe('Execute operations:', () => { const homeFilePath = process.env.CI || true ? '/home/vagrant' : `/home/ubuntu`; let indexedPolicy: IndexedFleetEndpointPolicyResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts index a470098b4f55f..e76a0beb82dca 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/file_operations.cy.ts @@ -26,9 +26,7 @@ describe('Response console', { tags: ['@ess', '@serverless'] }, () => { login(); }); - // FLAKY: https://github.com/elastic/kibana/issues/170424 - // FLAKY: https://github.com/elastic/kibana/issues/173456 - describe.skip('File operations:', () => { + describe('File operations:', () => { const homeFilePath = Cypress.env('IS_CI') ? '/home/vagrant' : '/home/ubuntu'; const fileContent = 'This is a test file for the get-file command.'; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts index fb5fcd0476c14..44fdf9d63fb68 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts @@ -26,9 +26,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173464 -// FLAKY: https://github.com/elastic/kibana/issues/173465 -describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts index ba2ebf1c1a88a..c7120ded692b9 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts @@ -24,9 +24,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173459 -// FLAKY: https://github.com/elastic/kibana/issues/170563 -describe.skip('Response console', { tags: ['@ess', '@serverless'] }, () => { +describe('Response console', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts index 046a185babda3..e0b26bc2f77dd 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/unenroll_agent_from_fleet.cy.ts @@ -20,9 +20,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173463 -// FLAKY: https://github.com/elastic/kibana/issues/170814 -describe.skip( +describe( 'Unenroll agent from fleet with agent tamper protection is disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts index d5b018e9b03a4..ed47855ac894a 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/disabled/uninstall_agent_from_host.cy.ts @@ -21,8 +21,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173466 -describe.skip( +describe( 'Uninstall agent from host when agent tamper protection is disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts index cf37edfb0274b..17cb52c2cb042 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/unenroll_agent_from_fleet.cy.ts @@ -20,9 +20,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173460 -// FLAKY: https://github.com/elastic/kibana/issues/170706 -describe.skip( +describe( 'Unenroll agent from fleet when agent tamper protection is enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts index a7220e3bd7f1d..527566bed608b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/enabled/uninstall_agent_from_host.cy.ts @@ -22,9 +22,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173471 -// FLAKY: https://github.com/elastic/kibana/issues/170601 -describe.skip( +describe( 'Uninstall agent from host when agent tamper protection is enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts index 0bd503db67e99..3d92528c2eee7 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_disabled_to_enabled.cy.ts @@ -22,9 +22,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173470 -// FLAKY: https://github.com/elastic/kibana/issues/170811 -describe.skip( +describe( 'Unenroll agent from fleet when agent tamper protection is disabled but then is switched to a policy with it enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts index d744abcb5b431..a9508a13f719b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_disabled.cy.ts @@ -22,7 +22,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -describe.skip( +describe( 'Unenroll agent from fleet changing when agent tamper protection is enabled but then is switched to a policy with it disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts index 55058897c4f95..a5654734c15e4 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/unenroll_agent_from_fleet_changing_policy_from_enabled_to_enabled.cy.ts @@ -21,9 +21,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/170816 -// FLAKY: https://github.com/elastic/kibana/issues/173458 -describe.skip( +describe( 'Unenroll agent from fleet changing agent policy when agent tamper protection is enabled but then is switched to a policy with it also enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts index ebd08694cd985..bbb675cf56d5e 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_disabled_to_enabled.cy.ts @@ -24,9 +24,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173475 -// FLAKY: https://github.com/elastic/kibana/issues/170794 -describe.skip( +describe( 'Uninstall agent from host changing agent policy when agent tamper protection is disabled but then is switched to a policy with it enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts index d01b5cbfdd086..0768c4a49ca39 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_disabled.cy.ts @@ -23,9 +23,7 @@ import { enableAllPolicyProtections } from '../../../tasks/endpoint_policy'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173457 -// FLAKY: https://github.com/elastic/kibana/issues/170604 -describe.skip( +describe( 'Uninstall agent from host changing agent policy when agent tamper protection is enabled but then is switched to a policy with it disabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts index 379afba46b7fd..d8630a50a83b9 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/tamper_protection/switching_policies/uninstall_agent_from_host_changing_policy_from_enabled_to_enabled.cy.ts @@ -23,8 +23,7 @@ import { login } from '../../../tasks/login'; import { createEndpointHost } from '../../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../../tasks/delete_all_endpoint_data'; -// FLAKY: https://github.com/elastic/kibana/issues/173467 -describe.skip( +describe( 'Uninstall agent from host changing agent policy when agent tamper protection is enabled but then is switched to a policy with it also enabled', { tags: ['@ess'] }, () => { diff --git a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.test.ts index 715d656944c86..90ef987e1f84d 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.test.ts @@ -96,18 +96,64 @@ describe('AlertCountsTool', () => { await tool.func(''); expect(esClient.search).toHaveBeenCalledWith({ - aggs: { statusBySeverity: { terms: { field: 'kibana.alert.severity' } } }, + aggs: { + kibanaAlertSeverity: { + terms: { + field: 'kibana.alert.severity', + }, + aggs: { + kibanaAlertWorkflowStatus: { + terms: { + field: 'kibana.alert.workflow_status', + }, + }, + }, + }, + }, index: ['alerts-index'], query: { bool: { filter: [ { bool: { - filter: [{ match_phrase: { 'kibana.alert.workflow_status': 'open' } }], - must_not: [{ exists: { field: 'kibana.alert.building_block_type' } }], + filter: [ + { + bool: { + should: [ + { + match_phrase: { + 'kibana.alert.workflow_status': 'open', + }, + }, + { + match_phrase: { + 'kibana.alert.workflow_status': 'acknowledged', + }, + }, + ], + minimum_should_match: 1, + }, + }, + ], + should: [], + must: [], + must_not: [ + { + exists: { + field: 'kibana.alert.building_block_type', + }, + }, + ], + }, + }, + { + range: { + '@timestamp': { + gte: 'now-24h', + lte: 'now', + }, }, }, - { range: { '@timestamp': { gte: 'now/d', lte: 'now/d' } } }, ], }, }, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.ts b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.ts index e1c265c3dc239..195f752bc3c8e 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.ts @@ -17,7 +17,7 @@ export interface AlertCountsToolParams extends AssistantToolParams { alertsIndexPattern: string; } export const ALERT_COUNTS_TOOL_DESCRIPTION = - 'Call this for the counts of last 24 hours of open alerts in the environment, grouped by their severity'; + 'Call this for the counts of last 24 hours of open and acknowledged alerts in the environment, grouped by their severity and workflow status.'; export const ALERT_COUNTS_TOOL: AssistantTool = { id: 'alert-counts-tool', diff --git a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/get_alert_counts_query.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/get_alert_counts_query.test.ts index 27e210d53d51d..733b669760bbb 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/get_alert_counts_query.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/get_alert_counts_query.test.ts @@ -14,10 +14,17 @@ describe('getAlertsCountQuery', () => { expect(query).toEqual({ aggs: { - statusBySeverity: { + kibanaAlertSeverity: { terms: { field: 'kibana.alert.severity', }, + aggs: { + kibanaAlertWorkflowStatus: { + terms: { + field: 'kibana.alert.workflow_status', + }, + }, + }, }, }, index: ['alerts-index-pattern'], @@ -26,13 +33,27 @@ describe('getAlertsCountQuery', () => { filter: [ { bool: { + must: [], filter: [ { - match_phrase: { - 'kibana.alert.workflow_status': 'open', + bool: { + should: [ + { + match_phrase: { + 'kibana.alert.workflow_status': 'open', + }, + }, + { + match_phrase: { + 'kibana.alert.workflow_status': 'acknowledged', + }, + }, + ], + minimum_should_match: 1, }, }, ], + should: [], must_not: [ { exists: { @@ -45,8 +66,8 @@ describe('getAlertsCountQuery', () => { { range: { '@timestamp': { - gte: 'now/d', - lte: 'now/d', + gte: 'now-24h', + lte: 'now', }, }, }, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/get_alert_counts_query.ts b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/get_alert_counts_query.ts index 10ca556ad59e1..9ffb9122d762f 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/get_alert_counts_query.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/get_alert_counts_query.ts @@ -7,10 +7,17 @@ export const getAlertsCountQuery = (alertsIndexPattern: string) => ({ aggs: { - statusBySeverity: { + kibanaAlertSeverity: { terms: { field: 'kibana.alert.severity', }, + aggs: { + kibanaAlertWorkflowStatus: { + terms: { + field: 'kibana.alert.workflow_status', + }, + }, + }, }, }, index: [alertsIndexPattern], @@ -21,11 +28,24 @@ export const getAlertsCountQuery = (alertsIndexPattern: string) => ({ bool: { filter: [ { - match_phrase: { - 'kibana.alert.workflow_status': 'open', + bool: { + should: [ + { + match_phrase: { + 'kibana.alert.workflow_status': 'open', + }, + }, + { + match_phrase: { + 'kibana.alert.workflow_status': 'acknowledged', + }, + }, + ], + minimum_should_match: 1, }, }, ], + must: [], must_not: [ { exists: { @@ -33,13 +53,14 @@ export const getAlertsCountQuery = (alertsIndexPattern: string) => ({ }, }, ], + should: [], }, }, { range: { '@timestamp': { - gte: 'now/d', - lte: 'now/d', + gte: 'now-24h', + lte: 'now', }, }, }, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/get_open_and_acknowledged_alerts_query.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/get_open_and_acknowledged_alerts_query.test.ts index a0cf067099e92..0b73bcbae5b53 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/get_open_and_acknowledged_alerts_query.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/get_open_and_acknowledged_alerts_query.test.ts @@ -49,8 +49,8 @@ describe('getOpenAndAcknowledgedAlertsQuery', () => { { range: { '@timestamp': { - gte: 'now-1d/d', - lte: 'now/d', + gte: 'now-24h', + lte: 'now', format: 'strict_date_optional_time', }, }, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/get_open_and_acknowledged_alerts_query.ts b/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/get_open_and_acknowledged_alerts_query.ts index 9fffaf85d1f21..5258f71ae0a43 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/get_open_and_acknowledged_alerts_query.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/get_open_and_acknowledged_alerts_query.ts @@ -47,8 +47,8 @@ export const getOpenAndAcknowledgedAlertsQuery = ({ { range: { '@timestamp': { - gte: 'now-1d/d', - lte: 'now/d', + gte: 'now-24h', + lte: 'now', format: 'strict_date_optional_time', }, }, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool.test.ts index c485c001704eb..c74f0617231da 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool.test.ts @@ -174,8 +174,8 @@ describe('OpenAndAcknowledgedAlertsTool', () => { range: { '@timestamp': { format: 'strict_date_optional_time', - gte: 'now-1d/d', - lte: 'now/d', + gte: 'now-24h', + lte: 'now', }, }, }, diff --git a/x-pack/plugins/serverless_search/common/doc_links.ts b/x-pack/plugins/serverless_search/common/doc_links.ts index c3cfecd7dfc66..7168f089c41e1 100644 --- a/x-pack/plugins/serverless_search/common/doc_links.ts +++ b/x-pack/plugins/serverless_search/common/doc_links.ts @@ -19,6 +19,7 @@ class ESDocLinks { public roleDescriptors: string = ''; public securityApis: string = ''; public ingestionPipelines: string = ''; + public dataStreams: string = ''; // Client links public elasticsearchClients: string = ''; // go @@ -61,6 +62,7 @@ class ESDocLinks { this.roleDescriptors = newDocLinks.serverlessSecurity.apiKeyPrivileges; this.securityApis = newDocLinks.apis.securityApis; this.ingestionPipelines = newDocLinks.ingest.pipelines; + this.dataStreams = newDocLinks.elasticsearch.dataStreams; // Client links this.elasticsearchClients = newDocLinks.serverlessClients.clientLib; diff --git a/x-pack/plugins/serverless_search/common/types/index.ts b/x-pack/plugins/serverless_search/common/types/index.ts index c4dac1508374e..6b43747b19afd 100644 --- a/x-pack/plugins/serverless_search/common/types/index.ts +++ b/x-pack/plugins/serverless_search/common/types/index.ts @@ -5,6 +5,9 @@ * 2.0. */ +import { IndicesIndexState, IndicesStatsIndicesStats } from '@elastic/elasticsearch/lib/api/types'; +import { Connector } from '@kbn/search-connectors/types/connectors'; + export interface CreateAPIKeyArgs { expiration?: string; metadata?: Record<string, any>; @@ -20,3 +23,11 @@ export interface IndexData { export interface FetchIndicesResult { indices: IndexData[]; } + +export interface FetchIndexResult { + index: IndicesIndexState & { + connector?: Connector; + count: number; + stats?: IndicesStatsIndicesStats; + }; +} diff --git a/x-pack/plugins/serverless_search/public/application/components/badge_list.tsx b/x-pack/plugins/serverless_search/public/application/components/badge_list.tsx new file mode 100644 index 0000000000000..9635515bdf419 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/badge_list.tsx @@ -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 React from 'react'; +import { EuiBadgeGroup, EuiBadge } from '@elastic/eui'; + +export interface BadgeListProps { + badges: React.ReactNode[]; + maxBadgesToDisplay?: number; +} + +export const BadgeList = ({ badges, maxBadgesToDisplay }: BadgeListProps) => { + const maxBadges = maxBadgesToDisplay ?? 3; + if (badges.length === 0) { + return <></>; + } + + const badgesToDisplay = badges.slice(0, maxBadges); + return ( + <EuiBadgeGroup gutterSize="s" css={{ width: '100%' }}> + {badgesToDisplay.map((badge) => badge)} + {badges.length > maxBadges && ( + <EuiBadge color="hollow">+{badges.length - maxBadges}</EuiBadge> + )} + </EuiBadgeGroup> + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx index 53d99b37c99a1..4850bdf8b86e3 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx @@ -45,7 +45,7 @@ import { import { useConnectors } from '../../hooks/api/use_connectors'; import { useConnectorTypes } from '../../hooks/api/use_connector_types'; import { useKibanaServices } from '../../hooks/use_kibana'; -import { EDIT_CONNECTOR_PATH } from '../connectors_router'; +import { EDIT_CONNECTOR_PATH } from '../../constants'; import { DeleteConnectorModal } from './delete_connector_modal'; export const ConnectorsTable: React.FC = () => { diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/empty_connectors_prompt.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/empty_connectors_prompt.tsx index abb0ad64242d7..218c956c78770 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors/empty_connectors_prompt.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/empty_connectors_prompt.tsx @@ -19,14 +19,16 @@ import { import { i18n } from '@kbn/i18n'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { PLUGIN_ID } from '../../../../common'; + import { useConnectorTypes } from '../../hooks/api/use_connector_types'; -import { useKibanaServices } from '../../hooks/use_kibana'; +import { useCreateConnector } from '../../hooks/api/use_create_connector'; +import { useAssetBasePath } from '../../hooks/use_asset_base_path'; export const EmptyConnectorsPrompt: React.FC = () => { - const { http } = useKibanaServices(); const { data: connectorTypes } = useConnectorTypes(); - const assetBasePath = http.basePath.prepend(`/plugins/${PLUGIN_ID}/assets`); + const { createConnector, isLoading } = useCreateConnector(); + + const assetBasePath = useAssetBasePath(); const connectorsPath = assetBasePath + '/connectors.svg'; return ( <EuiFlexGroup alignItems="center" direction="column"> @@ -167,6 +169,8 @@ export const EmptyConnectorsPrompt: React.FC = () => { data-test-subj="serverlessSearchEmptyConnectorsPromptCreateConnectorButton" fill iconType="plusInCircleFilled" + onClick={() => createConnector()} + isLoading={isLoading} > {i18n.translate('xpack.serverlessSearch.connectorsEmpty.createConnector', { defaultMessage: 'Create connector', diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx index ab1ce4e2902bf..f8c224ed2c9c6 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx @@ -10,9 +10,6 @@ import React from 'react'; import { EditConnector } from './connectors/edit_connector'; import { ConnectorsOverview } from './connectors_overview'; -export const BASE_CONNECTORS_PATH = 'connectors'; -export const EDIT_CONNECTOR_PATH = `${BASE_CONNECTORS_PATH}/:id`; - export const ConnectorsRouter: React.FC = () => { return ( <Routes> diff --git a/x-pack/plugins/serverless_search/public/application/components/index_documents/documents.tsx b/x-pack/plugins/serverless_search/public/application/components/index_documents/documents.tsx index 8d719485973e4..d74c3a479a68a 100644 --- a/x-pack/plugins/serverless_search/public/application/components/index_documents/documents.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/index_documents/documents.tsx @@ -74,3 +74,7 @@ export const IndexDocuments: React.FC<IndexDocumentsProps> = ({ indexName }) => /> ); }; + +// Default Export is needed to lazy load this react component +// eslint-disable-next-line import/no-default-export +export default IndexDocuments; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_documents/documents_tab.tsx b/x-pack/plugins/serverless_search/public/application/components/index_documents/documents_tab.tsx index c71089b5f3b83..ff4f2165f534c 100644 --- a/x-pack/plugins/serverless_search/public/application/components/index_documents/documents_tab.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/index_documents/documents_tab.tsx @@ -6,16 +6,19 @@ */ import { IndexDetailsTab } from '@kbn/index-management-plugin/common/constants'; -import React from 'react'; +import React, { Suspense, lazy } from 'react'; +import { EuiLoadingSpinner } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { CoreStart } from '@kbn/core-lifecycle-browser'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; + import { ServerlessSearchPluginStartDependencies } from '../../../types'; -import { IndexDocuments } from './documents'; -export const createIndexOverviewContent = ( +const IndexDocuments = lazy(() => import('./documents')); + +export const createIndexDocumentsContent = ( core: CoreStart, services: ServerlessSearchPluginStartDependencies ): IndexDetailsTab => { @@ -34,7 +37,9 @@ export const createIndexOverviewContent = ( <KibanaContextProvider services={{ ...core, ...services }}> <QueryClientProvider client={queryClient}> <ReactQueryDevtools initialIsOpen={false} /> - <IndexDocuments indexName={index.name} /> + <Suspense fallback={<EuiLoadingSpinner />}> + <IndexDocuments indexName={index.name} /> + </Suspense> </QueryClientProvider> </KibanaContextProvider> ); diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/api_empty_prompt.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/api_empty_prompt.tsx new file mode 100644 index 0000000000000..4881c8d73f40f --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/api_empty_prompt.tsx @@ -0,0 +1,166 @@ +/* + * 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, { useMemo, useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiEmptyPrompt, + EuiFlexItem, + EuiFlexGroup, + EuiIcon, + EuiText, + EuiButtonEmpty, + EuiLink, + EuiPanel, + EuiTitle, + EuiSpacer, + EuiSteps, +} from '@elastic/eui'; +import { EuiContainedStepProps } from '@elastic/eui/src/components/steps/steps'; +import { + CodeBox, + getConsoleRequest, + getLanguageDefinitionCodeSnippet, + LanguageDefinition, + LanguageDefinitionSnippetArguments, +} from '@kbn/search-api-panels'; + +import { BACK_LABEL } from '../../../../common/i18n_string'; + +import { useAssetBasePath } from '../../hooks/use_asset_base_path'; +import { useKibanaServices } from '../../hooks/use_kibana'; +import { javaDefinition } from '../languages/java'; +import { languageDefinitions } from '../languages/languages'; +import { LanguageGrid } from '../languages/language_grid'; +import { + API_KEY_PLACEHOLDER, + CLOUD_ID_PLACEHOLDER, + ELASTICSEARCH_URL_PLACEHOLDER, +} from '../../constants'; + +import { ApiKeyPanel } from '../api_key/api_key'; + +export interface APIIndexEmptyPromptProps { + indexName: string; + onBackClick?: () => void; +} + +export const APIIndexEmptyPrompt = ({ indexName, onBackClick }: APIIndexEmptyPromptProps) => { + const { application, cloud, share } = useKibanaServices(); + const assetBasePath = useAssetBasePath(); + const [selectedLanguage, setSelectedLanguage] = + React.useState<LanguageDefinition>(javaDefinition); + const [clientApiKey, setClientApiKey] = useState<string>(API_KEY_PLACEHOLDER); + const { elasticsearchURL, cloudId } = useMemo(() => { + return { + elasticsearchURL: cloud?.elasticsearchUrl ?? ELASTICSEARCH_URL_PLACEHOLDER, + cloudId: cloud?.cloudId ?? CLOUD_ID_PLACEHOLDER, + }; + }, [cloud]); + const codeSnippetArguments: LanguageDefinitionSnippetArguments = { + url: elasticsearchURL, + apiKey: clientApiKey, + cloudId, + indexName, + }; + + const apiIngestSteps: EuiContainedStepProps[] = [ + { + title: i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.api.ingest.title', + { defaultMessage: 'Ingest data via API using a programming language client' } + ), + children: ( + <EuiFlexGroup direction="column"> + <EuiFlexItem> + <LanguageGrid + assetBasePath={assetBasePath} + setSelectedLanguage={setSelectedLanguage} + languages={languageDefinitions} + selectedLanguage={selectedLanguage.id} + /> + </EuiFlexItem> + <EuiFlexItem> + <CodeBox + languages={languageDefinitions} + codeSnippet={getLanguageDefinitionCodeSnippet( + selectedLanguage, + 'ingestDataIndex', + codeSnippetArguments + )} + consoleRequest={getConsoleRequest('ingestDataIndex')} + selectedLanguage={selectedLanguage} + setSelectedLanguage={setSelectedLanguage} + assetBasePath={assetBasePath} + application={application} + sharePlugin={share} + /> + </EuiFlexItem> + </EuiFlexGroup> + ), + }, + { + title: i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.api.apiKey.title', + { defaultMessage: 'Prepare an API key' } + ), + children: <ApiKeyPanel setClientApiKey={setClientApiKey} />, + }, + ]; + + return ( + <EuiPanel> + <EuiButtonEmpty + data-test-subj="serverlessSearchAPIIndexEmptyPromptBackButton" + onClick={onBackClick} + iconSide="left" + iconType="arrowLeft" + > + {BACK_LABEL} + </EuiButtonEmpty> + <EuiEmptyPrompt + icon={<EuiIcon type="addDataApp" size="xl" />} + title={ + <EuiTitle size="xs"> + <h5> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.api.title" + defaultMessage="Ingest content" + /> + </h5> + </EuiTitle> + } + body={ + <EuiText> + <p> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.api.body" + defaultMessage="Customize these variables to match your content. For a full setup guide, visit our {getStartedLink} guide." + values={{ + getStartedLink: ( + <EuiLink + data-test-subj="serverlessSearchAPIIndexEmptyPromptGetStartedLink" + onClick={() => application.navigateToApp('elasticsearch')} + > + {i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.api.body.getStartedLink', + { defaultMessage: 'Get started' } + )} + </EuiLink> + ), + }} + /> + </p> + </EuiText> + } + /> + <EuiSpacer /> + <EuiSteps steps={apiIngestSteps} titleSize="xs" /> + </EuiPanel> + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/connector_empty_prompt.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/connector_empty_prompt.tsx new file mode 100644 index 0000000000000..487c80ce48b6f --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/connector_empty_prompt.tsx @@ -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 React from 'react'; +import { EuiButtonEmpty, EuiPanel } from '@elastic/eui'; + +import { BACK_LABEL } from '../../../../common/i18n_string'; +import { EmptyConnectorsPrompt } from '../connectors/empty_connectors_prompt'; + +interface ConnectorIndexEmptyPromptProps { + indexName: string; + onBackClick?: () => void; +} + +export const ConnectorIndexEmptyPrompt = ({ onBackClick }: ConnectorIndexEmptyPromptProps) => { + return ( + <EuiPanel> + <EuiButtonEmpty + data-test-subj="serverlessSearchConnectorIndexEmptyPromptBackButton" + onClick={onBackClick} + iconSide="left" + iconType="arrowLeft" + > + {BACK_LABEL} + </EuiButtonEmpty> + <EmptyConnectorsPrompt /> + </EuiPanel> + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/connector_setup_prompt.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/connector_setup_prompt.tsx new file mode 100644 index 0000000000000..888a5f11385a5 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/connector_setup_prompt.tsx @@ -0,0 +1,100 @@ +/* + * 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 { + EuiEmptyPrompt, + EuiIcon, + EuiFlexItem, + EuiFlexGroup, + EuiButton, + EuiPanel, + EuiTitle, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { Connector } from '@kbn/search-connectors'; + +import { useKibanaServices } from '../../hooks/use_kibana'; +import { useAssetBasePath } from '../../hooks/use_asset_base_path'; +import { useConnectorTypes } from '../../hooks/api/use_connector_types'; + +interface ConnectorSetupEmptyPromptProps { + indexName: string; + connector: Connector; +} + +export const ConnectorSetupEmptyPrompt = ({ connector }: ConnectorSetupEmptyPromptProps) => { + const { http } = useKibanaServices(); + const assetBasePath = useAssetBasePath(); + const { data: connectorTypes } = useConnectorTypes(); + + const connectorsIconPath = assetBasePath + '/connectors.svg'; + const connectorPath = http.basePath.prepend(`/app/connectors/${connector.id}`); + const connectorType = connectorTypes?.connectors?.find( + (cType) => cType.serviceType === connector.service_type + ); + return ( + <EuiPanel> + <EuiEmptyPrompt + icon={<EuiIcon size="xxl" type={connectorsIconPath} />} + title={ + <EuiTitle size="xs"> + <h5> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.connector.title" + defaultMessage="Set up your connector" + /> + </h5> + </EuiTitle> + } + body={ + <> + <p> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.connector.body" + defaultMessage="This index is managed by an existing connector." + /> + </p> + {!!connectorType && ( + <> + <EuiFlexGroup + direction="row" + gutterSize="s" + alignItems="center" + justifyContent="center" + > + <EuiFlexItem grow={false}> + <EuiIcon + size="l" + title={connectorType.name} + id={connectorType.serviceType} + type={connectorType.iconPath} + style={{ marginBottom: '0px' }} + /> + </EuiFlexItem> + <EuiFlexItem grow={false}>{connectorType.name}</EuiFlexItem> + </EuiFlexGroup> + </> + )} + </> + } + actions={ + <EuiButton + data-test-subj="serverlessSearchConnectorSetupEmptyPromptViewConnectorButton" + fill + href={connectorPath} + > + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.connector.action" + defaultMessage="View Connector" + /> + </EuiButton> + } + /> + </EuiPanel> + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/index_aliases_flyout.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/index_aliases_flyout.tsx new file mode 100644 index 0000000000000..5f87fd2ab0b81 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/index_aliases_flyout.tsx @@ -0,0 +1,75 @@ +/* + * 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 { + EuiBasicTable, + EuiBasicTableColumn, + EuiButton, + EuiFlexGroup, + EuiFlexItem, + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiTitle, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; + +export interface IndexAliasesFlyoutProps { + aliases: string[]; + indexName: string; + onClose: () => void; +} + +export const IndexAliasesFlyout = ({ indexName, aliases, onClose }: IndexAliasesFlyoutProps) => { + const aliasItems = aliases.map((alias) => ({ name: alias })); + const columns: Array<EuiBasicTableColumn<{ name: string }>> = [ + { + field: 'name', + name: i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesFlyout.table.nameColumn.header', + { defaultMessage: 'Alias Name' } + ), + 'data-test-subj': 'aliasNameCell', + truncateText: false, + width: '100%', + }, + ]; + return ( + <EuiFlyout onClose={onClose}> + <EuiFlyoutHeader hasBorder> + <EuiTitle size="m"> + <h2> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesFlyout.title" + defaultMessage="{indexName} Aliases" + values={{ indexName }} + /> + </h2> + </EuiTitle> + </EuiFlyoutHeader> + <EuiFlyoutBody> + <EuiBasicTable items={aliasItems} columns={columns} /> + </EuiFlyoutBody> + <EuiFlyoutFooter> + <EuiFlexGroup justifyContent="flexEnd"> + <EuiFlexItem grow={false}> + <EuiButton onClick={onClose} data-test-subj="close-index-aliases-flyout"> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesFlyout.closeLabel" + defaultMessage="Close" + /> + </EuiButton> + </EuiFlexItem> + </EuiFlexGroup> + </EuiFlyoutFooter> + </EuiFlyout> + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_mappings_docs_link.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/index_mappings_docs_link.tsx similarity index 100% rename from x-pack/plugins/serverless_search/public/application/components/index_mappings_docs_link.tsx rename to x-pack/plugins/serverless_search/public/application/components/index_management/index_mappings_docs_link.tsx diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview.tsx new file mode 100644 index 0000000000000..f1db8d49e038a --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview.tsx @@ -0,0 +1,271 @@ +/* + * 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, { FunctionComponent } from 'react'; +import numeral from '@elastic/numeral'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage, FormattedPlural } from '@kbn/i18n-react'; +import { + EuiLoadingSpinner, + EuiEmptyPrompt, + EuiFlexGrid, + EuiFlexItem, + EuiFlexGroup, + EuiIcon, + EuiI18nNumber, + EuiText, + EuiBadge, + EuiButton, + EuiLink, + EuiSpacer, +} from '@elastic/eui'; + +import { Index } from '@kbn/index-management-plugin/common/types/indices'; + +import { docLinks } from '../../../../common/doc_links'; +import { useIndex } from '../../hooks/api/use_index'; + +import { BadgeList } from '../badge_list'; +import { OverviewEmptyPrompt } from './overview_empty_prompt'; +import { IndexOverviewPanel, IndexOverviewPanelStat } from './overview_panel'; +import { IndexAliasesFlyout } from './index_aliases_flyout'; + +export interface IndexDetailOverviewProps { + index: Index; +} + +export const IndexDetailOverview: FunctionComponent<IndexDetailOverviewProps> = ({ index }) => { + const [aliasesFlyoutOpen, setAliasesFlyoutOpen] = React.useState<boolean>(false); + const { data, isLoading, isError } = useIndex(index.name); + const indexAliases = + typeof index.aliases === 'string' + ? index.aliases.length > 0 && index.aliases !== 'none' + ? [index.aliases] + : [] + : index.aliases; + + if (isLoading || !data) + return ( + <EuiEmptyPrompt + icon={<EuiLoadingSpinner size="l" />} + title={ + <h2> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.loading.title" + defaultMessage="Loading index" + /> + </h2> + } + /> + ); + if (isError) { + return ( + <EuiEmptyPrompt + iconType="error" + color="danger" + title={ + <h2> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.error.title" + defaultMessage="Unable to load index" + /> + </h2> + } + body={ + <p> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.error.description" + defaultMessage="There was an error loading the index." + /> + </p> + } + /> + ); + } + + const indexData = data.index; + return ( + <> + {aliasesFlyoutOpen && ( + <IndexAliasesFlyout + indexName={index.name} + aliases={indexAliases} + onClose={() => setAliasesFlyoutOpen(false)} + /> + )} + <EuiFlexGrid columns={2}> + <EuiFlexItem> + <IndexOverviewPanel + title={ + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.dataStreamPanel.title" + defaultMessage="Data Stream" + /> + } + footer={ + <EuiLink + data-test-subj="serverlessSearchIndexDetailOverviewHowToManageDataStreamsButton" + href={docLinks.dataStreams} + external + > + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.dataStreamPanel.docsLink" + defaultMessage="How to manage Data Streams" + /> + </EuiLink> + } + > + <IndexOverviewPanelStat>{index.data_stream ?? '--'}</IndexOverviewPanelStat> + </IndexOverviewPanel> + </EuiFlexItem> + <EuiFlexItem> + <IndexOverviewPanel + title={ + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesPanel.title" + defaultMessage="Aliases" + /> + } + footer={ + <BadgeList + badges={ + indexAliases.length > 0 + ? indexAliases.map((alias) => <EuiBadge key={alias}>{alias}</EuiBadge>) + : [ + <EuiBadge key="none"> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesPanel.noneBadge" + defaultMessage="none" + /> + </EuiBadge>, + ] + } + /> + } + > + <EuiFlexGroup alignItems="baseline" justifyContent="spaceBetween" gutterSize="s"> + <EuiFlexItem grow={false}> + <IndexOverviewPanelStat> + <EuiI18nNumber value={indexAliases.length} /> + </IndexOverviewPanelStat> + </EuiFlexItem> + <EuiFlexItem> + <EuiText color="subdued"> + <p> + <FormattedPlural + one={i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesPanel.singleLabel', + { defaultMessage: 'Alias' } + )} + other={i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesPanel.multipleLabel', + { defaultMessage: 'Aliases' } + )} + value={indexAliases.length} + /> + </p> + </EuiText> + </EuiFlexItem> + <EuiFlexItem grow={false}> + <EuiButton + disabled={indexAliases.length === 0} + data-test-subj="serverlessSearchIndexDetailOverviewViewAllAliasesButton" + onClick={() => setAliasesFlyoutOpen(true)} + > + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.aliasesPanel.viewAllAliasesBtn" + defaultMessage="View All Aliases" + /> + </EuiButton> + </EuiFlexItem> + </EuiFlexGroup> + </IndexOverviewPanel> + </EuiFlexItem> + {indexData.count > 0 && ( + <EuiFlexItem> + <IndexOverviewPanel + title={ + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.title" + defaultMessage="Storage" + /> + } + footer={ + <EuiFlexGroup alignItems="center" gutterSize="s"> + <EuiFlexItem grow={false}> + <EuiIcon size="s" type="documents" /> + </EuiFlexItem> + <EuiFlexItem> + <EuiText color="subdued" size="xs"> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.documentCount" + defaultMessage="{documentCount} Documents / {deletedCount} Deleted" + values={{ + documentCount: <EuiI18nNumber value={indexData.count} />, + deletedCount: ( + <EuiI18nNumber value={indexData.stats?.total?.docs?.deleted ?? 0} /> + ), + }} + /> + </EuiText> + </EuiFlexItem> + </EuiFlexGroup> + } + > + <EuiFlexGroup alignItems="baseline" justifyContent="spaceBetween" gutterSize="s"> + <EuiFlexItem grow={false}> + <IndexOverviewPanelStat> + {numeral( + indexData.stats?.primaries?.store?.total_data_set_size_in_bytes ?? 0 + ).format('0 b')} + </IndexOverviewPanelStat> + </EuiFlexItem> + <EuiFlexItem> + <EuiText color="subdued"> + <p> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.primaryLabel" + defaultMessage="Primary" + /> + </p> + </EuiText> + </EuiFlexItem> + <EuiFlexItem grow={false}> + <IndexOverviewPanelStat> + {numeral( + indexData.stats?.total?.store?.total_data_set_size_in_bytes ?? 0 + ).format('0 b')} + </IndexOverviewPanelStat> + </EuiFlexItem> + <EuiFlexItem grow={false}> + <EuiText color="subdued"> + <p> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.storagePanel.totalLabel" + defaultMessage="Total" + /> + </p> + </EuiText> + </EuiFlexItem> + </EuiFlexGroup> + </IndexOverviewPanel> + </EuiFlexItem> + )} + </EuiFlexGrid> + {indexData.count === 0 && ( + <> + <EuiSpacer /> + <OverviewEmptyPrompt indexName={index.name} connector={indexData.connector} /> + </> + )} + </> + ); +}; + +// Default Export is needed to lazy load this react component +// eslint-disable-next-line import/no-default-export +export default IndexDetailOverview; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview_content.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview_content.tsx new file mode 100644 index 0000000000000..373dce2557571 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/index_overview_content.tsx @@ -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 React, { Suspense, lazy } from 'react'; +import { CoreStart } from '@kbn/core/public'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { EuiLoadingSpinner } from '@elastic/eui'; + +import { IndexContent } from '@kbn/index-management-plugin/public/services'; + +import { ServerlessSearchPluginStartDependencies } from '../../../types'; + +const IndexDetailOverview = lazy(() => import('./index_overview')); + +export const createIndexOverviewContent = ( + core: CoreStart, + services: ServerlessSearchPluginStartDependencies +): IndexContent => { + return { + renderContent: (index) => { + const queryClient = new QueryClient(); + return ( + <KibanaContextProvider services={{ ...core, ...services }}> + <QueryClientProvider client={queryClient}> + <ReactQueryDevtools initialIsOpen={false} /> + <Suspense fallback={<EuiLoadingSpinner />}> + <IndexDetailOverview index={index.index} /> + </Suspense> + </QueryClientProvider> + </KibanaContextProvider> + ); + }, + }; +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/overview_empty_prompt.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/overview_empty_prompt.tsx new file mode 100644 index 0000000000000..b790021483e07 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/overview_empty_prompt.tsx @@ -0,0 +1,173 @@ +/* + * 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 { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiEmptyPrompt, + EuiFlexItem, + EuiFlexGroup, + EuiText, + EuiButton, + EuiLink, + EuiPanel, + EuiTitle, +} from '@elastic/eui'; +import { Connector } from '@kbn/search-connectors'; + +import { docLinks } from '../../../../common/doc_links'; + +import { APIIndexEmptyPrompt } from './api_empty_prompt'; +import { ConnectorIndexEmptyPrompt } from './connector_empty_prompt'; +import { ConnectorSetupEmptyPrompt } from './connector_setup_prompt'; + +enum EmptyPromptView { + Default, + NewConnector, + API, + SetupConnector, +} + +export interface OverviewEmptyPromptProps { + indexName: string; + connector?: Connector; +} + +export const OverviewEmptyPrompt = ({ connector, indexName }: OverviewEmptyPromptProps) => { + const isConnectorIndex = !!connector; + const [currentView, setView] = React.useState<EmptyPromptView>( + isConnectorIndex ? EmptyPromptView.SetupConnector : EmptyPromptView.Default + ); + if (currentView === EmptyPromptView.SetupConnector) { + return <ConnectorSetupEmptyPrompt indexName={indexName} connector={connector!} />; + } + if (currentView === EmptyPromptView.NewConnector) { + return ( + <ConnectorIndexEmptyPrompt + indexName={indexName} + onBackClick={() => setView(EmptyPromptView.Default)} + /> + ); + } + if (currentView === EmptyPromptView.API) { + return ( + <APIIndexEmptyPrompt + indexName={indexName} + onBackClick={() => setView(EmptyPromptView.Default)} + /> + ); + } + + return ( + <EuiPanel> + <EuiEmptyPrompt + iconType="logstashInput" + title={ + <EuiTitle size="xs"> + <h5> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.title" + defaultMessage="Start ingesting data" + /> + </h5> + </EuiTitle> + } + body={ + <EuiText> + <p> + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.body" + defaultMessage="Populate your index with data using {logstashLink}, {beatsLink}, {connectorsLink}, or RESTful {apiCallsLink}." + values={{ + logstashLink: ( + <EuiLink + data-test-subj="serverlessSearchIndexDetailOverviewLogstashLink" + target="_blank" + external={false} + href={docLinks.logstash} + > + {i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.body.logstashLink', + { defaultMessage: 'Logstash' } + )} + </EuiLink> + ), + beatsLink: ( + <EuiLink + data-test-subj="serverlessSearchIndexDetailOverviewBeatsLink" + target="_blank" + external={false} + href={docLinks.beats} + > + {i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.body.beatsLink', + { defaultMessage: 'Beats' } + )} + </EuiLink> + ), + connectorsLink: ( + <EuiLink + data-test-subj="serverlessSearchIndexDetailOverviewConnectorsLink" + target="_blank" + external={false} + href={docLinks.connectors} + > + {i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.body.connectorsLink', + { defaultMessage: 'connectors' } + )} + </EuiLink> + ), + apiCallsLink: ( + <EuiLink + data-test-subj="serverlessSearchIndexDetailOverviewAPICallsLink" + target="_blank" + external={false} + href={docLinks.apiIntro} + > + {i18n.translate( + 'xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.body.apiCallsLink', + { defaultMessage: 'API calls' } + )} + </EuiLink> + ), + }} + /> + </p> + </EuiText> + } + actions={ + <EuiFlexGroup alignItems="center" justifyContent="center"> + <EuiFlexItem grow={false}> + <EuiButton + data-test-subj="serverlessSearchIndexDetailOverviewAddViaApiButton" + onClick={() => setView(EmptyPromptView.API)} + > + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.actions.addViaAPI" + defaultMessage="Add via API" + /> + </EuiButton> + </EuiFlexItem> + <EuiFlexItem grow={false}> + <EuiButton + data-test-subj="serverlessSearchIndexDetailOverviewAddViaConnectorButton" + onClick={() => setView(EmptyPromptView.NewConnector)} + > + <FormattedMessage + id="xpack.serverlessSearch.indexManagement.indexDetails.overview.emptyPrompt.actions.addViaConnector" + defaultMessage="Add via Connector" + /> + </EuiButton> + </EuiFlexItem> + </EuiFlexGroup> + } + /> + </EuiPanel> + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_management/overview_panel.tsx b/x-pack/plugins/serverless_search/public/application/components/index_management/overview_panel.tsx new file mode 100644 index 0000000000000..8b2b54e17d68e --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_management/overview_panel.tsx @@ -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 React from 'react'; +import { EuiSpacer, EuiSplitPanel, EuiTitle } from '@elastic/eui'; + +export interface IndexOverviewPanelProps { + title: React.ReactNode; + footer?: React.ReactNode | React.ReactNode[]; +} + +export const IndexOverviewPanel: React.FC<IndexOverviewPanelProps> = ({ + title, + footer, + children, +}) => ( + <EuiSplitPanel.Outer grow> + <EuiSplitPanel.Inner> + <EuiTitle size="xxs"> + <h6>{title}</h6> + </EuiTitle> + <EuiSpacer size="s" /> + {children} + </EuiSplitPanel.Inner> + {footer && ( + <EuiSplitPanel.Inner grow={false} color="subdued"> + {footer} + </EuiSplitPanel.Inner> + )} + </EuiSplitPanel.Outer> +); + +export const IndexOverviewPanelStat: React.FC = ({ children }) => ( + <EuiTitle size="l"> + <p>{children}</p> + </EuiTitle> +); diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/dotnet.ts b/x-pack/plugins/serverless_search/public/application/components/languages/dotnet.ts index 4f388d2227203..1ac3641f67fe9 100644 --- a/x-pack/plugins/serverless_search/public/application/components/languages/dotnet.ts +++ b/x-pack/plugins/serverless_search/public/application/components/languages/dotnet.ts @@ -37,6 +37,22 @@ var client = new ElasticsearchClient("${cloudId}", new ApiKey("${apiKey}"));`, }; var response = await client.IndexAsync(doc, "books");`, + ingestDataIndex: ({ apiKey, cloudId, indexName }) => `using System; +using Elastic.Clients.Elasticsearch.Serverless; +using Elastic.Clients.Elasticsearch.Serverless.QueryDsl; + +var client = new ElasticsearchClient("${cloudId}", new ApiKey("${apiKey}")); + +var doc = new Book +{ + Id = "9780553351927", + Name = "Snow Crash", + Author = "Neal Stephenson", + ReleaseDate = new DateTime(1992, 06, 01), + PageCount = 470 +}; + +var response = await client.IndexAsync(doc, "${indexName}");`, buildSearchQuery: `var response = await client.SearchAsync<Book>(s => s .Index("books") .From(0) diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/java.ts b/x-pack/plugins/serverless_search/public/application/components/languages/java.ts index 23566fcc67f98..c247eb978c15b 100644 --- a/x-pack/plugins/serverless_search/public/application/components/languages/java.ts +++ b/x-pack/plugins/serverless_search/public/application/components/languages/java.ts @@ -66,6 +66,56 @@ for (Book book : books) { BulkResponse result = esClient.bulk(br.build()); +// Log errors, if any +if (result.errors()) { + logger.error("Bulk had errors"); + for (BulkResponseItem item: result.items()) { + if (item.error() != null) { + logger.error(item.error().reason()); + } + } +}`, + ingestDataIndex: ({ apiKey, indexName, url }) => `// URL and API key +String serverUrl = "${url}"; +String apiKey = "${apiKey}"; + +// Create the low-level client +RestClient restClient = RestClient + .builder(HttpHost.create(serverUrl)) + .setDefaultHeaders(new Header[]{ + new BasicHeader("Authorization", "ApiKey " + apiKey) + }) + .build(); + +// Create the transport with a Jackson mapper +ElasticsearchTransport transport = new RestClientTransport( + restClient, new JacksonJsonpMapper()); + +// And create the API client +ElasticsearchClient esClient = new ElasticsearchClient(transport); + +List<Book> books = new ArrayList<>(); +books.add(new Book("9780553351927", "Snow Crash", "Neal Stephenson", "1992-06-01", 470)); +books.add(new Book("9780441017225", "Revelation Space", "Alastair Reynolds", "2000-03-15", 585)); +books.add(new Book("9780451524935", "1984", "George Orwell", "1985-06-01", 328)); +books.add(new Book("9781451673319", "Fahrenheit 451", "Ray Bradbury", "1953-10-15", 227)); +books.add(new Book("9780060850524", "Brave New World", "Aldous Huxley", "1932-06-01", 268)); +books.add(new Book("9780385490818", "The Handmaid's Tale", "Margaret Atwood", "1985-06-01", 311)); + +BulkRequest.Builder br = new BulkRequest.Builder(); + +for (Book book : books) { + br.operations(op -> op + .index(idx -> idx + .index("${indexName}") + .id(product.getId()) + .document(book) + ) + ); +} + +BulkResponse result = esClient.bulk(br.build()); + // Log errors, if any if (result.errors()) { logger.error("Bulk had errors"); diff --git a/x-pack/plugins/serverless_search/public/application/constants.ts b/x-pack/plugins/serverless_search/public/application/constants.ts index 6c2f9775c4e04..df8d2fb1ebbc7 100644 --- a/x-pack/plugins/serverless_search/public/application/constants.ts +++ b/x-pack/plugins/serverless_search/public/application/constants.ts @@ -9,3 +9,7 @@ export const API_KEY_PLACEHOLDER = 'your_api_key'; export const ELASTICSEARCH_URL_PLACEHOLDER = 'https://your_deployment_url'; export const CLOUD_ID_PLACEHOLDER = '<CLOUD_ID>'; export const INDEX_NAME_PLACEHOLDER = 'index_name'; + +// Paths +export const BASE_CONNECTORS_PATH = 'connectors'; +export const EDIT_CONNECTOR_PATH = `${BASE_CONNECTORS_PATH}/:id`; diff --git a/x-pack/plugins/serverless_search/public/application/hooks/api/use_create_connector.tsx b/x-pack/plugins/serverless_search/public/application/hooks/api/use_create_connector.tsx index fc9c74b94b84b..fc70e0044529f 100644 --- a/x-pack/plugins/serverless_search/public/application/hooks/api/use_create_connector.tsx +++ b/x-pack/plugins/serverless_search/public/application/hooks/api/use_create_connector.tsx @@ -8,7 +8,7 @@ import { useEffect } from 'react'; import { generatePath } from 'react-router-dom'; import { useMutation } from '@tanstack/react-query'; import { Connector } from '@kbn/search-connectors'; -import { EDIT_CONNECTOR_PATH } from '../../components/connectors_router'; +import { EDIT_CONNECTOR_PATH } from '../../constants'; import { useKibanaServices } from '../use_kibana'; export const useCreateConnector = () => { @@ -32,9 +32,13 @@ export const useCreateConnector = () => { useEffect(() => { if (isSuccess) { - navigateToUrl(generatePath(EDIT_CONNECTOR_PATH, { id: connector?.id || '' })); + navigateToUrl( + http.basePath.prepend( + `/app/${generatePath(EDIT_CONNECTOR_PATH, { id: connector?.id || '' })}` + ) + ); } - }, [connector, isSuccess, navigateToUrl]); + }, [connector, isSuccess, navigateToUrl, http.basePath]); const createConnector = () => mutate(); return { createConnector, isLoading }; diff --git a/x-pack/plugins/serverless_search/public/application/hooks/api/use_index.tsx b/x-pack/plugins/serverless_search/public/application/hooks/api/use_index.tsx new file mode 100644 index 0000000000000..3ea8ea1588ba5 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/hooks/api/use_index.tsx @@ -0,0 +1,21 @@ +/* + * 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 { useQuery } from '@tanstack/react-query'; + +import { FetchIndexResult } from '../../../../common/types'; +import { useKibanaServices } from '../use_kibana'; + +export const useIndex = (id: string) => { + const { http } = useKibanaServices(); + const queryKey = ['fetchIndex', id]; + const result = useQuery({ + queryKey, + queryFn: () => http.fetch<FetchIndexResult>(`/internal/serverless_search/index/${id}`), + }); + return { queryKey, ...result }; +}; diff --git a/x-pack/plugins/serverless_search/public/plugin.ts b/x-pack/plugins/serverless_search/public/plugin.ts index f82af8390c9fc..6c6328931915e 100644 --- a/x-pack/plugins/serverless_search/public/plugin.ts +++ b/x-pack/plugins/serverless_search/public/plugin.ts @@ -15,7 +15,8 @@ import { import { i18n } from '@kbn/i18n'; import { appIds } from '@kbn/management-cards-navigation'; import { AuthenticatedUser } from '@kbn/security-plugin/common'; -import { createIndexMappingsDocsLinkContent as createIndexMappingsContent } from './application/components/index_mappings_docs_link'; +import { createIndexMappingsDocsLinkContent as createIndexMappingsContent } from './application/components/index_management/index_mappings_docs_link'; +import { createIndexOverviewContent } from './application/components/index_management/index_overview_content'; import { createServerlessSearchSideNavComponent as createComponent } from './layout/nav'; import { docLinks } from '../common/doc_links'; import { @@ -24,7 +25,7 @@ import { ServerlessSearchPluginStart, ServerlessSearchPluginStartDependencies, } from './types'; -import { createIndexOverviewContent } from './application/components/index_documents/documents_tab'; +import { createIndexDocumentsContent } from './application/components/index_documents/documents_tab'; export class ServerlessSearchPlugin implements @@ -98,9 +99,11 @@ export class ServerlessSearchPlugin }); indexManagement?.extensionsService.setIndexMappingsContent(createIndexMappingsContent(core)); indexManagement?.extensionsService.addIndexDetailsTab( + createIndexDocumentsContent(core, services) + ); + indexManagement?.extensionsService.setIndexOverviewContent( createIndexOverviewContent(core, services) ); - return {}; } diff --git a/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.test.ts b/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.test.ts new file mode 100644 index 0000000000000..88edecd4cfd9d --- /dev/null +++ b/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.test.ts @@ -0,0 +1,142 @@ +/* + * 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. + */ + +jest.mock('@kbn/search-connectors', () => ({ + fetchConnectorByIndexName: jest.fn(), +})); + +import { ByteSizeValue } from '@kbn/config-schema'; +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { fetchConnectorByIndexName } from '@kbn/search-connectors'; + +import { fetchIndex } from './fetch_index'; + +describe('fetch index lib function', () => { + const mockClient = { + indices: { + get: jest.fn(), + stats: jest.fn(), + }, + count: jest.fn(), + }; + const client = () => mockClient as unknown as ElasticsearchClient; + + const indexName = 'search-regular-index'; + const regularIndexResponse = { + 'search-regular-index': { + aliases: {}, + }, + }; + const regularIndexStatsResponse = { + indices: { + 'search-regular-index': { + health: 'green', + size: new ByteSizeValue(108000).toString(), + status: 'open', + total: { + docs: { + count: 100, + deleted: 0, + }, + store: { + size_in_bytes: 108000, + }, + }, + uuid: '83a81e7e-5955-4255-b008-5d6961203f57', + }, + }, + }; + const indexCountResponse = { + count: 100, + }; + const indexConnector = { + foo: 'foo', + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return index if all client calls succeed', () => { + mockClient.indices.get.mockResolvedValue({ ...regularIndexResponse }); + mockClient.indices.stats.mockResolvedValue(regularIndexStatsResponse); + mockClient.count.mockResolvedValue(indexCountResponse); + (fetchConnectorByIndexName as unknown as jest.Mock).mockResolvedValue(indexConnector); + + expect(fetchIndex(client(), indexName)).resolves.toMatchObject({ + index: { + aliases: {}, + count: 100, + connector: indexConnector, + stats: regularIndexStatsResponse.indices[indexName], + }, + }); + }); + + it('should throw an error if get index rejects', () => { + const expectedError = new Error('Boom!'); + + mockClient.indices.get.mockRejectedValue(expectedError); + mockClient.indices.stats.mockResolvedValue(regularIndexStatsResponse); + mockClient.count.mockResolvedValue(indexCountResponse); + (fetchConnectorByIndexName as unknown as jest.Mock).mockResolvedValue(indexConnector); + + expect(fetchIndex(client(), indexName)).rejects.toEqual(expectedError); + }); + + it('should return partial data if index stats rejects', () => { + const expectedError = new Error('Boom!'); + + mockClient.indices.get.mockResolvedValue({ ...regularIndexResponse }); + mockClient.indices.stats.mockRejectedValue(expectedError); + mockClient.count.mockResolvedValue(indexCountResponse); + (fetchConnectorByIndexName as unknown as jest.Mock).mockResolvedValue(indexConnector); + + expect(fetchIndex(client(), indexName)).resolves.toMatchObject({ + index: { + aliases: {}, + count: 100, + connector: indexConnector, + }, + }); + }); + + it('should return partial data if index count rejects', () => { + const expectedError = new Error('Boom!'); + + mockClient.indices.get.mockResolvedValue({ ...regularIndexResponse }); + mockClient.indices.stats.mockResolvedValue(regularIndexStatsResponse); + mockClient.count.mockRejectedValue(expectedError); + (fetchConnectorByIndexName as unknown as jest.Mock).mockResolvedValue(indexConnector); + + expect(fetchIndex(client(), indexName)).resolves.toMatchObject({ + index: { + aliases: {}, + count: 0, + connector: indexConnector, + stats: regularIndexStatsResponse.indices[indexName], + }, + }); + }); + + it('should return partial data if fetch connector rejects', () => { + const expectedError = new Error('Boom!'); + + mockClient.indices.get.mockResolvedValue({ ...regularIndexResponse }); + mockClient.indices.stats.mockResolvedValue(regularIndexStatsResponse); + mockClient.count.mockResolvedValue(indexCountResponse); + (fetchConnectorByIndexName as unknown as jest.Mock).mockRejectedValue(expectedError); + + expect(fetchIndex(client(), indexName)).resolves.toMatchObject({ + index: { + aliases: {}, + count: 100, + stats: regularIndexStatsResponse.indices[indexName], + }, + }); + }); +}); diff --git a/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.ts b/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.ts new file mode 100644 index 0000000000000..000eb1c13ea0a --- /dev/null +++ b/x-pack/plugins/serverless_search/server/lib/indices/fetch_index.ts @@ -0,0 +1,45 @@ +/* + * 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 { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { fetchConnectorByIndexName } from '@kbn/search-connectors'; + +import { FetchIndexResult } from '../../../common/types'; + +export async function fetchIndex( + client: ElasticsearchClient, + indexName: string +): Promise<FetchIndexResult | undefined> { + const [indexDataResult, indexStatsResult, indexCountResult, connectorResult] = + await Promise.allSettled([ + client.indices.get({ index: indexName }), + client.indices.stats({ index: indexName }), + client.count({ index: indexName }), + fetchConnectorByIndexName(client, indexName), + ]); + if (indexDataResult.status === 'rejected') { + throw indexDataResult.reason; + } + const indexData = indexDataResult.value; + if (!indexData || !indexData[indexName]) return undefined; + + const index = indexData[indexName]; + const count = indexCountResult.status === 'fulfilled' ? indexCountResult.value.count : 0; + const connector = connectorResult.status === 'fulfilled' ? connectorResult.value : undefined; + const stats = + indexStatsResult.status === 'fulfilled' + ? indexStatsResult.value.indices?.[indexName] + : undefined; + return { + index: { + ...index, + count, + connector, + stats, + }, + }; +} diff --git a/x-pack/plugins/serverless_search/server/routes/indices_routes.ts b/x-pack/plugins/serverless_search/server/routes/indices_routes.ts index 7f165f13218f1..1e54a64642115 100644 --- a/x-pack/plugins/serverless_search/server/routes/indices_routes.ts +++ b/x-pack/plugins/serverless_search/server/routes/indices_routes.ts @@ -11,6 +11,7 @@ import { schema } from '@kbn/config-schema'; import { fetchSearchResults } from '@kbn/search-index-documents/lib'; import { DEFAULT_DOCS_PER_PAGE } from '@kbn/search-index-documents/types'; import { fetchIndices } from '../lib/indices/fetch_indices'; +import { fetchIndex } from '../lib/indices/fetch_index'; import { RouteDependencies } from '../plugin'; export const registerIndicesRoutes = ({ router, security }: RouteDependencies) => { @@ -75,6 +76,27 @@ export const registerIndicesRoutes = ({ router, security }: RouteDependencies) = } ); + router.get( + { + path: '/internal/serverless_search/index/{indexName}', + validate: { + params: schema.object({ + indexName: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const body = await fetchIndex(client.asCurrentUser, request.params.indexName); + return body + ? response.ok({ + body, + headers: { 'content-type': 'application/json' }, + }) + : response.notFound(); + } + ); + router.post( { path: '/internal/serverless_search/indices/{index_name}/search', diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/executor.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/executor.ts index d0d440c769487..7d8d2df355c16 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/executor.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/executor.ts @@ -15,6 +15,7 @@ import { ALERT_URL, } from '@kbn/rule-data-utils'; +import { AlertsClientError } from '@kbn/alerting-plugin/server'; import { ComparatorFns } from '../../../common'; import { addMessages, @@ -48,10 +49,13 @@ export async function executor(core: CoreSetup, options: ExecutorOptions<EsQuery getTimeRange, } = options; const { alertsClient, scopedClusterClient, searchSourceClient, share, dataViews } = services; + if (!alertsClient) { + throw new AlertsClientError(); + } const currentTimestamp = new Date().toISOString(); const publicBaseUrl = core.http.basePath.publicBaseUrl ?? ''; const spacePrefix = spaceId !== 'default' ? `/s/${spaceId}` : ''; - const alertLimit = alertsClient?.getAlertLimitValue(); + const alertLimit = alertsClient.getAlertLimitValue(); const compareFn = ComparatorFns.get(params.thresholdComparator); if (compareFn == null) { throw new Error(getInvalidComparatorError(params.thresholdComparator)); @@ -155,7 +159,7 @@ export async function executor(core: CoreSetup, options: ExecutorOptions<EsQuery const id = alertId === UngroupedGroupId && !isGroupAgg ? ConditionMetAlertInstanceId : alertId; - alertsClient!.report({ + alertsClient.report({ id, actionGroup: ActionGroupId, state: { latestTimestamp, dateStart, dateEnd }, @@ -179,9 +183,9 @@ export async function executor(core: CoreSetup, options: ExecutorOptions<EsQuery } } } - alertsClient!.setAlertLimitReached(parsedResults.truncated); + alertsClient.setAlertLimitReached(parsedResults.truncated); - const { getRecoveredAlerts } = alertsClient!; + const { getRecoveredAlerts } = alertsClient; for (const recoveredAlert of getRecoveredAlerts()) { const alertId = recoveredAlert.alert.getId(); const baseRecoveryContext: EsQueryRuleActionContext = { @@ -208,7 +212,7 @@ export async function executor(core: CoreSetup, options: ExecutorOptions<EsQuery ...(isGroupAgg ? { group: alertId } : {}), index, }); - alertsClient?.setAlertData({ + alertsClient.setAlertData({ id: alertId, context: recoveryContext, payload: { diff --git a/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts index 72c7539e6b726..408f137c731ae 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts @@ -17,6 +17,7 @@ import { ALERT_REASON, STACK_ALERTS_FEATURE_ID, } from '@kbn/rule-data-utils'; +import { AlertsClientError } from '@kbn/alerting-plugin/server'; import { ALERT_EVALUATION_CONDITIONS, ALERT_TITLE, STACK_ALERTS_AAD_CONFIG } from '..'; import { ComparatorFns, getComparatorScript, getHumanReadableComparator } from '../../../common'; import { ActionContext, BaseActionContext, addMessages } from './action_context'; @@ -229,8 +230,11 @@ export function getRuleType( getTimeRange, } = options; const { alertsClient, scopedClusterClient } = services; + if (!alertsClient) { + throw new AlertsClientError(); + } - const alertLimit = alertsClient!.getAlertLimitValue(); + const alertLimit = alertsClient.getAlertLimitValue(); const compareFn = ComparatorFns.get(params.thresholdComparator); if (compareFn == null) { @@ -326,7 +330,7 @@ export function getRuleType( }; const actionContext = addMessages(name, baseContext, params); - alertsClient!.report({ + alertsClient.report({ id: alertId, actionGroup: ActionGroupId, state: {}, @@ -341,11 +345,11 @@ export function getRuleType( logger.debug(`scheduled actionGroup: ${JSON.stringify(actionContext)}`); } - alertsClient!.setAlertLimitReached(result.truncated); + alertsClient.setAlertLimitReached(result.truncated); - const { getRecoveredAlerts } = services.alertFactory.done(); + const { getRecoveredAlerts } = alertsClient; for (const recoveredAlert of getRecoveredAlerts()) { - const alertId = recoveredAlert.getId(); + const alertId = recoveredAlert.alert.getId(); logger.debug(`setting context for recovered alert ${alertId}`); const baseContext: BaseActionContext = { date: dateEnd, @@ -356,7 +360,7 @@ export function getRuleType( )} ${params.threshold.join(' and ')}`, }; const recoveryContext = addMessages(name, baseContext, params, true); - alertsClient?.setAlertData({ + alertsClient.setAlertData({ id: alertId, context: recoveryContext, payload: { diff --git a/x-pack/plugins/stack_connectors/public/connector_types/bedrock/params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/bedrock/params.tsx index b880e388b9f91..7678f52321dd3 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/bedrock/params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/bedrock/params.tsx @@ -67,7 +67,7 @@ const BedrockParamsFields: React.FunctionComponent<ActionParamsProps<BedrockActi paramsProperty={'body'} inputTargetValue={body} label={i18n.BODY} - aria-label={i18n.BODY_DESCRIPTION} + ariaLabel={i18n.BODY_DESCRIPTION} errors={errors.body as string[]} onDocumentsChange={(json: string) => { editSubActionParams({ body: json }); @@ -77,7 +77,7 @@ const BedrockParamsFields: React.FunctionComponent<ActionParamsProps<BedrockActi editSubActionParams({ body: '' }); } }} - data-test-subj="bedrock-bodyJsonEditor" + dataTestSubj="bedrock-bodyJsonEditor" /> <EuiFormRow fullWidth diff --git a/x-pack/plugins/stack_connectors/public/connector_types/cases_webhook/steps/create.tsx b/x-pack/plugins/stack_connectors/public/connector_types/cases_webhook/steps/create.tsx index ffa72576feb69..1d80ebd65daa4 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/cases_webhook/steps/create.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/cases_webhook/steps/create.tsx @@ -96,9 +96,9 @@ export const CreateStep: FunctionComponent<Props> = ({ display, readOnly }) => ( componentProps={{ euiCodeEditorProps: { isReadOnly: readOnly, - 'data-test-subj': 'webhookCreateIncidentJson', ['aria-label']: i18n.CODE_EDITOR, }, + dataTestSubj: 'webhookCreateIncidentJson', messageVariables: casesVars, paramsProperty: 'createIncidentJson', buttonTitle: i18n.ADD_CASES_VARIABLE, diff --git a/x-pack/plugins/stack_connectors/public/connector_types/cases_webhook/steps/update.tsx b/x-pack/plugins/stack_connectors/public/connector_types/cases_webhook/steps/update.tsx index a140ecbc6a221..e7a37d415f4af 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/cases_webhook/steps/update.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/cases_webhook/steps/update.tsx @@ -104,9 +104,9 @@ export const UpdateStep: FunctionComponent<Props> = ({ display, readOnly }) => ( euiCodeEditorProps: { height: '200px', isReadOnly: readOnly, - 'data-test-subj': 'webhookUpdateIncidentJson', ['aria-label']: i18n.CODE_EDITOR, }, + dataTestSubj: 'webhookUpdateIncidentJson', messageVariables: [...casesVars, ...urlVars], paramsProperty: 'updateIncidentJson', buttonTitle: i18n.ADD_CASES_VARIABLE, @@ -192,9 +192,9 @@ export const UpdateStep: FunctionComponent<Props> = ({ display, readOnly }) => ( euiCodeEditorProps: { height: '200px', isReadOnly: readOnly, - 'data-test-subj': 'webhookCreateCommentJson', ['aria-label']: i18n.CODE_EDITOR, }, + dataTestSubj: 'webhookCreateCommentJson', messageVariables: [...commentVars, ...urlVars], paramsProperty: 'createCommentJson', buttonTitle: i18n.ADD_CASES_VARIABLE, diff --git a/x-pack/plugins/stack_connectors/public/connector_types/d3security/params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/d3security/params.tsx index 4785399c65f2f..605afadb5af2b 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/d3security/params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/d3security/params.tsx @@ -89,7 +89,7 @@ const D3ParamsFields: React.FunctionComponent<ActionParamsProps<D3SecurityAction label={i18n.translate('xpack.stackConnectors.components.d3security.bodyFieldLabel', { defaultMessage: 'Body', })} - aria-label={i18n.translate( + ariaLabel={i18n.translate( 'xpack.stackConnectors.components.d3security.bodyCodeEditorAriaLabel', { defaultMessage: 'Code editor', @@ -104,6 +104,7 @@ const D3ParamsFields: React.FunctionComponent<ActionParamsProps<D3SecurityAction editSubActionParams({ body: '' }); } }} + dataTestSubj="actionJsonEditor" /> </> ); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/es_index/es_index_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/es_index/es_index_params.tsx index fc51ae0ba1ccf..b9b9ef8e7d41f 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/es_index/es_index_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/es_index/es_index_params.tsx @@ -196,10 +196,10 @@ export const IndexParamsFields = ({ <JsonEditorWithMessageVariables messageVariables={messageVariables} paramsProperty={'documents'} - data-test-subj="documentToIndex" + dataTestSubj="documentToIndex" inputTargetValue={documentToIndex} label={documentsFieldLabel} - aria-label={i18n.translate('xpack.stackConnectors.components.index.jsonDocAriaLabel', { + ariaLabel={i18n.translate('xpack.stackConnectors.components.index.jsonDocAriaLabel', { defaultMessage: 'Code editor', })} errors={errors.documents as string[]} diff --git a/x-pack/plugins/stack_connectors/public/connector_types/openai/params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/openai/params.tsx index 0f129f05975f7..ad4398482d2c8 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/openai/params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/openai/params.tsx @@ -67,7 +67,7 @@ const ParamsFields: React.FunctionComponent<ActionParamsProps<ActionParams>> = ( label={i18n.translate('xpack.stackConnectors.components.genAi.bodyFieldLabel', { defaultMessage: 'Body', })} - aria-label={i18n.translate('xpack.stackConnectors.components.genAi.bodyCodeEditorAriaLabel', { + ariaLabel={i18n.translate('xpack.stackConnectors.components.genAi.bodyCodeEditorAriaLabel', { defaultMessage: 'Code editor', })} errors={errors.body as string[]} @@ -79,7 +79,7 @@ const ParamsFields: React.FunctionComponent<ActionParamsProps<ActionParams>> = ( editSubActionParams({ body: '' }); } }} - data-test-subj="genAi-bodyJsonEditor" + dataTestSubj="genAi-bodyJsonEditor" /> ); }; diff --git a/x-pack/plugins/stack_connectors/public/connector_types/opsgenie/create_alert/json_editor.tsx b/x-pack/plugins/stack_connectors/public/connector_types/opsgenie/create_alert/json_editor.tsx index 17054b00dc920..2e352235729c1 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/opsgenie/create_alert/json_editor.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/opsgenie/create_alert/json_editor.tsx @@ -83,10 +83,11 @@ const JsonEditorComponent: React.FC<JsonEditorProps> = ({ messageVariables={messageVariables} paramsProperty={'subActionParams'} inputTargetValue={jsonEditorValue} - aria-label={i18n.JSON_EDITOR_ARIA} + ariaLabel={i18n.JSON_EDITOR_ARIA} onDocumentsChange={onAdvancedEditorChange} errors={jsonEditorErrors} label={i18n.ALERT_FIELDS_LABEL} + dataTestSubj="actionJsonEditor" /> ); }; diff --git a/x-pack/plugins/stack_connectors/public/connector_types/pagerduty/pagerduty_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/pagerduty/pagerduty_params.tsx index 08d92a0f4ad3e..7c9d74de5e571 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/pagerduty/pagerduty_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/pagerduty/pagerduty_params.tsx @@ -373,7 +373,7 @@ const PagerDutyParamsFields: React.FunctionComponent<ActionParamsProps<PagerDuty editAction('customDetails', '', index); } }} - data-test-subj="customDetailsJsonEditor" + dataTestSubj="customDetailsJsonEditor" /> </EuiFormRow> <LinksList diff --git a/x-pack/plugins/stack_connectors/public/connector_types/resilient/resilient_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/resilient/resilient_params.tsx index 04a0ba4f85ec4..fb53e3567186c 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/resilient/resilient_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/resilient/resilient_params.tsx @@ -11,6 +11,7 @@ import { EuiComboBox, EuiSelect, EuiSpacer, + EuiText, EuiTitle, EuiComboBoxOptionOption, EuiSelectOption, @@ -171,7 +172,7 @@ const ResilientParamsFields: React.FunctionComponent<ActionParamsProps<Resilient fullWidth label={i18n.translate( 'xpack.stackConnectors.components.resilient.urgencySelectFieldLabel', - { defaultMessage: 'Incident Type' } + { defaultMessage: 'Incident type' } )} > <EuiComboBox @@ -214,8 +215,13 @@ const ResilientParamsFields: React.FunctionComponent<ActionParamsProps<Resilient incident.name !== undefined } label={i18n.translate('xpack.stackConnectors.components.resilient.nameFieldLabel', { - defaultMessage: 'Name (required)', + defaultMessage: 'Name', })} + labelAppend={ + <EuiText size="xs" color="subdued"> + Required + </EuiText> + } > <TextFieldWithMessageVariables index={index} diff --git a/x-pack/plugins/stack_connectors/public/connector_types/resilient/translations.ts b/x-pack/plugins/stack_connectors/public/connector_types/resilient/translations.ts index d049ba633e699..5945112940914 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/resilient/translations.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/resilient/translations.ts @@ -21,14 +21,14 @@ export const ORG_ID_LABEL = i18n.translate('xpack.stackConnectors.components.res export const API_KEY_ID_LABEL = i18n.translate( 'xpack.stackConnectors.components.resilient.apiKeyId', { - defaultMessage: 'API Key ID', + defaultMessage: 'API key ID', } ); export const API_KEY_SECRET_LABEL = i18n.translate( 'xpack.stackConnectors.components.resilient.apiKeySecret', { - defaultMessage: 'API Key Secret', + defaultMessage: 'API key secret', } ); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.tsx index 5f88656d94eff..a0f4c573c0b07 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.tsx @@ -307,7 +307,7 @@ const TinesParamsFields: React.FunctionComponent<ActionParamsProps<TinesExecuteA paramsProperty={'body'} inputTargetValue={body} label={i18n.BODY_LABEL} - aria-label={i18n.BODY_ARIA_LABEL} + ariaLabel={i18n.BODY_ARIA_LABEL} errors={errors.body as string[]} onDocumentsChange={(json: string) => { editSubActionParams({ body: json }); @@ -317,7 +317,7 @@ const TinesParamsFields: React.FunctionComponent<ActionParamsProps<TinesExecuteA editSubActionParams({ body: '' }); } }} - data-test-subj="tines-bodyJsonEditor" + dataTestSubj="tines-bodyJsonEditor" /> </EuiFlexItem> )} diff --git a/x-pack/plugins/stack_connectors/public/connector_types/torq/torq_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/torq/torq_params.tsx index e6cb9880c3ef2..e5847717a74a2 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/torq/torq_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/torq/torq_params.tsx @@ -27,7 +27,7 @@ const TorqParamsFields: React.FunctionComponent<ActionParamsProps<TorqActionPara paramsProperty={'body'} inputTargetValue={body} label={i18n.BODY_FIELD_LABEL} - aria-label={i18n.BODY_FIELD_ARIA_LABEL} + ariaLabel={i18n.BODY_FIELD_ARIA_LABEL} errors={errors.body as string[]} onDocumentsChange={(json: string) => { editAction('body', json, index); @@ -37,6 +37,7 @@ const TorqParamsFields: React.FunctionComponent<ActionParamsProps<TorqActionPara editAction('body', '', index); } }} + dataTestSubj="actionJsonEditor" euiCodeEditorProps={{ options: { renderValidationDecorations: body && errors?.body?.length ? 'on' : 'off', diff --git a/x-pack/plugins/stack_connectors/public/connector_types/webhook/webhook_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/webhook/webhook_params.tsx index 27ea296928352..740b3081a6c1f 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/webhook/webhook_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/webhook/webhook_params.tsx @@ -27,7 +27,7 @@ const WebhookParamsFields: React.FunctionComponent<ActionParamsProps<WebhookActi label={i18n.translate('xpack.stackConnectors.components.webhook.bodyFieldLabel', { defaultMessage: 'Body', })} - aria-label={i18n.translate( + ariaLabel={i18n.translate( 'xpack.stackConnectors.components.webhook.bodyCodeEditorAriaLabel', { defaultMessage: 'Code editor', @@ -42,6 +42,7 @@ const WebhookParamsFields: React.FunctionComponent<ActionParamsProps<WebhookActi editAction('body', '', index); } }} + dataTestSubj="actionJsonEditor" /> ); }; diff --git a/x-pack/plugins/task_manager/common/constants.ts b/x-pack/plugins/task_manager/common/constants.ts new file mode 100644 index 0000000000000..68d8f5f5519ba --- /dev/null +++ b/x-pack/plugins/task_manager/common/constants.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum TaskErrorSource { + FRAMEWORK = 'framework', + USER = 'user', +} diff --git a/x-pack/plugins/task_manager/common/index.ts b/x-pack/plugins/task_manager/common/index.ts new file mode 100644 index 0000000000000..04f9dbcc10bb4 --- /dev/null +++ b/x-pack/plugins/task_manager/common/index.ts @@ -0,0 +1,8 @@ +/* + * 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 { TaskErrorSource } from './constants'; diff --git a/x-pack/plugins/task_manager/server/lib/retryable_bulk_update.ts b/x-pack/plugins/task_manager/server/lib/retryable_bulk_update.ts index d50fb88d909c3..1232ab7ae9911 100644 --- a/x-pack/plugins/task_manager/server/lib/retryable_bulk_update.ts +++ b/x-pack/plugins/task_manager/server/lib/retryable_bulk_update.ts @@ -17,7 +17,7 @@ export interface RetryableBulkUpdateOpts { taskIds: string[]; getTasks: (taskIds: string[]) => Promise<BulkGetResult>; filter: (task: ConcreteTaskInstance) => boolean; - map: (task: ConcreteTaskInstance) => ConcreteTaskInstance; + map: (task: ConcreteTaskInstance, i: number, arr: ConcreteTaskInstance[]) => ConcreteTaskInstance; store: TaskStore; validate: boolean; } diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts index 5becffa4e302c..afcd4884f7777 100644 --- a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts +++ b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts @@ -425,6 +425,8 @@ describe('createAggregator', () => { not_timed_out: 0, total: 0, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, }, }); @@ -436,10 +438,24 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -451,10 +467,24 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -466,11 +496,31 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -482,11 +532,31 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -498,11 +568,31 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -514,11 +604,31 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -530,12 +640,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -547,12 +683,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -564,12 +726,38 @@ describe('createAggregator', () => { not_timed_out: 5, total: 5, delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 3, total: 3 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -581,12 +769,38 @@ describe('createAggregator', () => { not_timed_out: 5, total: 5, delay: { counts: [4, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 3, total: 3 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -598,13 +812,45 @@ describe('createAggregator', () => { not_timed_out: 6, total: 6, delay: { counts: [4, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 3, not_timed_out: 4, total: 4 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -616,13 +862,45 @@ describe('createAggregator', () => { not_timed_out: 6, total: 6, delay: { counts: [4, 2, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 3, not_timed_out: 4, total: 4 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -634,13 +912,45 @@ describe('createAggregator', () => { not_timed_out: 7, total: 7, delay: { counts: [4, 2, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 4, not_timed_out: 5, total: 5 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 4, + not_timed_out: 5, + total: 5, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -652,13 +962,45 @@ describe('createAggregator', () => { not_timed_out: 7, total: 7, delay: { counts: [5, 2, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 4, not_timed_out: 5, total: 5 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 4, + not_timed_out: 5, + total: 5, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -670,13 +1012,45 @@ describe('createAggregator', () => { not_timed_out: 8, total: 8, delay: { counts: [5, 2, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 2, + user_errors: 0, }, by_type: { - alerting: { success: 4, not_timed_out: 6, total: 6 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 3, not_timed_out: 5, total: 5 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 4, + not_timed_out: 6, + total: 6, + framework_errors: 2, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 5, + total: 5, + framework_errors: 2, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -688,13 +1062,45 @@ describe('createAggregator', () => { not_timed_out: 8, total: 8, delay: { counts: [6, 2, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 2, + user_errors: 0, }, by_type: { - alerting: { success: 4, not_timed_out: 6, total: 6 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 3, not_timed_out: 5, total: 5 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 4, + not_timed_out: 6, + total: 6, + framework_errors: 2, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 5, + total: 5, + framework_errors: 2, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -706,13 +1112,45 @@ describe('createAggregator', () => { not_timed_out: 9, total: 9, delay: { counts: [6, 2, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 2, + user_errors: 0, }, by_type: { - alerting: { success: 5, not_timed_out: 7, total: 7 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 4, not_timed_out: 6, total: 6 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 5, + not_timed_out: 7, + total: 7, + framework_errors: 2, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 4, + not_timed_out: 6, + total: 6, + framework_errors: 2, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -724,13 +1162,45 @@ describe('createAggregator', () => { not_timed_out: 9, total: 9, delay: { counts: [7, 2, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 2, + user_errors: 0, }, by_type: { - alerting: { success: 5, not_timed_out: 7, total: 7 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 4, not_timed_out: 6, total: 6 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 5, + not_timed_out: 7, + total: 7, + framework_errors: 2, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 4, + not_timed_out: 6, + total: 6, + framework_errors: 2, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -742,15 +1212,59 @@ describe('createAggregator', () => { not_timed_out: 10, total: 10, delay: { counts: [7, 2, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 3, + user_errors: 0, }, by_type: { - actions: { success: 0, not_timed_out: 1, total: 1 }, - alerting: { success: 5, not_timed_out: 7, total: 7 }, - 'actions:webhook': { success: 0, not_timed_out: 1, total: 1 }, - 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 4, not_timed_out: 6, total: 6 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + actions: { + success: 0, + not_timed_out: 1, + total: 1, + framework_errors: 1, + user_errors: 0, + }, + alerting: { + success: 5, + not_timed_out: 7, + total: 7, + framework_errors: 2, + user_errors: 0, + }, + 'actions:webhook': { + success: 0, + not_timed_out: 1, + total: 1, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 4, + not_timed_out: 6, + total: 6, + framework_errors: 2, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -820,6 +1334,8 @@ describe('createAggregator', () => { not_timed_out: 0, total: 0, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, }, }); @@ -831,10 +1347,24 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -846,10 +1376,24 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -861,11 +1405,31 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -877,11 +1441,31 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -893,11 +1477,31 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -909,11 +1513,31 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -925,12 +1549,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -942,12 +1592,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -959,12 +1635,38 @@ describe('createAggregator', () => { not_timed_out: 5, total: 5, delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 3, total: 3 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -977,12 +1679,38 @@ describe('createAggregator', () => { not_timed_out: 0, total: 0, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 0, not_timed_out: 0, total: 0 }, - 'alerting:example': { success: 0, not_timed_out: 0, total: 0 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -994,12 +1722,38 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1011,12 +1765,38 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1028,12 +1808,38 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1045,12 +1851,38 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1062,12 +1894,38 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 3, total: 3 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1079,12 +1937,38 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [3, 1], values: [10, 20] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 3, total: 3 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1096,12 +1980,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [3, 1], values: [10, 20] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 3, not_timed_out: 4, total: 4 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1113,12 +2023,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [4, 1], values: [10, 20] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 3, not_timed_out: 4, total: 4 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1130,14 +2066,52 @@ describe('createAggregator', () => { not_timed_out: 5, total: 5, delay: { counts: [4, 1], values: [10, 20] }, + framework_errors: 2, + user_errors: 0, }, by_type: { - actions: { success: 0, not_timed_out: 1, total: 1 }, - alerting: { success: 3, not_timed_out: 4, total: 4 }, - 'actions:webhook': { success: 0, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + actions: { + success: 0, + not_timed_out: 1, + total: 1, + framework_errors: 1, + user_errors: 0, + }, + alerting: { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + 'actions:webhook': { + success: 0, + not_timed_out: 1, + total: 1, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1215,6 +2189,8 @@ describe('createAggregator', () => { not_timed_out: 0, total: 0, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, }, }); @@ -1226,10 +2202,24 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1241,10 +2231,24 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1256,11 +2260,31 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1272,11 +2296,31 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1288,11 +2332,31 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1304,11 +2368,31 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1320,12 +2404,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1337,12 +2447,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1354,12 +2490,38 @@ describe('createAggregator', () => { not_timed_out: 5, total: 5, delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 3, total: 3 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 1, not_timed_out: 1, total: 1 }, - telemetry: { success: 1, not_timed_out: 1, total: 1 }, + alerting: { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1372,12 +2534,38 @@ describe('createAggregator', () => { not_timed_out: 0, total: 0, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 0, not_timed_out: 0, total: 0 }, - 'alerting:example': { success: 0, not_timed_out: 0, total: 0 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1389,12 +2577,38 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1], values: [10] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1406,12 +2620,38 @@ describe('createAggregator', () => { not_timed_out: 1, total: 1, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 1, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1423,12 +2663,38 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [1, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1440,12 +2706,38 @@ describe('createAggregator', () => { not_timed_out: 2, total: 2, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 0, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 2, total: 2 }, - 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1457,12 +2749,38 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [2, 1], values: [10, 20] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 3, total: 3 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1474,12 +2792,38 @@ describe('createAggregator', () => { not_timed_out: 3, total: 3, delay: { counts: [3, 1], values: [10, 20] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 2, not_timed_out: 3, total: 3 }, - 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 2, + not_timed_out: 3, + total: 3, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1491,12 +2835,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [3, 1], values: [10, 20] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 3, not_timed_out: 4, total: 4 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1508,12 +2878,38 @@ describe('createAggregator', () => { not_timed_out: 4, total: 4, delay: { counts: [4, 1], values: [10, 20] }, + framework_errors: 1, + user_errors: 0, }, by_type: { - alerting: { success: 3, not_timed_out: 4, total: 4 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + alerting: { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); @@ -1525,14 +2921,52 @@ describe('createAggregator', () => { not_timed_out: 5, total: 5, delay: { counts: [4, 1], values: [10, 20] }, + framework_errors: 2, + user_errors: 0, }, by_type: { - actions: { success: 0, not_timed_out: 1, total: 1 }, - alerting: { success: 3, not_timed_out: 4, total: 4 }, - 'actions:webhook': { success: 0, not_timed_out: 1, total: 1 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + actions: { + success: 0, + not_timed_out: 1, + total: 1, + framework_errors: 1, + user_errors: 0, + }, + alerting: { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + 'actions:webhook': { + success: 0, + not_timed_out: 1, + total: 1, + framework_errors: 1, + user_errors: 0, + }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 4, + framework_errors: 1, + user_errors: 0, + }, + report: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + telemetry: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, }, }, }); diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts index 628952619814d..83909112ba0ac 100644 --- a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts +++ b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts @@ -86,13 +86,27 @@ describe('TaskRunMetricsAggregator', () => { test('should correctly initialize', () => { expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [], values: [] } }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + delay: { counts: [], values: [] }, + }, }); }); test('should correctly return initialMetrics', () => { expect(taskRunMetricsAggregator.initialMetric()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [], values: [] } }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + delay: { counts: [], values: [] }, + }, by_type: {}, }); }); @@ -101,9 +115,16 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 2, not_timed_out: 2, total: 2, delay: { counts: [], values: [] } }, + overall: { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + delay: { counts: [], values: [] }, + }, by_type: { - telemetry: { success: 2, not_timed_out: 2, total: 2 }, + telemetry: { success: 2, not_timed_out: 2, total: 2, framework_errors: 0, user_errors: 0 }, }, }); }); @@ -111,7 +132,14 @@ describe('TaskRunMetricsAggregator', () => { test('should correctly process task manager runDelay stat', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskManagerStatEvent(3.343)); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [1], values: [10] } }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + delay: { counts: [1], values: [10] }, + }, }); }); @@ -120,7 +148,14 @@ describe('TaskRunMetricsAggregator', () => { getTaskManagerStatEvent(3.343, 'pollingDelay') ); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [], values: [] } }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + delay: { counts: [], values: [] }, + }, }); }); @@ -128,9 +163,16 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry', true)); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry', true)); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 2, not_timed_out: 0, total: 2, delay: { counts: [], values: [] } }, + overall: { + success: 2, + not_timed_out: 0, + total: 2, + framework_errors: 0, + user_errors: 0, + delay: { counts: [], values: [] }, + }, by_type: { - telemetry: { success: 2, not_timed_out: 0, total: 2 }, + telemetry: { success: 2, not_timed_out: 0, total: 2, framework_errors: 0, user_errors: 0 }, }, }); }); @@ -139,9 +181,16 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 2, total: 2, delay: { counts: [], values: [] } }, + overall: { + success: 0, + not_timed_out: 2, + total: 2, + framework_errors: 2, + user_errors: 0, + delay: { counts: [], values: [] }, + }, by_type: { - telemetry: { success: 0, not_timed_out: 2, total: 2 }, + telemetry: { success: 0, not_timed_out: 2, total: 2, framework_errors: 2, user_errors: 0 }, }, }); }); @@ -150,9 +199,16 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry', true)); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry', true)); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 2, delay: { counts: [], values: [] } }, + overall: { + success: 0, + not_timed_out: 0, + total: 2, + framework_errors: 2, + user_errors: 0, + delay: { counts: [], values: [] }, + }, by_type: { - telemetry: { success: 0, not_timed_out: 0, total: 2 }, + telemetry: { success: 0, not_timed_out: 0, total: 2, framework_errors: 2, user_errors: 0 }, }, }); }); @@ -163,10 +219,17 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report', true)); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 3, not_timed_out: 3, total: 4, delay: { counts: [], values: [] } }, + overall: { + success: 3, + not_timed_out: 3, + total: 4, + framework_errors: 1, + user_errors: 0, + delay: { counts: [], values: [] }, + }, by_type: { - report: { success: 2, not_timed_out: 1, total: 2 }, - telemetry: { success: 1, not_timed_out: 2, total: 2 }, + report: { success: 2, not_timed_out: 1, total: 2, framework_errors: 0, user_errors: 0 }, + telemetry: { success: 1, not_timed_out: 2, total: 2, framework_errors: 1, user_errors: 0 }, }, }); }); @@ -193,16 +256,47 @@ describe('TaskRunMetricsAggregator', () => { getTaskRunSuccessEvent('alerting:.index-threshold', true) ); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 11, not_timed_out: 12, total: 14, delay: { counts: [], values: [] } }, + overall: { + success: 11, + not_timed_out: 12, + total: 14, + framework_errors: 3, + user_errors: 0, + delay: { counts: [], values: [] }, + }, by_type: { - actions: { success: 3, not_timed_out: 3, total: 3 }, - 'actions:__email': { success: 1, not_timed_out: 1, total: 1 }, - 'actions:webhook': { success: 2, not_timed_out: 2, total: 2 }, - alerting: { success: 5, not_timed_out: 5, total: 7 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 5 }, - 'alerting:__index-threshold': { success: 2, not_timed_out: 1, total: 2 }, - report: { success: 2, not_timed_out: 2, total: 2 }, - telemetry: { success: 1, not_timed_out: 2, total: 2 }, + actions: { success: 3, not_timed_out: 3, total: 3, framework_errors: 0, user_errors: 0 }, + 'actions:__email': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'actions:webhook': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + alerting: { success: 5, not_timed_out: 5, total: 7, framework_errors: 2, user_errors: 0 }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 5, + framework_errors: 2, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 2, + not_timed_out: 1, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { success: 2, not_timed_out: 2, total: 2, framework_errors: 0, user_errors: 0 }, + telemetry: { success: 1, not_timed_out: 2, total: 2, framework_errors: 1, user_errors: 0 }, }, }); }); @@ -239,31 +333,88 @@ describe('TaskRunMetricsAggregator', () => { not_timed_out: 12, total: 14, delay: { counts: [3, 0, 1], values: [10, 20, 30] }, + framework_errors: 3, + user_errors: 0, }, by_type: { - actions: { success: 3, not_timed_out: 3, total: 3 }, - 'actions:__email': { success: 1, not_timed_out: 1, total: 1 }, - 'actions:webhook': { success: 2, not_timed_out: 2, total: 2 }, - alerting: { success: 5, not_timed_out: 5, total: 7 }, - 'alerting:example': { success: 3, not_timed_out: 4, total: 5 }, - 'alerting:__index-threshold': { success: 2, not_timed_out: 1, total: 2 }, - report: { success: 2, not_timed_out: 2, total: 2 }, - telemetry: { success: 1, not_timed_out: 2, total: 2 }, + actions: { success: 3, not_timed_out: 3, total: 3, framework_errors: 0, user_errors: 0 }, + 'actions:__email': { + success: 1, + not_timed_out: 1, + total: 1, + framework_errors: 0, + user_errors: 0, + }, + 'actions:webhook': { + success: 2, + not_timed_out: 2, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + alerting: { success: 5, not_timed_out: 5, total: 7, framework_errors: 2, user_errors: 0 }, + 'alerting:example': { + success: 3, + not_timed_out: 4, + total: 5, + framework_errors: 2, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 2, + not_timed_out: 1, + total: 2, + framework_errors: 0, + user_errors: 0, + }, + report: { success: 2, not_timed_out: 2, total: 2, framework_errors: 0, user_errors: 0 }, + telemetry: { success: 1, not_timed_out: 2, total: 2, framework_errors: 1, user_errors: 0 }, }, }); taskRunMetricsAggregator.reset(); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [], values: [] } }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + delay: { counts: [], values: [] }, + }, by_type: { - actions: { success: 0, not_timed_out: 0, total: 0 }, - 'actions:__email': { success: 0, not_timed_out: 0, total: 0 }, - 'actions:webhook': { success: 0, not_timed_out: 0, total: 0 }, - alerting: { success: 0, not_timed_out: 0, total: 0 }, - 'alerting:example': { success: 0, not_timed_out: 0, total: 0 }, - 'alerting:__index-threshold': { success: 0, not_timed_out: 0, total: 0 }, - report: { success: 0, not_timed_out: 0, total: 0 }, - telemetry: { success: 0, not_timed_out: 0, total: 0 }, + actions: { success: 0, not_timed_out: 0, total: 0, framework_errors: 0, user_errors: 0 }, + 'actions:__email': { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + 'actions:webhook': { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + alerting: { success: 0, not_timed_out: 0, total: 0, framework_errors: 0, user_errors: 0 }, + 'alerting:example': { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + 'alerting:__index-threshold': { + success: 0, + not_timed_out: 0, + total: 0, + framework_errors: 0, + user_errors: 0, + }, + report: { success: 0, not_timed_out: 0, total: 0, framework_errors: 0, user_errors: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0, framework_errors: 0, user_errors: 0 }, }, }); }); diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts index ca7a88f9d42a7..d41b5590341ff 100644 --- a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts +++ b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts @@ -7,22 +7,19 @@ import { JsonObject } from '@kbn/utility-types'; import { merge } from 'lodash'; +import { isUserError } from '../task_running'; import { isOk, Ok, unwrap } from '../lib/result_type'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { ErroredTask, - RanTask, - TaskRun, isTaskManagerStatEvent, isTaskRunEvent, + RanTask, TaskManagerStat, + TaskRun, } from '../task_events'; -import { - getTaskTypeGroup, - MetricCounterService, - SimpleHistogram, - type SerializedHistogram, -} from './lib'; +import type { SerializedHistogram } from './lib'; +import { getTaskTypeGroup, MetricCounterService, SimpleHistogram } from './lib'; import { ITaskMetricsAggregator } from './types'; const HDR_HISTOGRAM_MAX = 5400; // 90 minutes @@ -32,6 +29,8 @@ enum TaskRunKeys { SUCCESS = 'success', NOT_TIMED_OUT = 'not_timed_out', TOTAL = 'total', + USER_ERRORS = 'user_errors', + FRAMEWORK_ERRORS = 'framework_errors', } enum TaskRunMetricKeys { @@ -91,7 +90,8 @@ export class TaskRunMetricsAggregator implements ITaskMetricsAggregator<TaskRunM } private processTaskRunEvent(taskEvent: TaskRun) { - const { task, isExpired }: RanTask | ErroredTask = unwrap(taskEvent.event); + const taskRunResult: RanTask | ErroredTask = unwrap(taskEvent.event); + const { task, isExpired } = taskRunResult; const success = isOk((taskEvent as TaskRun).event); const taskType = task.taskType.replaceAll('.', '__'); const taskTypeGroup = getTaskTypeGroup(taskType); @@ -102,6 +102,14 @@ export class TaskRunMetricsAggregator implements ITaskMetricsAggregator<TaskRunM // increment success counters if (success) { this.incrementCounters(TaskRunKeys.SUCCESS, taskType, taskTypeGroup); + } else { + if (isUserError((taskRunResult as ErroredTask).error)) { + // increment the user error counters + this.incrementCounters(TaskRunKeys.USER_ERRORS, taskType, taskTypeGroup); + } else { + // increment the framework error counters + this.incrementCounters(TaskRunKeys.FRAMEWORK_ERRORS, taskType, taskTypeGroup); + } } // increment expired counters diff --git a/x-pack/plugins/task_manager/server/task_running/errors.test.ts b/x-pack/plugins/task_manager/server/task_running/errors.test.ts index 17e08587c31c6..f4f19583c2a3d 100644 --- a/x-pack/plugins/task_manager/server/task_running/errors.test.ts +++ b/x-pack/plugins/task_manager/server/task_running/errors.test.ts @@ -7,8 +7,12 @@ import { createSkipError, + createTaskRunError, + getErrorSource, isSkipError, isUnrecoverableError, + isUserError, + TaskErrorSource, throwUnrecoverableError, } from './errors'; @@ -35,5 +39,23 @@ describe('Error Types', () => { it('createSkipError', () => { expect(isSkipError(createSkipError(new Error('OMG')))).toBeTruthy(); }); + + it('createTaskRunError', () => { + expect(isUserError(createTaskRunError(new Error('OMG'), TaskErrorSource.USER))).toBeTruthy(); + }); + + it('createTaskRunError without errorSourceParam ', () => { + expect(getErrorSource(createTaskRunError(new Error('OMG')))).toBe(TaskErrorSource.FRAMEWORK); + }); + + it('getErrorSource', () => { + expect(getErrorSource(createTaskRunError(new Error('OMG'), TaskErrorSource.USER))).toBe( + TaskErrorSource.USER + ); + }); + + it('getErrorSource return undefined when there is no source data', () => { + expect(getErrorSource(new Error('OMG'))).toBeUndefined(); + }); }); }); diff --git a/x-pack/plugins/task_manager/server/task_running/errors.ts b/x-pack/plugins/task_manager/server/task_running/errors.ts index 2d8e09b5c24e0..3898338855efe 100644 --- a/x-pack/plugins/task_manager/server/task_running/errors.ts +++ b/x-pack/plugins/task_manager/server/task_running/errors.ts @@ -4,8 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { TaskErrorSource } from '../../common'; import { EphemeralTask } from '../task'; +export { TaskErrorSource }; + // Unrecoverable const CODE_UNRECOVERABLE = 'TaskManager/unrecoverable'; const CODE_RETRYABLE = 'TaskManager/retryable'; @@ -15,11 +18,6 @@ const code = Symbol('TaskManagerErrorCode'); const retry = Symbol('TaskManagerErrorRetry'); const source = Symbol('TaskManagerErrorSource'); -export enum TaskErrorSource { - FRAMEWORK = 'framework', - USER = 'user', -} - export interface DecoratedError extends Error { [code]?: string; [retry]?: Date | boolean; @@ -47,9 +45,8 @@ export function isUnrecoverableError(error: Error | DecoratedError) { return isTaskManagerError(error) && error[code] === CODE_UNRECOVERABLE; } -export function throwUnrecoverableError(error: Error, errorSource = TaskErrorSource.FRAMEWORK) { +export function throwUnrecoverableError(error: Error) { (error as DecoratedError)[code] = CODE_UNRECOVERABLE; - (error as DecoratedError)[source] = errorSource; throw error; } @@ -86,6 +83,20 @@ export function createTaskRunError( return error; } +function isTaskRunError(error: Error | DecoratedError): error is DecoratedError { + return Boolean(error && (error as DecoratedError)[source]); +} + +export function getErrorSource(error: Error | DecoratedError): TaskErrorSource | undefined { + if (isTaskRunError(error) && error[source]) { + return error[source]; + } +} + +export function isUserError(error: Error | DecoratedError) { + return getErrorSource(error) === TaskErrorSource.USER; +} + export function isEphemeralTaskRejectedDueToCapacityError( error: Error | EphemeralTaskRejectedDueToCapacityError ) { diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts index 393721f0fd814..35fbd6918f4fb 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts @@ -1565,7 +1565,7 @@ describe('TaskManagerRunner', () => { task: instance, persistence: TaskPersistence.Recurring, result: TaskRunResult.Success, - error: new Error(`Alerting task failed to run.`), + error: new Error(`test`), isExpired: false, }) ) @@ -1613,7 +1613,7 @@ describe('TaskManagerRunner', () => { persistence: TaskPersistence.Recurring, result: TaskRunResult.Success, isExpired: true, - error: new Error(`Alerting task failed to run.`), + error: new Error(`test`), }) ) ) diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index 9c9ad88c1dfc5..f67d8a22db81d 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -792,7 +792,7 @@ export class TaskManagerRunner implements TaskRunner { asErr({ ...processedResult, isExpired: taskHasExpired, - error: new Error(`Alerting task failed to run.`), + error: taskRunError, }), taskTiming ) diff --git a/x-pack/plugins/task_manager/server/task_scheduling.test.ts b/x-pack/plugins/task_manager/server/task_scheduling.test.ts index 11a2e8a115d8a..f4c8c0d6b0880 100644 --- a/x-pack/plugins/task_manager/server/task_scheduling.test.ts +++ b/x-pack/plugins/task_manager/server/task_scheduling.test.ts @@ -289,6 +289,51 @@ describe('TaskScheduling', () => { }, ]); }); + + test('should offset runAt and scheduledAt by no more than 5m if more than one task is enabled', async () => { + const task = taskManagerMock.createTask({ + id: 'task-1', + enabled: false, + schedule: { interval: '3h' }, + runAt: new Date('1969-09-13T21:33:58.285Z'), + scheduledAt: new Date('1969-09-10T21:33:58.285Z'), + }); + const task2 = taskManagerMock.createTask({ + id: 'task-2', + enabled: false, + schedule: { interval: '3h' }, + runAt: new Date('1969-09-13T21:33:58.285Z'), + scheduledAt: new Date('1969-09-10T21:33:58.285Z'), + }); + mockTaskStore.bulkUpdate.mockImplementation(() => + Promise.resolve([{ tag: 'ok', value: task }]) + ); + mockTaskStore.bulkGet.mockResolvedValue([asOk(task), asOk(task2)]); + + const taskScheduling = new TaskScheduling(taskSchedulingOpts); + await taskScheduling.bulkEnable([task.id, task2.id]); + + const bulkUpdatePayload = mockTaskStore.bulkUpdate.mock.calls[0][0]; + + expect(bulkUpdatePayload.length).toBe(2); + expect(bulkUpdatePayload[0]).toEqual({ + ...task, + enabled: true, + runAt: new Date('1970-01-01T00:00:00.000Z'), + scheduledAt: new Date('1970-01-01T00:00:00.000Z'), + }); + + expect(omit(bulkUpdatePayload[1], 'runAt', 'scheduledAt')).toEqual({ + ...omit(task2, 'runAt', 'scheduledAt'), + enabled: true, + }); + + const { runAt, scheduledAt } = bulkUpdatePayload[1]; + expect(runAt.getTime()).toEqual(scheduledAt.getTime()); + expect(runAt.getTime() - bulkUpdatePayload[0].runAt.getTime()).toBeLessThanOrEqual( + 5 * 60 * 1000 + ); + }); }); describe('bulkDisable', () => { diff --git a/x-pack/plugins/task_manager/server/task_scheduling.ts b/x-pack/plugins/task_manager/server/task_scheduling.ts index 795e563986586..c0e28a5fae3bd 100644 --- a/x-pack/plugins/task_manager/server/task_scheduling.ts +++ b/x-pack/plugins/task_manager/server/task_scheduling.ts @@ -176,9 +176,15 @@ export class TaskScheduling { store: this.store, getTasks: async (ids) => await this.bulkGetTasksHelper(ids), filter: (task) => !task.enabled, - map: (task) => { + map: (task, i) => { if (runSoon) { - return { ...task, enabled: true, scheduledAt: new Date(), runAt: new Date() }; + // Run the first task now. Run all other tasks a random number of ms in the future, + // with a maximum of 5 minutes or the task interval, whichever is smaller. + const taskToRun = + i === 0 + ? { ...task, runAt: new Date(), scheduledAt: new Date() } + : randomlyOffsetRunTimestamp(task); + return { ...taskToRun, enabled: true }; } return { ...task, enabled: true }; }, @@ -440,3 +446,18 @@ const cancellablePromise = () => { .then(() => {}), }; }; + +const randomlyOffsetRunTimestamp: (task: ConcreteTaskInstance) => ConcreteTaskInstance = (task) => { + const now = Date.now(); + const maximumOffsetTimestamp = now + 1000 * 60 * 5; // now + 5 minutes + const taskIntervalInMs = parseIntervalAsMillisecond(task.schedule?.interval ?? '0s'); + const maximumRunAt = Math.min(now + taskIntervalInMs, maximumOffsetTimestamp); + + // Offset between 1 and maximumRunAt ms + const runAt = new Date(now + Math.floor(Math.random() * (maximumRunAt - now) + 1)); + return { + ...task, + runAt, + scheduledAt: runAt, + }; +}; diff --git a/x-pack/plugins/task_manager/tsconfig.json b/x-pack/plugins/task_manager/tsconfig.json index 20fdb90611518..ef7cab0493a60 100644 --- a/x-pack/plugins/task_manager/tsconfig.json +++ b/x-pack/plugins/task_manager/tsconfig.json @@ -7,6 +7,7 @@ "server/**/*", // have to declare *.json explicitly due to https://github.com/microsoft/TypeScript/issues/25636 "server/**/*.json", + "common/**/*" ], "kbn_references": [ "@kbn/alerting-state-types", diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 9252c30f084d1..ae0bcf34be65e 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -5197,6 +5197,8 @@ "searchErrors.painlessError.buttonTxt": "Modifier le script", "searchErrors.search.esErrorTitle": "Impossible d’extraire les résultats de recherche", "searchErrors.search.httpErrorTitle": "Impossible de se connecter au serveur Kibana", + "searchErrors.tsdbError.message": "Le champ {field} du type de série temporelle [compteur] a été utilisé avec une opération {op} non prise en charge.", + "searchErrors.tsdbError.tsdbCounterDocsLabel": "Pour en savoir plus sur les types de champs des séries temporelles et les agrégations compatibles [counter]", "searchResponseWarnings.badgeButtonLabel": "{warningCount} {warningCount, plural, one {avertissement} many {avertissements} other {avertissements}}", "searchResponseWarnings.noResultsTitle": "Résultat introuvable", "securitySolutionPackages.dataTable.eventsTab.unit": "{totalCount, plural, =1 {alerte} one {alertes} many {alertes} other {alertes}}", @@ -16577,7 +16579,6 @@ "xpack.fleet.agentFlyout.standaloneRadioOption": "{standaloneMessage} – Exécutez un agent Elastic Agent de façon autonome pour le configurer et le mettre à jour manuellement sur l'hôte sur lequel il est installé.", "xpack.fleet.agentHealth.checkinMessageText": "Dernier message de vérification : {lastCheckinMessage}", "xpack.fleet.agentHealth.checkInTooltipText": "Dernier archivage le {lastCheckIn}", - "xpack.fleet.agentHealth.stuckUpdatingText": "L'agent effectue la mise à jour depuis un certain temps ; il est peut-être bloqué. Envisagez de redémarrer la mise à niveau. {learnMore}", "xpack.fleet.agentList.noFilteredAgentsPrompt": "Aucun agent trouvé. {clearFiltersLink}", "xpack.fleet.agentLogs.logDisabledCallOutDescription": "Mettez à jour la politique de l'agent {settingsLink} pour activer la collecte de logs.", "xpack.fleet.agentLogs.oldAgentWarningTitle": "La vue Logs requiert Elastic Agent 7.11 ou une version ultérieure. Pour mettre à niveau un agent, accédez au menu Actions ou {downloadLink} une version plus récente.", @@ -20415,9 +20416,6 @@ "xpack.infra.logs.search.previousButtonLabel": "Précédent", "xpack.infra.logs.search.searchInLogsAriaLabel": "rechercher", "xpack.infra.logs.search.searchInLogsPlaceholder": "Recherche", - "xpack.infra.logs.settings.inlineLogViewCalloutButtonText": "Revenir à la vue de log (persistante) par défaut", - "xpack.infra.logs.settings.inlineLogViewCalloutDescription": "Une vue de log en ligne est actuellement utilisée. Les modifications seront synchronisées avec l'URL, mais elles ne seront pas conservées.", - "xpack.infra.logs.settings.inlineLogViewCalloutTitle": "Vue de log en ligne utilisée", "xpack.infra.logs.startStreamingButtonLabel": "Diffuser en direct", "xpack.infra.logs.stopStreamingButtonLabel": "Arrêter la diffusion", "xpack.infra.logs.streamPageTitle": "Flux", @@ -21802,11 +21800,7 @@ "xpack.lens.configure.suggestedValuee": "Valeur suggérée : {value}", "xpack.lens.confirmModal.saveDuplicateButtonLabel": "Enregistrer {name}", "xpack.lens.datatable.visualizationOf": "Tableau {operations}", - "xpack.lens.editorFrame.configurationFailureMoreErrors": " +{errors} {errors, plural, one {erreur} many {erreurs} other {erreurs}}", - "xpack.lens.editorFrame.expressionFailureMessage": "Erreur de requête : {type}, {reason}", - "xpack.lens.editorFrame.expressionFailureMessageWithContext": "Erreur de requête : {type}, {reason} dans {context}", "xpack.lens.editorFrame.expressionMissingDataView": "Impossible de trouver {count, plural, one {vue de données} many {Les vues de données sont introuvables} other {Les vues de données sont introuvables}} : {ids}", - "xpack.lens.editorFrame.expressionTSDBDetailedMessage": "Le champ {field} du type de série temporelle [compteur] a été utilisé avec une opération {op} non prise en charge.", "xpack.lens.editorFrame.requiresTwoOrMoreFieldsWarningLabel": "Nécessite {requiredMinDimensionCount} champs", "xpack.lens.editorFrame.tooManyDimensionsSingularWarningLabel": "Veuillez supprimer {dimensionsTooMany, plural, one {une dimension} many {{dimensionsTooMany} dimensions} other {{dimensionsTooMany} dimensions}}", "xpack.lens.embeddable.featureBadge.iconDescription": "{count} {count, plural, one {modificateur de visualisation} many {modificateurs de visualisation} other {modificateurs de visualisation}}", @@ -22117,17 +22111,14 @@ "xpack.lens.editorFrame.emptyWorkspace": "Déposer quelques champs ici pour commencer", "xpack.lens.editorFrame.emptyWorkspaceHeading": "Lens est l’éditeur recommandé pour la création de visualisations.", "xpack.lens.editorFrame.emptyWorkspaceSimple": "Déposer le champ ici", - "xpack.lens.editorFrame.expandRenderingErrorButton": "Afficher les détails de l'erreur", "xpack.lens.editorFrame.expressionFailure": "Une erreur s'est produite dans l'expression", "xpack.lens.editorFrame.expressionMissingDatasource": "Impossible de trouver la source de données pour la visualisation", "xpack.lens.editorFrame.expressionMissingVisualizationType": "Type de visualisation non trouvé.", - "xpack.lens.editorFrame.expressionTSDBCounterInfo": "Pour en savoir plus sur les types de champs des séries temporelles et les agrégations compatibles [counter]", "xpack.lens.editorFrame.goToForums": "Formuler des requêtes et donner un retour", "xpack.lens.editorFrame.layerSettings.headingAppearance": "Apparence", "xpack.lens.editorFrame.layerSettings.headingData": "Données", "xpack.lens.editorFrame.layerSettingsTitle": "Paramètres du calque", "xpack.lens.editorFrame.loadFromLibrary": "Sélectionnez des annotations depuis une bibliothèque", - "xpack.lens.editorFrame.networkErrorMessage": "Erreur réseau, réessayez plus tard ou contactez votre administrateur.", "xpack.lens.editorFrame.optionalDimensionLabel": "Facultatif", "xpack.lens.editorFrame.previewErrorLabel": "L'aperçu du rendu a échoué", "xpack.lens.editorFrame.requiresFieldWarningLabel": "Nécessite un champ.", @@ -43295,4 +43286,4 @@ "xpack.serverlessObservability.nav.projectSettings": "Paramètres de projet", "xpack.serverlessObservability.nav.visualizations": "Visualisations" } -} +} \ 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 31f0c3b22bf5b..dd753a812ba47 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -5212,6 +5212,8 @@ "searchErrors.painlessError.buttonTxt": "スクリプトを編集", "searchErrors.search.esErrorTitle": "検索結果を取得できません", "searchErrors.search.httpErrorTitle": "Kibanaサーバーに接続できません", + "searchErrors.tsdbError.message": "時系列タイプ[カウンター]のフィールド{field}が、サポートされていない処理{op}で使用されました。", + "searchErrors.tsdbError.tsdbCounterDocsLabel": "時系列フィールド型と[カウンター]対応集約の詳細", "searchResponseWarnings.badgeButtonLabel": "{warningCount} {warningCount, plural, other {警告}}", "searchResponseWarnings.noResultsTitle": "結果が見つかりませんでした", "securitySolutionPackages.dataTable.eventsTab.unit": "{totalCount, plural, =1 {アラート} other {アラート}}", @@ -16590,7 +16592,6 @@ "xpack.fleet.agentFlyout.standaloneRadioOption": "{standaloneMessage} – Elasticエージェントをスタンドアロンで実行して、エージェントがインストールされているホストで、手動でエージェントを構成および更新します。", "xpack.fleet.agentHealth.checkinMessageText": "前回のチェックインメッセージ:{lastCheckinMessage}", "xpack.fleet.agentHealth.checkInTooltipText": "前回確認日時:{lastCheckIn}", - "xpack.fleet.agentHealth.stuckUpdatingText": "エージェントはしばらく更新が止まっている可能性があります。アップグレードの再開を検討してください。{learnMore}", "xpack.fleet.agentList.noFilteredAgentsPrompt": "エージェントが見つかりません。{clearFiltersLink}", "xpack.fleet.agentLogs.logDisabledCallOutDescription": "エージェントのポリシー{settingsLink}を更新して、ログ収集を有効にします。", "xpack.fleet.agentLogs.oldAgentWarningTitle": "ログの表示には、Elastic Agent 7.11以降が必要です。エージェントをアップグレードするには、[アクション]メニューに移動するか、新しいバージョンを{downloadLink}。", @@ -20428,9 +20429,6 @@ "xpack.infra.logs.search.previousButtonLabel": "前へ", "xpack.infra.logs.search.searchInLogsAriaLabel": "検索", "xpack.infra.logs.search.searchInLogsPlaceholder": "検索", - "xpack.infra.logs.settings.inlineLogViewCalloutButtonText": "デフォルト(永続)ログビューに戻す", - "xpack.infra.logs.settings.inlineLogViewCalloutDescription": "現在インラインログビューが使用されています。変更はURLと同期されますが、永続しません。", - "xpack.infra.logs.settings.inlineLogViewCalloutTitle": "使用中のインラインログビュー", "xpack.infra.logs.startStreamingButtonLabel": "ライブストリーム", "xpack.infra.logs.stopStreamingButtonLabel": "ストリーム停止", "xpack.infra.logs.streamPageTitle": "ストリーム", @@ -21816,11 +21814,7 @@ "xpack.lens.configure.suggestedValuee": "候補の値:{value}", "xpack.lens.confirmModal.saveDuplicateButtonLabel": "{name}を保存", "xpack.lens.datatable.visualizationOf": "表{operations}", - "xpack.lens.editorFrame.configurationFailureMoreErrors": " +{errors} {errors, plural, other {エラー}}", - "xpack.lens.editorFrame.expressionFailureMessage": "リクエストエラー:{type}、{reason}", - "xpack.lens.editorFrame.expressionFailureMessageWithContext": "リクエストエラー:{type}、{context}の{reason}", "xpack.lens.editorFrame.expressionMissingDataView": "{count, plural, other {データビュー}}が見つかりませんでした:{ids}", - "xpack.lens.editorFrame.expressionTSDBDetailedMessage": "時系列タイプ[カウンター]のフィールド{field}が、サポートされていない処理{op}で使用されました。", "xpack.lens.editorFrame.requiresTwoOrMoreFieldsWarningLabel": "{requiredMinDimensionCount}フィールドは必須です", "xpack.lens.editorFrame.tooManyDimensionsSingularWarningLabel": "{dimensionsTooMany, plural, other {{dimensionsTooMany}次元}}を削除してください", "xpack.lens.embeddable.featureBadge.iconDescription": "{count}個のビジュアライゼーション{count, plural, other {修飾子}}", @@ -22132,17 +22126,14 @@ "xpack.lens.editorFrame.emptyWorkspace": "開始するにはここにフィールドをドロップしてください", "xpack.lens.editorFrame.emptyWorkspaceHeading": "Lensはビジュアライゼーションを作成するための推奨エディターです", "xpack.lens.editorFrame.emptyWorkspaceSimple": "ここにフィールドをドロップ", - "xpack.lens.editorFrame.expandRenderingErrorButton": "エラーの詳細を表示", "xpack.lens.editorFrame.expressionFailure": "式でエラーが発生しました", "xpack.lens.editorFrame.expressionMissingDatasource": "ビジュアライゼーションのデータソースが見つかりませんでした", "xpack.lens.editorFrame.expressionMissingVisualizationType": "ビジュアライゼーションタイプが見つかりません。", - "xpack.lens.editorFrame.expressionTSDBCounterInfo": "時系列フィールド型と[カウンター]対応集約の詳細", "xpack.lens.editorFrame.goToForums": "リクエストとフィードバック", "xpack.lens.editorFrame.layerSettings.headingAppearance": "見た目", "xpack.lens.editorFrame.layerSettings.headingData": "データ", "xpack.lens.editorFrame.layerSettingsTitle": "レイヤー設定", "xpack.lens.editorFrame.loadFromLibrary": "ライブラリから注釈を選択", - "xpack.lens.editorFrame.networkErrorMessage": "ネットワークエラーです。しばらくたってから再試行するか、管理者に連絡してください。", "xpack.lens.editorFrame.optionalDimensionLabel": "オプション", "xpack.lens.editorFrame.previewErrorLabel": "レンダリングのプレビューに失敗しました", "xpack.lens.editorFrame.requiresFieldWarningLabel": "必須フィールド", @@ -43286,4 +43277,4 @@ "xpack.serverlessObservability.nav.projectSettings": "プロジェクト設定", "xpack.serverlessObservability.nav.visualizations": "ビジュアライゼーション" } -} +} \ 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 fee9ff5a1d9fc..541c293c64f6d 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -5278,6 +5278,8 @@ "searchErrors.painlessError.buttonTxt": "编辑脚本", "searchErrors.search.esErrorTitle": "无法检索搜索结果", "searchErrors.search.httpErrorTitle": "无法连接到 Kibana 服务器", + "searchErrors.tsdbError.message": "时间序列类型 [计数器] 的字段 {field} 已用于不支持的操作 {op}。", + "searchErrors.tsdbError.tsdbCounterDocsLabel": "查看有关时序字段类型和 [计数器] 支持的聚合的更多信息", "searchResponseWarnings.badgeButtonLabel": "{warningCount} {warningCount, plural, other {警告}}", "searchResponseWarnings.noResultsTitle": "找不到结果", "securitySolutionPackages.dataTable.eventsTab.unit": "{totalCount, plural, =1 {告警} other {告警}}", @@ -16657,7 +16659,6 @@ "xpack.fleet.agentFlyout.standaloneRadioOption": "{standaloneMessage} – 独立运行 Elastic 代理,以在安装代理的主机上手动配置和更新代理。", "xpack.fleet.agentHealth.checkinMessageText": "上次签入消息:{lastCheckinMessage}", "xpack.fleet.agentHealth.checkInTooltipText": "上次签入时间 {lastCheckIn}", - "xpack.fleet.agentHealth.stuckUpdatingText": "代理已更新一段时间,并可能陷入停滞。请考虑重新开始升级。{learnMore}", "xpack.fleet.agentList.noFilteredAgentsPrompt": "找不到代理。{clearFiltersLink}", "xpack.fleet.agentLogs.logDisabledCallOutDescription": "更新代理的策略 {settingsLink} 以启用日志收集。", "xpack.fleet.agentLogs.oldAgentWarningTitle": "“日志”视图需要 Elastic Agent 7.11 或更高版本。要升级代理,请前往“操作”菜单或{downloadLink}更新的版本。", @@ -20495,9 +20496,6 @@ "xpack.infra.logs.search.previousButtonLabel": "上一页", "xpack.infra.logs.search.searchInLogsAriaLabel": "搜索", "xpack.infra.logs.search.searchInLogsPlaceholder": "搜索", - "xpack.infra.logs.settings.inlineLogViewCalloutButtonText": "恢复到默认(持久化)日志视图", - "xpack.infra.logs.settings.inlineLogViewCalloutDescription": "当前正使用内联日志视图,更改将同步到该 URL,但它们无法持久。", - "xpack.infra.logs.settings.inlineLogViewCalloutTitle": "正使用内联日志视图", "xpack.infra.logs.startStreamingButtonLabel": "实时流式传输", "xpack.infra.logs.stopStreamingButtonLabel": "停止流式传输", "xpack.infra.logs.streamPageTitle": "流式传输", @@ -21882,11 +21880,7 @@ "xpack.lens.configure.suggestedValuee": "建议值:{value}", "xpack.lens.confirmModal.saveDuplicateButtonLabel": "保存 {name}", "xpack.lens.datatable.visualizationOf": "表 {operations}", - "xpack.lens.editorFrame.configurationFailureMoreErrors": " +{errors} {errors, plural, other {错误}}", - "xpack.lens.editorFrame.expressionFailureMessage": "请求错误:{type},{reason}", - "xpack.lens.editorFrame.expressionFailureMessageWithContext": "请求错误:{type},{context} 中的 {reason}", "xpack.lens.editorFrame.expressionMissingDataView": "找不到 {count, plural, other {数据视图}}:{ids}", - "xpack.lens.editorFrame.expressionTSDBDetailedMessage": "时间序列类型 [计数器] 的字段 {field} 已用于不支持的操作 {op}。", "xpack.lens.editorFrame.requiresTwoOrMoreFieldsWarningLabel": "需要 {requiredMinDimensionCount} 个字段", "xpack.lens.editorFrame.tooManyDimensionsSingularWarningLabel": "请移除{dimensionsTooMany, plural, other {{dimensionsTooMany} 个维度}}", "xpack.lens.embeddable.featureBadge.iconDescription": "{count} 个可视化{count, plural, other {修饰符}}", @@ -22150,17 +22144,14 @@ "xpack.lens.editorFrame.emptyWorkspace": "将一些字段拖放到此处以开始", "xpack.lens.editorFrame.emptyWorkspaceHeading": "Lens 是在创建可视化时建议使用的编辑器", "xpack.lens.editorFrame.emptyWorkspaceSimple": "将字段放到此处", - "xpack.lens.editorFrame.expandRenderingErrorButton": "显示错误的详情", "xpack.lens.editorFrame.expressionFailure": "表达式中发生错误", "xpack.lens.editorFrame.expressionMissingDatasource": "无法找到可视化的数据源", "xpack.lens.editorFrame.expressionMissingVisualizationType": "找不到可视化类型。", - "xpack.lens.editorFrame.expressionTSDBCounterInfo": "查看有关时序字段类型和 [计数器] 支持的聚合的更多信息", "xpack.lens.editorFrame.goToForums": "提出请求并提供反馈", "xpack.lens.editorFrame.layerSettings.headingAppearance": "外观", "xpack.lens.editorFrame.layerSettings.headingData": "数据", "xpack.lens.editorFrame.layerSettingsTitle": "图层设置", "xpack.lens.editorFrame.loadFromLibrary": "从库中选择标注", - "xpack.lens.editorFrame.networkErrorMessage": "网络错误,请稍后重试或联系管理员。", "xpack.lens.editorFrame.optionalDimensionLabel": "可选", "xpack.lens.editorFrame.previewErrorLabel": "预览呈现失败", "xpack.lens.editorFrame.requiresFieldWarningLabel": "需要字段", @@ -43266,4 +43257,4 @@ "xpack.serverlessObservability.nav.projectSettings": "项目设置", "xpack.serverlessObservability.nav.visualizations": "可视化" } -} +} \ No newline at end of file diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/json_editor_with_message_variables.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/json_editor_with_message_variables.tsx index 4459735acb927..45852171b5be4 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/json_editor_with_message_variables.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/json_editor_with_message_variables.tsx @@ -39,11 +39,12 @@ interface Props { inputTargetValue?: string | null; label: string; errors?: string[]; - areaLabel?: string; + ariaLabel?: string; onDocumentsChange: (data: string) => void; helpText?: JSX.Element; onBlur?: () => void; showButtonTitle?: boolean; + dataTestSubj?: string; euiCodeEditorProps?: { [key: string]: any }; } @@ -61,11 +62,12 @@ export const JsonEditorWithMessageVariables: React.FunctionComponent<Props> = ({ inputTargetValue, label, errors, - areaLabel, + ariaLabel, onDocumentsChange, helpText, onBlur, showButtonTitle, + dataTestSubj, euiCodeEditorProps = {}, }) => { const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>(); @@ -154,7 +156,7 @@ export const JsonEditorWithMessageVariables: React.FunctionComponent<Props> = ({ return ( <EuiFormRow - data-test-subj="actionJsonEditor" + data-test-subj={dataTestSubj} fullWidth error={errors} isInvalid={errors && errors.length > 0 && inputTargetValue !== undefined} @@ -191,7 +193,7 @@ export const JsonEditorWithMessageVariables: React.FunctionComponent<Props> = ({ width="100%" height="200px" data-test-subj={`${paramsProperty}JsonEditor`} - aria-label={areaLabel} + aria-label={ariaLabel} {...euiCodeEditorProps} editorDidMount={onEditorMount} onChange={(xjson: string) => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx index 3f1c050fb7e25..0aebaaaa29882 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx @@ -213,7 +213,7 @@ export const RuleEdit = ({ aria-labelledby="flyoutRuleEditTitle" size="m" maxWidth={620} - ownFocus={false} + ownFocus > <EuiFlyoutHeader hasBorder> <EuiTitle size="s" data-test-subj="editRuleFlyoutTitle"> diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/bedrock.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/bedrock.ts index 2e765d32ea9cc..6787290f0b396 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/bedrock.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/bedrock.ts @@ -15,6 +15,7 @@ import { DEFAULT_TOKEN_LIMIT } from '@kbn/stack-connectors-plugin/common/bedrock import { PassThrough } from 'stream'; import { EventStreamCodec } from '@smithy/eventstream-codec'; import { fromUtf8, toUtf8 } from '@smithy/util-utf8'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; import { getUrlPrefix, ObjectRemover } from '../../../../../common/lib'; @@ -268,6 +269,7 @@ export default function bedrockTest({ getService }: FtrProviderContext) { message: 'error validating action params: [subAction]: expected value of type [string] but got [undefined]', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -285,6 +287,7 @@ export default function bedrockTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: `Sub action "invalidAction" is not registered. Connector id: ${bedrockActionId}. Connector name: Amazon Bedrock. Connector type: .bedrock`, }); }); @@ -544,6 +547,7 @@ export default function bedrockTest({ getService }: FtrProviderContext) { expect(body).to.eql({ status: 'error', connector_id: bedrockActionId, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: [subAction]: expected value of type [string] but got [undefined]', retry: false, @@ -574,6 +578,7 @@ export default function bedrockTest({ getService }: FtrProviderContext) { connector_id: bedrockActionId, message: 'an error occurred while running the action', retry: true, + errorSource: TaskErrorSource.USER, service_message: 'Status code: 422. Message: API Error: Unprocessable Entity - Malformed input request: extraneous key [ooooo] is not permitted, please reformat your input and try again.', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/cases_webhook.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/cases_webhook.ts index 23410b83d10ab..89e62be241412 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/cases_webhook.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/cases_webhook.ts @@ -13,6 +13,7 @@ import { getExternalServiceSimulatorPath, ExternalServiceSimulator, } from '@kbn/actions-simulators-plugin/server/plugin'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -242,7 +243,13 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { params: {}, }) .then((resp: any) => { - expect(Object.keys(resp.body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(resp.body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(resp.body.connector_id).to.eql(simulatedActionId); expect(resp.body.status).to.eql('error'); }); @@ -262,6 +269,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: [subAction]: expected value to equal [pushToService]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -280,6 +288,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: [subActionParams.incident.title]: expected value of type [string] but got [undefined]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -306,6 +315,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: [subActionParams.incident.title]: expected value of type [string] but got [undefined]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -334,6 +344,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: [subActionParams.comments]: types that failed validation:\n- [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n- [subActionParams.comments.1]: expected value to equal [null]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -361,6 +372,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: [subActionParams.comments]: types that failed validation:\n- [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n- [subActionParams.comments.1]: expected value to equal [null]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -459,6 +471,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: '[Action][Webhook - Case Management]: Unable to create case. Error: JSON Error: Create case JSON body must be valid JSON. ', }); @@ -489,6 +502,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: '[Action][Webhook - Case Management]: Unable to update case with id 12345. Error: JSON Error: Update case JSON body must be valid JSON. ', }); @@ -556,6 +570,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: '[Action][Webhook - Case Management]: Unable to create comment at case with id 123. Error: JSON Error: Create comment JSON body must be valid JSON. ', }); @@ -623,6 +638,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: '[Action][Webhook - Case Management]: Unable to create case. Error: Invalid Create case URL: Error: Invalid protocol. ', }); @@ -653,6 +669,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: '[Action][Webhook - Case Management]: Unable to update case with id 12345. Error: Invalid Update case URL: Error: Invalid URL. ', }); @@ -720,6 +737,7 @@ export default function casesWebhookTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: '[Action][Webhook - Case Management]: Unable to create comment at case with id 123. Error: Invalid Create comment URL: Error: Invalid URL. ', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/d3security.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/d3security.ts index 55d53c00f59df..3b99ea477f137 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/d3security.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/d3security.ts @@ -11,6 +11,7 @@ import { D3SecuritySimulator, d3SecuritySuccessResponse, } from '@kbn/actions-simulators-plugin/server/d3security_simulation'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; const connectorTypeId = '.d3security'; @@ -179,6 +180,7 @@ export default function d3SecurityTest({ getService }: FtrProviderContext) { message: 'error validating action params: [subAction]: expected value of type [string] but got [undefined]', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -196,6 +198,7 @@ export default function d3SecurityTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: `Sub action "invalidAction" is not registered. Connector id: ${d3SecurityActionId}. Connector name: D3 Security. Connector type: .d3security`, }); }); @@ -287,6 +290,7 @@ export default function d3SecurityTest({ getService }: FtrProviderContext) { message: 'error validating action params: [subAction]: expected value of type [string] but got [undefined]', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/jira.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/jira.ts index 11588f48a48de..ed9fb9cbbaf89 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/jira.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/jira.ts @@ -13,6 +13,7 @@ import { getExternalServiceSimulatorPath, ExternalServiceSimulator, } from '@kbn/actions-simulators-plugin/server/plugin'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -231,7 +232,13 @@ export default function jiraTest({ getService }: FtrProviderContext) { params: {}, }) .then((resp: any) => { - expect(Object.keys(resp.body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(resp.body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(resp.body.connector_id).to.eql(simulatedActionId); expect(resp.body.status).to.eql('error'); }); @@ -251,6 +258,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]\n- [4.subAction]: expected value to equal [issueTypes]\n- [5.subAction]: expected value to equal [fieldsByIssueType]\n- [6.subAction]: expected value to equal [issues]\n- [7.subAction]: expected value to equal [issue]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -269,6 +277,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.summary]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [issueTypes]\n- [5.subAction]: expected value to equal [fieldsByIssueType]\n- [6.subAction]: expected value to equal [issues]\n- [7.subAction]: expected value to equal [issue]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -295,6 +304,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.summary]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [issueTypes]\n- [5.subAction]: expected value to equal [fieldsByIssueType]\n- [6.subAction]: expected value to equal [issues]\n- [7.subAction]: expected value to equal [issue]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -323,6 +333,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [issueTypes]\n- [5.subAction]: expected value to equal [fieldsByIssueType]\n- [6.subAction]: expected value to equal [issues]\n- [7.subAction]: expected value to equal [issue]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -350,6 +361,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [issueTypes]\n- [5.subAction]: expected value to equal [fieldsByIssueType]\n- [6.subAction]: expected value to equal [issues]\n- [7.subAction]: expected value to equal [issue]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -378,6 +390,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.labels]: types that failed validation:\n - [subActionParams.incident.labels.0.0]: The label label with spaces cannot contain spaces\n - [subActionParams.incident.labels.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [issueTypes]\n- [5.subAction]: expected value to equal [fieldsByIssueType]\n- [6.subAction]: expected value to equal [issues]\n- [7.subAction]: expected value to equal [issue]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/openai.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/openai.ts index a0a906f0fa2ad..4d23e887085e0 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/openai.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/openai.ts @@ -11,6 +11,7 @@ import { OpenAISimulator, genAiSuccessResponse, } from '@kbn/actions-simulators-plugin/server/openai_simulation'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; import { getUrlPrefix, ObjectRemover } from '../../../../../common/lib'; @@ -248,6 +249,7 @@ export default function genAiTest({ getService }: FtrProviderContext) { message: 'error validating action params: [subAction]: expected value of type [string] but got [undefined]', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -265,6 +267,7 @@ export default function genAiTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: `Sub action "invalidAction" is not registered. Connector id: ${genAiActionId}. Connector name: OpenAI. Connector type: .gen-ai`, }); }); @@ -461,6 +464,7 @@ export default function genAiTest({ getService }: FtrProviderContext) { message: 'error validating action params: [subAction]: expected value of type [string] but got [undefined]', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -483,6 +487,7 @@ export default function genAiTest({ getService }: FtrProviderContext) { connector_id: genAiActionId, message: 'an error occurred while running the action', retry: true, + errorSource: TaskErrorSource.USER, service_message: 'Status code: 422. Message: API Error: Unprocessable Entity - The model `bad model` does not exist', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/opsgenie.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/opsgenie.ts index fb73f6a95089e..792e5dd021b3b 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/opsgenie.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/opsgenie.ts @@ -11,6 +11,7 @@ import { OpsgenieSimulator, opsgenieSuccessResponse, } from '@kbn/actions-simulators-plugin/server/opsgenie_simulation'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -165,7 +166,13 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { }); expect(200); - expect(Object.keys(body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(body.connector_id).to.eql(opsgenieActionId); expect(body.status).to.eql('error'); }); @@ -184,6 +191,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: `Sub action "invalidAction" is not registered. Connector id: ${opsgenieActionId}. Connector name: Opsgenie. Connector type: .opsgenie`, }); }); @@ -202,6 +210,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [message]: expected value of type [string] but got [undefined])', }); @@ -221,6 +230,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [alias]: expected value of type [string] but got [undefined])', }); @@ -253,6 +263,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [responders.0]: types that failed validation:\n- [responders.0.0.type]: types that failed validation:\n - [responders.0.type.0]: expected value to equal [team]\n - [responders.0.type.1]: expected value to equal [user]\n - [responders.0.type.2]: expected value to equal [escalation]\n - [responders.0.type.3]: expected value to equal [schedule]\n- [responders.0.1.id]: expected value of type [string] but got [undefined]\n- [responders.0.2.username]: expected value of type [string] but got [undefined])', }); @@ -282,6 +293,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [responders.0]: types that failed validation:\n- [responders.0.0.name]: expected value of type [string] but got [undefined]\n- [responders.0.1.id]: expected value of type [string] but got [undefined]\n- [responders.0.2.username]: expected value of type [string] but got [undefined])', }); @@ -384,6 +396,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [visibleTo.0]: types that failed validation:\n- [visibleTo.0.0.type]: expected value to equal [team]\n- [visibleTo.0.1.id]: expected value of type [string] but got [undefined]\n- [visibleTo.0.2.id]: expected value of type [string] but got [undefined]\n- [visibleTo.0.3.username]: expected value of type [string] but got [undefined])', }); @@ -448,6 +461,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [details.bananas]: expected value of type [string] but got [number])', }); @@ -683,6 +697,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: opsgenieActionId, + errorSource: TaskErrorSource.USER, service_message: 'Status code: 422. Message: Request failed with status code 422: {"message":"failed"}', }); @@ -706,6 +721,7 @@ export default function opsgenieTest({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: opsgenieActionId, + errorSource: TaskErrorSource.USER, service_message: 'Status code: 422. Message: Request failed with status code 422: {"message":"failed"}', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/resilient.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/resilient.ts index 8425de3b900ec..4f3b107581a4d 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/resilient.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/resilient.ts @@ -13,6 +13,7 @@ import { getExternalServiceSimulatorPath, ExternalServiceSimulator, } from '@kbn/actions-simulators-plugin/server/plugin'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -233,7 +234,13 @@ export default function resilientTest({ getService }: FtrProviderContext) { params: {}, }) .then((resp: any) => { - expect(Object.keys(resp.body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(resp.body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(resp.body.connector_id).to.eql(simulatedActionId); expect(resp.body.status).to.eql('error'); }); @@ -253,6 +260,7 @@ export default function resilientTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]\n- [4.subAction]: expected value to equal [incidentTypes]\n- [5.subAction]: expected value to equal [severity]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -271,6 +279,7 @@ export default function resilientTest({ getService }: FtrProviderContext) { retry: false, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.name]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [incidentTypes]\n- [5.subAction]: expected value to equal [severity]', + errorSource: TaskErrorSource.FRAMEWORK, }); }); }); @@ -295,6 +304,7 @@ export default function resilientTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.name]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [incidentTypes]\n- [5.subAction]: expected value to equal [severity]', }); @@ -322,6 +332,7 @@ export default function resilientTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [incidentTypes]\n- [5.subAction]: expected value to equal [severity]', }); @@ -349,6 +360,7 @@ export default function resilientTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [incidentTypes]\n- [5.subAction]: expected value to equal [severity]', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_itom.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_itom.ts index e9e70d879618b..4702d3bbe6df7 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_itom.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_itom.ts @@ -13,6 +13,7 @@ import http from 'http'; import { getHttpProxyServer } from '@kbn/alerting-api-integration-helpers'; import { getServiceNowServer } from '@kbn/actions-simulators-plugin/server/plugin'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -412,7 +413,13 @@ export default function serviceNowITOMTest({ getService }: FtrProviderContext) { params: {}, }) .then((resp: any) => { - expect(Object.keys(resp.body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(resp.body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(resp.body.connector_id).to.eql(simulatedActionId); expect(resp.body.status).to.eql('error'); }); @@ -430,6 +437,7 @@ export default function serviceNowITOMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [addEvent]\n- [1.subAction]: expected value to equal [getChoices]', }); @@ -448,6 +456,7 @@ export default function serviceNowITOMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [addEvent]\n- [1.subAction]: expected value to equal [getChoices]', }); @@ -470,6 +479,7 @@ export default function serviceNowITOMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [addEvent]\n- [1.subActionParams.fields]: expected value of type [array] but got [undefined]', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_itsm.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_itsm.ts index 3525597313514..3241f9b80ab1f 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_itsm.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_itsm.ts @@ -13,6 +13,7 @@ import http from 'http'; import { getHttpProxyServer } from '@kbn/alerting-api-integration-helpers'; import { getServiceNowServer } from '@kbn/actions-simulators-plugin/server/plugin'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -447,7 +448,13 @@ export default function serviceNowITSMTest({ getService }: FtrProviderContext) { params: {}, }) .then((resp: any) => { - expect(Object.keys(resp.body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(resp.body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(resp.body.connector_id).to.eql(simulatedActionId); expect(resp.body.status).to.eql('error'); }); @@ -465,6 +472,7 @@ export default function serviceNowITSMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]\n- [4.subAction]: expected value to equal [getChoices]\n- [5.subAction]: expected value to equal [closeIncident]', }); @@ -483,6 +491,7 @@ export default function serviceNowITSMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.short_description]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [getChoices]\n- [5.subAction]: expected value to equal [closeIncident]', }); @@ -506,6 +515,7 @@ export default function serviceNowITSMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.short_description]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [getChoices]\n- [5.subAction]: expected value to equal [closeIncident]', }); @@ -533,6 +543,7 @@ export default function serviceNowITSMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [getChoices]\n- [5.subAction]: expected value to equal [closeIncident]', }); @@ -560,6 +571,7 @@ export default function serviceNowITSMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [getChoices]\n- [5.subAction]: expected value to equal [closeIncident]', }); @@ -582,6 +594,7 @@ export default function serviceNowITSMTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]\n- [4.subActionParams.fields]: expected value of type [array] but got [undefined]\n- [5.subAction]: expected value to equal [closeIncident]', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_sir.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_sir.ts index 2094ddd71cd7d..6ab9a257c9261 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_sir.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/servicenow_sir.ts @@ -13,6 +13,7 @@ import http from 'http'; import { getHttpProxyServer } from '@kbn/alerting-api-integration-helpers'; import { getServiceNowServer } from '@kbn/actions-simulators-plugin/server/plugin'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -460,7 +461,13 @@ export default function serviceNowSIRTest({ getService }: FtrProviderContext) { params: {}, }) .then((resp: any) => { - expect(Object.keys(resp.body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(resp.body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(resp.body.connector_id).to.eql(simulatedActionId); expect(resp.body.status).to.eql('error'); }); @@ -478,6 +485,7 @@ export default function serviceNowSIRTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]\n- [4.subAction]: expected value to equal [getChoices]', }); @@ -496,6 +504,7 @@ export default function serviceNowSIRTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.short_description]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [getChoices]', }); @@ -519,6 +528,7 @@ export default function serviceNowSIRTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.short_description]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [getChoices]', }); @@ -546,6 +556,7 @@ export default function serviceNowSIRTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [getChoices]', }); @@ -573,6 +584,7 @@ export default function serviceNowSIRTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [getChoices]', }); @@ -595,6 +607,7 @@ export default function serviceNowSIRTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]\n- [4.subActionParams.fields]: expected value of type [array] but got [undefined]', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/swimlane.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/swimlane.ts index 5d6bb9e9b8145..859f4f952fe58 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/swimlane.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/swimlane.ts @@ -12,6 +12,7 @@ import http from 'http'; import { getHttpProxyServer } from '@kbn/alerting-api-integration-helpers'; import { getSwimlaneServer } from '@kbn/actions-simulators-plugin/server/plugin'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -323,7 +324,13 @@ export default function swimlaneTest({ getService }: FtrProviderContext) { params: {}, }) .then((resp: any) => { - expect(Object.keys(resp.body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(resp.body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(resp.body.connector_id).to.eql(simulatedActionId); expect(resp.body.status).to.eql('error'); }); @@ -341,6 +348,7 @@ export default function swimlaneTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: [subAction]: expected value to equal [pushToService]', }); @@ -366,6 +374,7 @@ export default function swimlaneTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: [subActionParams]: expected a plain object value, but found [null] instead.', }); @@ -390,6 +399,7 @@ export default function swimlaneTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: [subActionParams.comments]: types that failed validation:\n- [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n- [subActionParams.comments.1]: expected value to equal [null]', }); @@ -414,6 +424,7 @@ export default function swimlaneTest({ getService }: FtrProviderContext) { connector_id: simulatedActionId, status: 'error', retry: false, + errorSource: TaskErrorSource.FRAMEWORK, message: 'error validating action params: [subActionParams.comments]: types that failed validation:\n- [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n- [subActionParams.comments.1]: expected value to equal [null]', }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/tines.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/tines.ts index 99ba90f78dbeb..e6e3f8511c422 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/tines.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/tines.ts @@ -14,6 +14,7 @@ import { tinesAgentWebhook, tinesWebhookSuccessResponse, } from '@kbn/actions-simulators-plugin/server/tines_simulation'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; const connectorTypeId = '.tines'; @@ -184,7 +185,13 @@ export default function tinesTest({ getService }: FtrProviderContext) { }); expect(200); - expect(Object.keys(body)).to.eql(['status', 'message', 'retry', 'connector_id']); + expect(Object.keys(body)).to.eql([ + 'status', + 'message', + 'retry', + 'errorSource', + 'connector_id', + ]); expect(body.connector_id).to.eql(tinesActionId); expect(body.status).to.eql('error'); }); @@ -203,6 +210,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: `Sub action "invalidAction" is not registered. Connector id: ${tinesActionId}. Connector name: Tines. Connector type: .tines`, }); }); @@ -221,6 +229,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [storyId]: expected value of type [number] but got [undefined])', }); @@ -240,6 +249,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Invalid subActionsParams: [webhook] or [webhookUrl] expected but got none', }); @@ -263,6 +273,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [webhook.storyId]: expected value of type [number] but got [undefined])', }); @@ -286,6 +297,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [webhook.name]: expected value of type [string] but got [undefined])', }); @@ -309,6 +321,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [webhook.path]: expected value of type [string] but got [undefined])', }); @@ -332,6 +345,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { status: 'error', retry: true, message: 'an error occurred while running the action', + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [webhook.secret]: expected value of type [string] but got [undefined])', }); @@ -489,6 +503,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: tinesActionId, + errorSource: TaskErrorSource.USER, service_message: 'Status code: 422. Message: API Error: Unprocessable Entity', }); }); @@ -510,6 +525,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: tinesActionId, + errorSource: TaskErrorSource.USER, service_message: 'Status code: 422. Message: API Error: Unprocessable Entity', }); }); @@ -529,6 +545,7 @@ export default function tinesTest({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: tinesActionId, + errorSource: TaskErrorSource.USER, service_message: 'Status code: 422. Message: API Error: Unprocessable Entity', }); }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/sub_action_framework/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/sub_action_framework/index.ts index 8bc8bc6a89757..e8470a2313209 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/sub_action_framework/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/sub_action_framework/index.ts @@ -7,6 +7,7 @@ import type SuperTest from 'supertest'; import expect from '@kbn/expect'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; import { getUrlPrefix, ObjectRemover } from '../../../../../common/lib'; @@ -169,6 +170,7 @@ export default function createActionTests({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: res.body.id, + errorSource: TaskErrorSource.USER, service_message: 'Request validation failed (Error: [id]: expected value of type [string] but got [undefined])', }); @@ -192,6 +194,7 @@ export default function createActionTests({ getService }: FtrProviderContext) { status: 'error', retry: false, connector_id: res.body.id, + errorSource: TaskErrorSource.FRAMEWORK, }); } }); @@ -248,6 +251,7 @@ export default function createActionTests({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: res.body.id, + errorSource: TaskErrorSource.USER, service_message: `Sub action \"notRegistered\" is not registered. Connector id: ${res.body.id}. Connector name: Test: Sub action connector. Connector type: test.sub-action-connector`, }); }); @@ -268,6 +272,7 @@ export default function createActionTests({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: res.body.id, + errorSource: TaskErrorSource.USER, service_message: `Method \"notAFunction\" does not exists in service. Sub action: \"notAFunction\". Connector id: ${res.body.id}. Connector name: Test: Sub action connector. Connector type: test.sub-action-connector`, }); }); @@ -288,6 +293,7 @@ export default function createActionTests({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: res.body.id, + errorSource: TaskErrorSource.USER, service_message: `Method \"notExist\" does not exists in service. Sub action: \"notExist\". Connector id: ${res.body.id}. Connector name: Test: Sub action connector. Connector type: test.sub-action-connector`, }); }); @@ -311,6 +317,7 @@ export default function createActionTests({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', retry: true, connector_id: res.body.id, + errorSource: TaskErrorSource.USER, service_message: 'You should register at least one subAction for your connector type', }); }); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute.ts index 4acb40fcfe3f1..fb10eba9774ad 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute.ts @@ -9,6 +9,7 @@ import expect from '@kbn/expect'; import { IValidatedEvent, nanosToMillis } from '@kbn/event-log-plugin/server'; import { ESTestIndexTool, ES_TEST_INDEX_NAME } from '@kbn/alerting-api-integration-helpers'; import { ActionExecutionSourceType } from '@kbn/actions-plugin/server/lib/action_execution_source'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { Spaces } from '../../scenarios'; import { getUrlPrefix, ObjectRemover, getEventLog } from '../../../common/lib'; import { FtrProviderContext } from '../../../common/ftr_provider_context'; @@ -131,6 +132,7 @@ export default function ({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', service_message: `expected failure for ${ES_TEST_INDEX_NAME} ${reference}`, retry: true, + errorSource: TaskErrorSource.USER, }); await validateEventLog({ @@ -326,6 +328,7 @@ export default function ({ getService }: FtrProviderContext) { message: 'an error occurred while running the action', serviceMessage: `expected failure for ${ES_TEST_INDEX_NAME} ${reference}`, retry: true, + errorSource: TaskErrorSource.USER, }); }); }); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/migrations.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/migrations.ts index 4f23a5ff3a727..541f83fc8d412 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/migrations.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/migrations.ts @@ -126,6 +126,7 @@ export default function createGetTests({ getService }: FtrProviderContext) { expect(response.body).to.eql({ connector_id: '0f8f2810-0a59-11ec-9a7c-fd0c2b83ff7d', status: 'error', + errorSource: 'framework', message: `error validating action type connector: secrets must be defined`, retry: false, }); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/patch_comment.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/patch_comment.ts index 8c2c356b6090e..1ea5013b16506 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/patch_comment.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/patch_comment.ts @@ -12,6 +12,7 @@ import { AlertAttachmentAttributes, UserCommentAttachmentAttributes, AttachmentType, + CaseStatuses, } from '@kbn/cases-plugin/common/types/domain'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; @@ -34,6 +35,7 @@ import { updateComment, superUserSpace1Auth, removeServerGeneratedPropertiesFromSavedObject, + updateCase, } from '../../../../common/lib/api'; import { globalRead, @@ -549,6 +551,48 @@ export default ({ getService }: FtrProviderContext): void => { } }); + describe('partial updates', () => { + it('should not result to a version conflict (409) when updating a comment to an updated case', async () => { + const postedCase = await createCase(supertest, postCaseReq); + const caseWithComments = await createComment({ + supertest, + caseId: postedCase.id, + params: postCommentUserReq, + expectedHttpCode: 200, + }); + + /** + * Updating the status of the case will + * change the version of the case + */ + await updateCase({ + supertest, + params: { + cases: [ + { + id: caseWithComments.id, + version: caseWithComments.version, + status: CaseStatuses['in-progress'], + }, + ], + }, + }); + + await updateComment({ + supertest, + caseId: postedCase.id, + req: { + id: caseWithComments.comments![0].id, + version: caseWithComments.comments![0].version, + comment: 'my new comment', + type: AttachmentType.user, + owner: 'securitySolutionFixture', + }, + expectedHttpCode: 200, + }); + }); + }); + describe('rbac', () => { const supertestWithoutAuth = getService('supertestWithoutAuth'); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/post_comment.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/post_comment.ts index 88723df678f8a..fcb376e4df522 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/post_comment.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/post_comment.ts @@ -1123,6 +1123,36 @@ export default ({ getService }: FtrProviderContext): void => { }); }); + describe('partial updates', () => { + it('should not result to a version conflict (409) when adding a comment to an updated case', async () => { + const postedCase = await createCase(supertest, postCaseReq); + + /** + * Updating the status of the case will + * change the version of the case + */ + await updateCase({ + supertest, + params: { + cases: [ + { + id: postedCase.id, + version: postedCase.version, + status: CaseStatuses['in-progress'], + }, + ], + }, + }); + + await createComment({ + supertest, + caseId: postedCase.id, + params: postCommentUserReq, + expectedHttpCode: 200, + }); + }); + }); + describe('rbac', () => { afterEach(async () => { await deleteAllCaseItems(es); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/bulk_create_attachments.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/bulk_create_attachments.ts index 3c3748a844ea6..6c929f67b8c90 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/bulk_create_attachments.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/bulk_create_attachments.ts @@ -1512,6 +1512,36 @@ export default ({ getService }: FtrProviderContext): void => { }); }); + describe('partial updates', () => { + it('should not result to a version conflict (409) when adding comments to an updated case', async () => { + const postedCase = await createCase(supertest, postCaseReq); + + /** + * Updating the status of the case will + * change the version of the case + */ + await updateCase({ + supertest, + params: { + cases: [ + { + id: postedCase.id, + version: postedCase.version, + status: CaseStatuses['in-progress'], + }, + ], + }, + }); + + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [postCommentUserReq], + expectedHttpCode: 200, + }); + }); + }); + describe('rbac', () => { afterEach(async () => { await deleteAllCaseItems(es); diff --git a/x-pack/test/cloud_integration/plugins/saml_provider/server/saml_tools.ts b/x-pack/test/cloud_integration/plugins/saml_provider/server/saml_tools.ts index 0be46a431d7d4..7d1a6cbfa4255 100644 --- a/x-pack/test/cloud_integration/plugins/saml_provider/server/saml_tools.ts +++ b/x-pack/test/cloud_integration/plugins/saml_provider/server/saml_tools.ts @@ -29,6 +29,7 @@ const parseStringAsync = promisify(parseString); const signingKey = fs.readFileSync(KBN_KEY_PATH); const signatureAlgorithm = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'; +const canonicalizationAlgorithm = 'http://www.w3.org/2001/10/xml-exc-c14n#'; export async function getSAMLRequestId(urlWithSAMLRequestId: string) { const inflatedSAMLRequest = (await inflateRawAsync( @@ -87,19 +88,19 @@ export async function getSAMLResponse({ </saml:Assertion> `; - const signature = new SignedXml(); + const signature = new SignedXml({ privateKey: signingKey }); signature.signatureAlgorithm = signatureAlgorithm; - signature.signingKey = signingKey; + signature.canonicalizationAlgorithm = canonicalizationAlgorithm; // Adds a reference to a `Assertion` xml element and an array of transform algorithms to be used during signing. - signature.addReference( - `//*[local-name(.)='Assertion']`, - [ + signature.addReference({ + xpath: `//*[local-name(.)='Assertion']`, + digestAlgorithm: 'http://www.w3.org/2001/04/xmlenc#sha256', + transforms: [ 'http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/2001/10/xml-exc-c14n#', ], - 'http://www.w3.org/2001/04/xmlenc#sha256' - ); + }); signature.computeSignature(samlAssertionTemplateXML, { location: { reference: `//*[local-name(.)='Issuer']`, action: 'after' }, diff --git a/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts b/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts index d82868aa068b3..a388a4d90af3b 100644 --- a/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts +++ b/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts @@ -35,8 +35,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return colorMapping; } - // FLAKY: https://github.com/elastic/kibana/issues/148557 - describe.skip('sync colors', function () { + describe('sync colors', function () { before(async function () { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load( diff --git a/x-pack/test/functional/apps/infra/home_page.ts b/x-pack/test/functional/apps/infra/home_page.ts index 6637b7d42d222..a41c12e0d833d 100644 --- a/x-pack/test/functional/apps/infra/home_page.ts +++ b/x-pack/test/functional/apps/infra/home_page.ts @@ -331,7 +331,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await retry.try(async () => { const documentTitle = await browser.getTitle(); expect(documentTitle).to.contain( - 'demo-stack-redis-01 - Infrastructure - Observability - Elastic' + 'demo-stack-redis-01 - Inventory - Infrastructure - Observability - Elastic' ); }); @@ -346,7 +346,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await retry.try(async () => { const documentTitle = await browser.getTitle(); - expect(documentTitle).to.contain('pod-0 - Infrastructure - Observability - Elastic'); + expect(documentTitle).to.contain( + 'pod-0 - Inventory - Infrastructure - Observability - Elastic' + ); }); await returnTo(INVENTORY_PATH); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 429b30b686485..ee9ad1596fbe0 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -922,15 +922,22 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont /** Counts the visible warnings in the config panel */ async getWorkspaceErrorCount() { - const moreButton = await testSubjects.exists('workspace-more-errors-button'); - if (moreButton) { - await retry.try(async () => { - await testSubjects.click('workspace-more-errors-button'); - await testSubjects.missingOrFail('workspace-more-errors-button'); - }); + const workspaceErrorsExists = await testSubjects.exists('lnsWorkspaceErrors'); + if (!workspaceErrorsExists) { + return 0; } - const errors = await testSubjects.findAll('workspace-error-message'); - return errors?.length ?? 0; + + const paginationControlExists = await testSubjects.exists( + 'lnsWorkspaceErrorsPaginationControl' + ); + if (!paginationControlExists) { + // pagination control only displayed when there are multiple errors + return 1; + } + + const paginationControl = await testSubjects.find('lnsWorkspaceErrorsPaginationControl'); + const paginationItems = await paginationControl.findAllByCssSelector('.euiPagination__item'); + return paginationItems.length; }, async searchOnChartSwitch(subVisualizationId: string, searchTerm?: string) { diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts index 3cceb01b54998..30ece977d1641 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts @@ -82,18 +82,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { } describe('create alert', function () { - before(async () => { + beforeEach(async () => { await pageObjects.common.navigateToApp('triggersActions'); await testSubjects.click('rulesTab'); }); - afterEach(async () => { - // Reset the Rules tab without reloading the entire page - // This is safer than trying to close the alert flyout, which may or may not be open at the end of a test - await testSubjects.click('logsTab'); - await testSubjects.click('rulesTab'); - }); - it('should delete the right action when the same action has been added twice', async () => { // create a new rule const ruleName = generateUniqueKey(); diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts index acd8b0da9e4c5..f9b84469c1eee 100644 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts +++ b/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts @@ -16,8 +16,7 @@ const CANVAS_TITLE = 'The Very Cool Workpad for PDF Tests'; export default function ({ getService }: FtrProviderContext) { const reportingFunctional = getService('reportingFunctional'); - // FLAKY: https://github.com/elastic/kibana/issues/172599 - describe.skip('Security with `reporting_user` built-in role', () => { + describe('Security with `reporting_user` built-in role', () => { before(async () => { await reportingFunctional.initEcommerce(); }); diff --git a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/ibm_resilient_connector.ts b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/ibm_resilient_connector.ts new file mode 100644 index 0000000000000..4ff2a98377dad --- /dev/null +++ b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/ibm_resilient_connector.ts @@ -0,0 +1,57 @@ +/* + * 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 { + getExternalServiceSimulatorPath, + ExternalServiceSimulator, +} from '@kbn/actions-simulators-plugin/server/plugin'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const actions = getService('actions'); + const commonScreenshots = getService('commonScreenshots'); + const screenshotDirectories = ['response_ops_docs', 'stack_connectors']; + const pageObjects = getPageObjects(['common', 'header']); + const testSubjects = getService('testSubjects'); + const kibanaServer = getService('kibanaServer'); + + let resilientSimulatorUrl: string = '<could not determine kibana url>'; + let smallUrl: string; + + describe('ibm resilient connector', function () { + before(async () => { + resilientSimulatorUrl = kibanaServer.resolveUrl( + getExternalServiceSimulatorPath(ExternalServiceSimulator.RESILIENT) + ); + smallUrl = resilientSimulatorUrl.replace('/elastic:changeme@', '/'); + }); + + beforeEach(async () => { + await pageObjects.common.navigateToApp('connectors'); + await pageObjects.header.waitUntilLoadingHasFinished(); + }); + + it('ibm resilient connector creation screenshots', async () => { + await pageObjects.common.navigateToApp('connectors'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await actions.common.openNewConnectorForm('resilient'); + await testSubjects.setValue('nameInput', 'IBM Resilient test connector'); + await testSubjects.setValue('config.apiUrl-input', smallUrl); + await testSubjects.setValue('config.orgId-input', '201'); + await testSubjects.setValue('secrets.apiKeyId-input', 'tester'); + await testSubjects.setValue('secrets.apiKeySecret-input', 'testkey'); + await commonScreenshots.takeScreenshot('resilient-connector', screenshotDirectories); + await testSubjects.click('create-connector-flyout-save-test-btn'); + // Close all toasts since it is unable to get incident types from example site + await pageObjects.common.clearAllToasts(); + await pageObjects.header.waitUntilLoadingHasFinished(); + await pageObjects.common.clearAllToasts(); + await commonScreenshots.takeScreenshot('resilient-params-test', screenshotDirectories); + await testSubjects.click('euiFlyoutCloseButton'); + }); + }); +} diff --git a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/index.ts b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/index.ts index 8c3454772fffa..5b9afd0ffd32d 100644 --- a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/index.ts +++ b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/index.ts @@ -57,6 +57,7 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) { loadTestFile(require.resolve('./bedrock_connector')); loadTestFile(require.resolve('./email_connector')); loadTestFile(require.resolve('./generative_ai_connector')); + loadTestFile(require.resolve('./ibm_resilient_connector')); loadTestFile(require.resolve('./index_connector')); loadTestFile(require.resolve('./jira_connector')); loadTestFile(require.resolve('./opsgenie_connector')); diff --git a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/index_connector.ts b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/index_connector.ts index 838ca43b19724..3caaab6daccca 100644 --- a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/index_connector.ts +++ b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/index_connector.ts @@ -39,7 +39,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await commonScreenshots.takeScreenshot('index-connector', screenshotDirectories); const saveTestButton = await testSubjects.find('create-connector-flyout-save-test-btn'); await saveTestButton.click(); - await testSubjects.setValue('actionJsonEditor', indexDocument); + await testSubjects.setValue('documentToIndex', indexDocument); await commonScreenshots.takeScreenshot('index-params-test', screenshotDirectories); const flyOutCancelButton = await testSubjects.find('euiFlyoutCloseButton'); await flyOutCancelButton.click(); diff --git a/x-pack/test/security_api_integration/packages/helpers/saml/saml_tools.ts b/x-pack/test/security_api_integration/packages/helpers/saml/saml_tools.ts index ad34f37fdc0a4..255625082407b 100644 --- a/x-pack/test/security_api_integration/packages/helpers/saml/saml_tools.ts +++ b/x-pack/test/security_api_integration/packages/helpers/saml/saml_tools.ts @@ -28,6 +28,7 @@ const parseStringAsync = promisify(parseString); const signingKey = fs.readFileSync(KBN_KEY_PATH); const signatureAlgorithm = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'; +const canonicalizationAlgorithm = 'http://www.w3.org/2001/10/xml-exc-c14n#'; export async function getSAMLRequestId(urlWithSAMLRequestId: string) { const inflatedSAMLRequest = (await inflateRawAsync( @@ -83,19 +84,19 @@ export async function getSAMLResponse({ </saml:Assertion> `; - const signature = new SignedXml(); + const signature = new SignedXml({ privateKey: signingKey }); signature.signatureAlgorithm = signatureAlgorithm; - signature.signingKey = signingKey; + signature.canonicalizationAlgorithm = canonicalizationAlgorithm; // Adds a reference to a `Assertion` xml element and an array of transform algorithms to be used during signing. - signature.addReference( - `//*[local-name(.)='Assertion']`, - [ + signature.addReference({ + xpath: `//*[local-name(.)='Assertion']`, + digestAlgorithm: 'http://www.w3.org/2001/04/xmlenc#sha256', + transforms: [ 'http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/2001/10/xml-exc-c14n#', ], - 'http://www.w3.org/2001/04/xmlenc#sha256' - ); + }); signature.computeSignature(samlAssertionTemplateXML, { location: { reference: `//*[local-name(.)='Issuer']`, action: 'after' }, diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/default_license/prebuilt_rules/management/fleet_integration.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/default_license/prebuilt_rules/management/fleet_integration.ts index 0eff0a25c2cb8..5453ff5b34c77 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/default_license/prebuilt_rules/management/fleet_integration.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/default_license/prebuilt_rules/management/fleet_integration.ts @@ -33,7 +33,8 @@ export default ({ getService }: FtrProviderContext): void => { * Unlike other tests that use mocks, this test uses actual rules from the * package storage and checks that they are installed. */ - it('should install prebuilt rules from the package storage', async () => { + // TODO: Fix and unskip https://github.com/elastic/kibana/issues/172107 + it.skip('should install prebuilt rules from the package storage', async () => { // Verify that status is empty before package installation const statusBeforePackageInstallation = await getPrebuiltRulesAndTimelinesStatus(supertest); expect(statusBeforePackageInstallation.rules_installed).toBe(0); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/default_license/rule_bulk_actions/perform_bulk_action_ess.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/default_license/rule_bulk_actions/perform_bulk_action_ess.ts index 9d145dc5a7c75..e85103b67cd22 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/default_license/rule_bulk_actions/perform_bulk_action_ess.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/default_license/rule_bulk_actions/perform_bulk_action_ess.ts @@ -62,7 +62,8 @@ export default ({ getService }: FtrProviderContext): void => { const createWebHookConnector = () => createConnector(getWebHookAction()); - describe('@ess perform_bulk_action - ESS specific logic', () => { + // Failing: See https://github.com/elastic/kibana/issues/173804 + describe.skip('@ess perform_bulk_action - ESS specific logic', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); await esArchiver.load('x-pack/test/functional/es_archives/auditbeat/hosts'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules_actions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules_actions.cy.ts index 9a4d3cdc1b1d4..f6df3e59bab93 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules_actions.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules_actions.cy.ts @@ -74,6 +74,7 @@ const ruleNameToAssert = 'Custom rule name with actions'; const expectedExistingSlackMessage = 'Existing slack action'; const expectedSlackMessage = 'Slack action test message'; +// TODO: Fix and unskip in Serverless https://github.com/elastic/kibana/issues/171101 describe( 'Detection rules, bulk edit of rule actions', { tags: ['@ess', '@serverless', '@brokenInServerless', '@brokenInServerlessQA'] }, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/connector_options.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/connector_options.cy.ts index 9bff9b341c68a..274d839c95a87 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/connector_options.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/connector_options.cy.ts @@ -76,7 +76,7 @@ describe('Cases connector incident fields', { tags: ['@ess', '@serverless'] }, ( cy.get(CONNECTOR_TITLE).should('have.text', getIbmResilientConnectorOptions().title); cy.get(CONNECTOR_CARD_DETAILS).should( 'have.text', - `Incident Types: ${getIbmResilientConnectorOptions().incidentTypes.join(', ')}Severity: ${ + `Incident types: ${getIbmResilientConnectorOptions().incidentTypes.join(', ')}Severity: ${ getIbmResilientConnectorOptions().severity }` ); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/urls/not_found.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/urls/not_found.cy.ts index 80e682d74de96..205832fd0eaf7 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/urls/not_found.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/urls/not_found.cy.ts @@ -31,9 +31,7 @@ describe('Display not found page', { tags: ['@ess', '@serverless'] }, () => { visitWithTimeRange(TIMELINES_URL); }); - // Tracked by https://github.com/elastic/kibana/issues/143705 - // TODO: We need to determine what we want the behavior to be here - it.skip('navigates to the alerts page with incorrect link', () => { + it('navigates to the alerts page with incorrect link', () => { visitWithTimeRange(`${ALERTS_URL}/randomUrl`); cy.get(NOT_FOUND).should('exist'); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/pagination.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/pagination.cy.ts index dcf847224067a..4c64f23167578 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/pagination.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/pagination.cy.ts @@ -24,39 +24,34 @@ import { hostsUrl } from '../../../urls/navigation'; // Flaky on serverless const defaultPageSize = 25; -// FLAKY: https://github.com/elastic/kibana/issues/169413 -describe.skip('Pagination', { tags: ['@ess', '@serverless'] }, () => { - before(() => { - cy.task('esArchiverLoad', { archiveName: 'timeline' }); - }); +describe('Timeline Pagination', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { + cy.task('esArchiverLoad', { archiveName: 'timeline' }); login(); visitWithTimeRange(hostsUrl('allHosts')); openTimelineUsingToggle(); populateTimeline(); }); - after(() => { + afterEach(() => { cy.task('esArchiverUnload', 'timeline'); }); - it(`should have ${defaultPageSize} events in the page by default`, () => { + it(`should paginate records correctly`, () => { + // should have ${defaultPageSize} events in the page by default cy.get(TIMELINE_EVENT).should('have.length', defaultPageSize); - }); - it('should be able to go to next / previous page', () => { + // should be able to go to next / previous page cy.get(`${TIMELINE_FLYOUT} ${TIMELINE_EVENTS_COUNT_NEXT_PAGE}`).first().click(); cy.get(`${TIMELINE_FLYOUT} ${TIMELINE_EVENTS_COUNT_PREV_PAGE}`).first().click(); - }); - it(`should select ${defaultPageSize} items per page by default`, () => { + // should select ${defaultPageSize} items per page by default cy.get(TIMELINE_EVENTS_COUNT_PER_PAGE).should('contain.text', defaultPageSize); - }); - it('should be able to change items count per page with the dropdown', () => { + // should be able to change items count per page with the dropdown const itemsPerPage = 100; - cy.get(TIMELINE_EVENTS_COUNT_PER_PAGE_BTN).first().click({ force: true }); + cy.get(TIMELINE_EVENTS_COUNT_PER_PAGE_BTN).first().click(); cy.get(TIMELINE_EVENTS_COUNT_PER_PAGE_OPTION(itemsPerPage)).click(); cy.get(TIMELINE_EVENTS_COUNT_PER_PAGE).should('not.have.text', '0'); cy.get(TIMELINE_EVENTS_COUNT_PER_PAGE) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts index abf0ad51f1ded..ddd65d69c5fed 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts @@ -4,65 +4,53 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { encode } from '@kbn/rison'; +import { encode } from '@kbn/rison'; import { getTimeline } from '../../../objects/timeline'; - import { TIMELINE_HEADER } from '../../../screens/timeline'; - import { createTimeline } from '../../../tasks/api_calls/timelines'; - import { ALERTS_URL } from '../../../urls/navigation'; import { createRule } from '../../../tasks/api_calls/rules'; import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; import { getNewRule } from '../../../objects/rule'; - import { login } from '../../../tasks/login'; import { visit, visitWithTimeRange } from '../../../tasks/navigation'; - import { TIMELINES_URL } from '../../../urls/navigation'; +import { deleteTimelines } from '../../../tasks/api_calls/common'; -// FLAKY: https://github.com/elastic/kibana/issues/172503 -describe.skip('Open timeline', { tags: ['@serverless', '@ess'] }, () => { +describe('Open timeline', { tags: ['@serverless', '@ess'] }, () => { let timelineSavedObjectId: string | null = null; - before(function () { + beforeEach(function () { login(); + deleteTimelines(); visit(TIMELINES_URL); - createTimeline(getTimeline()).then((response) => { timelineSavedObjectId = response.body.data.persistTimeline.timeline.savedObjectId; return response.body.data.persistTimeline.timeline.savedObjectId; }); - createRule(getNewRule()); visitWithTimeRange(ALERTS_URL); waitForAlertsToPopulate(); }); - beforeEach(() => { - login(); + it('should open a timeline via url alone without a saved object id', () => { + const urlWithoutSavedObjectId = `${ALERTS_URL}?timeline=(activeTab:query,isOpen:!t)`; + visit(urlWithoutSavedObjectId); + cy.get(TIMELINE_HEADER).should('be.visible'); }); - describe('open timeline from url exclusively', () => { - it('should open a timeline via url alone without a saved object id', () => { - const urlWithoutSavedObjectId = `${ALERTS_URL}?timeline=(activeTab:query,isOpen:!t)`; - visit(urlWithoutSavedObjectId); - cy.get(TIMELINE_HEADER).should('be.visible'); - }); - - it('should also support opening with a saved object id', () => { - cy.location('search').then((search) => { - const params = new URLSearchParams(search); - const timelineParams = encode({ - activeTab: 'query', - isOpen: true, - id: timelineSavedObjectId, - }); - params.set('timeline', timelineParams); - const urlWithSavedObjectId = `${ALERTS_URL}?${params.toString()}`; - visit(urlWithSavedObjectId); - cy.get(TIMELINE_HEADER).should('be.visible'); + it('should also support opening with a saved object id', () => { + cy.location('search').then((search) => { + const params = new URLSearchParams(search); + const timelineParams = encode({ + activeTab: 'query', + isOpen: true, + id: timelineSavedObjectId, }); + params.set('timeline', timelineParams); + const urlWithSavedObjectId = `${ALERTS_URL}?${params.toString()}`; + visit(urlWithSavedObjectId); + cy.get(TIMELINE_HEADER).should('be.visible'); }); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/common/rule_actions.ts b/x-pack/test/security_solution_cypress/cypress/screens/common/rule_actions.ts index e6d44f0918c6d..21d8bfdc0c0ce 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/common/rule_actions.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/common/rule_actions.ts @@ -42,7 +42,7 @@ export const EMAIL_CONNECTOR_SERVICE_SELECTOR = '[data-test-subj="emailServiceSe export const FORM_VALIDATION_ERROR = '.euiFormErrorText'; -export const JSON_EDITOR = "[data-test-subj='actionJsonEditor']"; +export const JSON_EDITOR = "[data-test-subj='documentToIndex']"; export const INDEX_SELECTOR = "[data-test-subj='.index-siem-ActionTypeSelectOption']"; diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts index e4d9b91e579b7..6f9c89bd8c930 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts @@ -87,7 +87,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // FLAKY: https://github.com/elastic/kibana/issues/170357 // FLAKY: https://github.com/elastic/kibana/issues/173670 - describe.skip('endpoint list', function () { + describe('endpoint list', function () { targetTags(this, ['@ess', '@serverless']); let indexedData: IndexedHostsAndAlertsResponse; diff --git a/x-pack/test/security_solution_endpoint/apps/integrations/policy_details.ts b/x-pack/test/security_solution_endpoint/apps/integrations/policy_details.ts index a2b1feaabd7cd..f4d587daf64f1 100644 --- a/x-pack/test/security_solution_endpoint/apps/integrations/policy_details.ts +++ b/x-pack/test/security_solution_endpoint/apps/integrations/policy_details.ts @@ -30,7 +30,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // FLAKY: https://github.com/elastic/kibana/issues/171653 // FLAKY: https://github.com/elastic/kibana/issues/171654 - describe.skip('When on the Endpoint Policy Details Page', function () { + describe('When on the Endpoint Policy Details Page', function () { targetTags(this, ['@ess', '@serverless']); let indexedData: IndexedHostsAndAlertsResponse; diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_response_actions/execute.ts b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_response_actions/execute.ts index 401ff25fee620..341f874e8e330 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_response_actions/execute.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_response_actions/execute.ts @@ -18,7 +18,7 @@ export default function ({ getService }: FtrProviderContext) { // FLAKY: https://github.com/elastic/kibana/issues/171666 // FLAKY: https://github.com/elastic/kibana/issues/171667 - describe.skip('Endpoint `execute` response action', function () { + describe('Endpoint `execute` response action', function () { targetTags(this, ['@ess', '@serverless']); let indexedData: IndexedHostsAndAlertsResponse; diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group3/_sidebar.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group3/_sidebar.ts index 17606ac87a429..0435fdffa7ede 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group3/_sidebar.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group3/_sidebar.ts @@ -26,7 +26,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const fieldEditor = getService('fieldEditor'); const retry = getService('retry'); const dataGrid = getService('dataGrid'); - const INITIAL_FIELD_LIST_SUMMARY = '53 available fields. 0 empty fields. 3 meta fields.'; + const INITIAL_FIELD_LIST_SUMMARY = '53 available fields. 3 meta fields.'; describe('discover sidebar', function describeIndexTests() { before(async function () { @@ -70,7 +70,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('first updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '7 available fields. 0 empty fields. 2 meta fields.' + '7 available fields. 2 meta fields.' ); }); @@ -79,7 +79,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('second updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '13 available fields. 0 empty fields. 3 meta fields.' + '13 available fields. 3 meta fields.' ); }); @@ -124,7 +124,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('first updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '30 available fields. 0 empty fields. 2 meta fields.' + '30 available fields. 2 meta fields.' ); }); @@ -133,7 +133,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('second updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '4 available fields. 0 empty fields. 0 meta fields.' + '4 available fields. 0 meta fields.' ); }); @@ -148,7 +148,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '2 available fields. 0 empty fields. 0 meta fields.' + '2 available fields. 0 meta fields.' ); }); @@ -163,7 +163,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('updates', async () => { return ( (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '4 available fields. 0 empty fields. 0 meta fields.' + '4 available fields. 0 meta fields.' ); }); @@ -269,10 +269,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(availableFields.join(', ')).to.be(expectedInitialAvailableFields); // Available fields after scrolling down - const emptySectionButton = await find.byCssSelector( - PageObjects.unifiedFieldList.getSidebarSectionSelector('empty', true) + const metaSectionButton = await find.byCssSelector( + PageObjects.unifiedFieldList.getSidebarSectionSelector('meta', true) ); - await emptySectionButton.scrollIntoViewIfNecessary(); + await metaSectionButton.scrollIntoViewIfNecessary(); await retry.waitFor('list to update after scrolling', async () => { availableFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames( @@ -285,12 +285,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { `${expectedInitialAvailableFields}, url, utc_time, xss` ); - // Expand Empty section - await PageObjects.unifiedFieldList.toggleSidebarSection('empty'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('empty')).join(', ') - ).to.be(''); - // Expand Meta section await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); expect( @@ -323,16 +317,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.be(true); // Available fields after scrolling down - const emptySectionButton = await find.byCssSelector( - PageObjects.unifiedFieldList.getSidebarSectionSelector('empty', true) + const metaSectionButton = await find.byCssSelector( + PageObjects.unifiedFieldList.getSidebarSectionSelector('meta', true) ); - await emptySectionButton.scrollIntoViewIfNecessary(); - - // Expand Empty section - await PageObjects.unifiedFieldList.toggleSidebarSection('empty'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('empty')).join(', ') - ).to.be(''); + await metaSectionButton.scrollIntoViewIfNecessary(); // Expand Meta section await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); @@ -347,7 +335,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.be('relatedContent'); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '53 available fields. 1 unmapped field. 0 empty fields. 3 meta fields.' + '53 available fields. 1 unmapped field. 3 meta fields.' ); }); @@ -368,7 +356,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(availableFields.includes('@message')).to.be(true); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '2 selected fields. 2 popular fields. 53 available fields. 0 empty fields. 3 meta fields.' + '2 selected fields. 2 popular fields. 53 available fields. 3 meta fields.' ); await PageObjects.unifiedFieldList.clickFieldListItemRemove('@message'); @@ -388,7 +376,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.be('@message, _id, extension'); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '3 selected fields. 3 popular fields. 53 available fields. 0 empty fields. 3 meta fields.' + '3 selected fields. 3 popular fields. 53 available fields. 3 meta fields.' ); }); @@ -412,7 +400,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '0 available fields. 0 empty fields. 0 meta fields.' + '0 available fields. 0 meta fields.' ); await testSubjects.missingOrFail( `${PageObjects.unifiedFieldList.getSidebarSectionSelector('available')}-fetchWarning` @@ -457,7 +445,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '6 available fields. 0 empty fields. 3 meta fields.' + '6 available fields. 3 meta fields.' ); await PageObjects.discover.selectIndexPattern('with-timefield'); @@ -536,7 +524,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '6873 available fields. 0 empty fields. 3 meta fields.' + '6873 available fields. 3 meta fields.' ); await PageObjects.discover.selectIndexPattern('logstash-*'); @@ -575,7 +563,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '54 available fields. 0 empty fields. 3 meta fields.' + '54 available fields. 3 meta fields.' ); let allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); @@ -594,7 +582,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '54 available fields. 0 empty fields. 3 meta fields.' + '54 available fields. 3 meta fields.' ); allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); @@ -631,7 +619,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // check that the sidebar is rendered expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '54 available fields. 0 empty fields. 3 meta fields.' + '54 available fields. 3 meta fields.' ); let allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); expect(allFields.includes('_invalid-runtimefield')).to.be(true); @@ -688,7 +676,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '7 available fields. 0 empty fields. 3 meta fields.' + '7 available fields. 3 meta fields.' ); await kibanaServer.importExport.unload( diff --git a/x-pack/test_serverless/functional/test_suites/common/examples/unified_field_list_examples/field_stats.ts b/x-pack/test_serverless/functional/test_suites/common/examples/unified_field_list_examples/field_stats.ts index 6b5529e7936eb..47bbefa0dc8d6 100644 --- a/x-pack/test_serverless/functional/test_suites/common/examples/unified_field_list_examples/field_stats.ts +++ b/x-pack/test_serverless/functional/test_suites/common/examples/unified_field_list_examples/field_stats.ts @@ -68,7 +68,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { describe('field distribution', () => { before(async () => { - await PageObjects.unifiedFieldList.toggleSidebarSection('empty'); // it will allow to render more fields in Available fields section + await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); // it will allow to render more fields in Available fields section }); it('should return an auto histogram for numbers and top values', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/observability/infra/infra.ts b/x-pack/test_serverless/functional/test_suites/observability/infra/infra.ts index 94e9f35393e7f..7b0b7828ec65c 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/infra/infra.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/infra/infra.ts @@ -89,7 +89,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await retry.try(async () => { const documentTitle = await browser.getTitle(); expect(documentTitle).to.contain( - 'demo-stack-redis-01 - Infrastructure - Observability - Elastic' + 'demo-stack-redis-01 - Inventory - Infrastructure - Observability - Elastic' ); }); @@ -104,7 +104,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await retry.try(async () => { const documentTitle = await browser.getTitle(); - expect(documentTitle).to.contain('pod-0 - Infrastructure - Observability - Elastic'); + expect(documentTitle).to.contain( + 'pod-0 - Inventory - Infrastructure - Observability - Elastic' + ); }); await returnTo(INVENTORY_PATH); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts index 90aea100989cc..0bb8da7a911b9 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts @@ -22,7 +22,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'svlCommonNavigation', ]); - // FLAKY: https://github.com/elastic/kibana/issues/173165 + // Failing: See https://github.com/elastic/kibana/issues/173165 describe.skip('Header menu', () => { before(async () => { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); @@ -143,9 +143,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); expect(await browser.getCurrentUrl()).contain('/app/discover'); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitForDocTableLoadingComplete(); - await retry.try(async () => { expect(await PageObjects.discover.getCurrentlySelectedDataView()).not.to.eql('All logs'); }); diff --git a/yarn.lock b/yarn.lock index c705d09054759..80c97acd74163 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9660,10 +9660,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node-forge@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.1.tgz#49e44432c306970b4e900c3b214157c480af19fa" - integrity sha512-hvQ7Wav8I0j9amPXJtGqI/Yx70zeF62UKlAYq8JPm0nHzjKKzZvo9iR3YI2MiOghZRlOI+tQ2f6D+G6vVf4V2Q== +"@types/node-forge@^1.3.10": + version "1.3.10" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.10.tgz#62a19d4f75a8b03290578c2b04f294b1a5a71b07" + integrity sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw== dependencies: "@types/node" "*" @@ -10181,10 +10181,10 @@ dependencies: "@types/geojson" "*" -"@types/tough-cookie@*", "@types/tough-cookie@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" - integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== +"@types/tough-cookie@*", "@types/tough-cookie@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/type-detect@^4.0.1": version "4.0.1" @@ -10296,14 +10296,6 @@ dependencies: "@types/node" "*" -"@types/xml-crypto@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@types/xml-crypto/-/xml-crypto-1.4.2.tgz#5ea7ef970f525ae8fe1e2ce0b3d40da1e3b279ae" - integrity sha512-1kT+3gVkeBDg7Ih8NefxGYfCApwZViMIs5IEs5AXF6Fpsrnf9CLAEIRh0DYb1mIcRcvysVbe27cHsJD6rJi36w== - dependencies: - "@types/node" "*" - xpath "0.0.27" - "@types/xml2js@^0.4.11": version "0.4.11" resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.11.tgz#bf46a84ecc12c41159a7bd9cf51ae84129af0e79" @@ -10753,10 +10745,15 @@ object.fromentries "^2.0.0" prop-types "^15.7.0" -"@xmldom/xmldom@^0.8.5": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.6.tgz#8a1524eb5bd5e965c1e3735476f0262469f71440" - integrity sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg== +"@xmldom/is-dom-node@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@xmldom/is-dom-node/-/is-dom-node-1.0.1.tgz#83b9f3e1260fb008061c6fa787b93a00f9be0629" + integrity sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q== + +"@xmldom/xmldom@^0.8.10": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== "@xobotyi/scrollbar-width@1.9.5": version "1.9.5" @@ -17206,18 +17203,19 @@ formidable@^2.1.2: once "^1.4.0" qs "^6.11.0" -formik@^2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" - integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== +formik@^2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.5.tgz#f899b5b7a6f103a8fabb679823e8fafc7e0ee1b4" + integrity sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ== dependencies: + "@types/hoist-non-react-statics" "^3.3.1" deepmerge "^2.1.1" hoist-non-react-statics "^3.3.0" lodash "^4.17.21" lodash-es "^4.17.21" react-fast-compare "^2.0.1" tiny-warning "^1.0.2" - tslib "^1.10.0" + tslib "^2.0.0" forwarded-parse@^2.1.0: version "2.1.0" @@ -31246,13 +31244,14 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== -xml-crypto@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/xml-crypto/-/xml-crypto-3.0.1.tgz#1d4852b040e80413d8058e2917eddd9f17a00b8b" - integrity sha512-7XrwB3ujd95KCO6+u9fidb8ajvRJvIfGNWD0XLJoTWlBKz+tFpUzEYxsN+Il/6/gHtEs1RgRh2RH+TzhcWBZUw== +xml-crypto@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-crypto/-/xml-crypto-5.0.0.tgz#e54dff59bf0e18527b91af7690513041ebb90273" + integrity sha512-TdJZp/gdKb5RYiZigLy/RUz9EpbEV+HoOR4ofby3VonDSn7FmNZlex7OuxLPD8sRlCLZ5YYFI+9s1OhFs7fwEw== dependencies: - "@xmldom/xmldom" "^0.8.5" - xpath "0.0.32" + "@xmldom/is-dom-node" "^1.0.1" + "@xmldom/xmldom" "^0.8.10" + xpath "^0.0.33" xml-name-validator@^4.0.0: version "4.0.0" @@ -31294,15 +31293,10 @@ xmldoc@^1.1.2: dependencies: sax "^1.2.1" -xpath@0.0.27: - version "0.0.27" - resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" - integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== - -xpath@0.0.32: - version "0.0.32" - resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.32.tgz#1b73d3351af736e17ec078d6da4b8175405c48af" - integrity sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw== +xpath@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.33.tgz#5136b6094227c5df92002e7c3a13516a5074eb07" + integrity sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA== xstate@^4.38.2: version "4.38.2"